Warp 1.5: History

A few months before writing this game I happened to find the very interesting raytracer application Persistence of Vision. Interesting because it's free and because it uses a scripting language which gives the user detailed control of every part of the rendering. Since most serious computer games developers use raytraced graphics in one form or other, I figured I should do the same -- just to force myself to learn how to use the application. (I had experimented a little with it to create the graphics of Adios, Amoebas! but that wasn't big enough to count.)

It seemed like a good idea to base the project on an improved version of my old game Warp, because then I'd be using known programming techniques and I could concentrate mainly on the graphics. I had also received a number of suggestions on how to make that game more interesting. For example:

  • Add the ability to move up and down
  • Allow for firing and steering at the same time
  • Use more than one "bullet"
  • Make the levels easier
Apart from that I threw in some desired modifications of my own:
  • An altered technique for updating the background, allowing more flexibility in the way objects are distributed on the screen.
  • Replacing all bullets with plain, white filled rectangles, assuming them to stand out better and be faster to draw in Java.
  • Start and end sequences that would give the game more of a "space" character. (All decent shoot-em-up games should have a special attack wave or a huge enemy at the end of levels.)
  • A proper highscore list, where you can type in your name. The reason why I hadn't done that before is that the highscore list is always what I create last -- when I've almost lost interest in the game and figure "Naah, who needs a highscore list with names? It doesn't get permanently stored anyway."
  • A deterministic random number generator for the backgrounds, making them "random", yet identical each time.
  • Use of AudioDataStream objects instead of AudioClips, which meant less to download over the net. (See the sound page for details.)
  • An extra control device for three kinds of optional music. (See the music page for details.)
  • A more sophisticated control panel. While trying out different designs, I realized it would bear an uncanny resemblance to a cellular phone no matter what, so I went all the way and shaped it like a phone just for the heck of it.
There is only one part that hasn't been drawn by a computer and that's the logo. It was just too awkward to draw in any other way than by hand.

I had originally planned to list the Persistence of Vision script files I wrote for the graphics, but they probably wouldn't be of much help to anybody, so I'll settle for just showing the code that generated the spaceship.

#declare ship=union{
         scale <1,1,0.9>}
      finish{phong 1 ambient 0.2}
         scale <1,1,1>}
         scale <1,1,1>}
      finish{phong 1}
      finish{phong 1}
It's not as complicated as it may look. The ship is just a combination of boxes, spheres and cylinders, with different colors and textures. The same applies to most of the other objects in the game.