Part 17 What do I do Next?
There is nothing like going in a shop and seeing your own game on the shelf. When I first saw 3d Space Wars in Woolworth's I was very proud. It suddenly all felt very real instead of being a pipe dream. I used to get a similar feeling seeing advertisements for my games in the mags and reading the first reviews. On the whole reviews were very kind about my games but for some I felt the reviewer hadn't really got into the game. I used to write games that didn't fit in a standard genre. I was inventing new genres not trying to fit into expectations. I liked being able to meet a reviewer to discuss the game. Then at least I knew the reviewer knew what was in the game. My games often had hidden depths that you might not find with a cursory play. I believed in making a game simple at the start so new players could play it, but then to introduce new features so the game unfolded as it was being played. Perhaps my biggest disappointment was Astroclone. I had written a brand new graphic engine to increase frame rate and get rid of flickering graphics. To show the new system off I added a front end to the adventure that was inspired by Defender. Then to tie all this together I added a strategic element. I balanced the gameplay between these elements and thought it was a masterpiece but it jut was not what anyone expected. The people who liked my action adventures couldn't get on with the shoot em up bit, The game didn't fit in any genre it was treading new ground. After that game I retreated to a much more conservative design style and developed Quazatron relying heavily on Andrew's Paradroid. Reviews really got inside my head. When you have put your heart and soul into something only 100% is good enough. I always came back fighting though thinking I will show them with the next game.
Deepest Blue Progress.
If I had a publisher it would be now I would have to explain why progress has slowed to a crawl. Here are my excuses;
1. The meerkats keep enticing me to use my Meerkat movie tokens. Wednesday PM is now movie afternoon.
2. The weather is so hot and I cant see my laptop screen in the sun. Did manage some work under the sun shade but it gets so sleepy. Well I am retired.
3. Have to keep watering the garden.
4. My new e drum kit sounds fabulous. I combined it with my old kit so its a monster. I want to get really good to record the music for the game.
When I think about it I have done a fair bit of programming this month. I take my laptop twice a week to my mother in laws. We stay the night so it gives me a couple of days to program. She is a bit loud though so its hard to concentrate. She has the tele on max so it all vibrates. Sometimes I put ear plugs in. She thinks I am going deaf as I don't respond when I am deep in thought.
Adding The Galaxy.
I found a data file modelling the dust in the Milky Way and thought it would be cool to add that into the game as my 120000 stars were centred on the sun so looked more like a globular cluster than the spirals of the Milky Way. When I added the 40,000 dust clouds the display slowed down so I had to reduce the size. Now they look more like stars so Ill have to rethink. It does look more like the galaxy but not the look I want. I could copy a picture of the Milky Way and use that as a backdrop. It has got to look much more sexy. I played around with an on line shader engine, maybe I can write a shader that emulates the galaxy. I added a dynamic fly into the galaxy so you get an impression of where you are.
Playing With Shaders.
I found a dramatic warp hole effect on a web site. I tried installing it in my shader editor but its a bit too big and complicated. So I thought I would try something simpler. I tried distorting the uv coordinates of the models texture and got some nice effects. I think I will make the Sieddab ships alive. I also tried an effect whereby a ship is hit by a lasor and heats up and melts. I just love the effects you can get. I need to try lots more and really get on top of the way of thinking. The processing has to be from the each pixels point of view as each may be processed by a different graphics PU. Its such a different way of thinking. What I like though is that is pure creative programming reminding me of painting pixels on the first machines I programmed.
I wanted to make the in game systems seem like a big futuristic computer system. I designed a fairly standard logon screen to create this illusion and started on the design. I wanted a really dynamic way to select and display screens. I had written a routine to print a screen onto a texture rather than the background. I write a supporting object I called Thumbnail to manage these. I then hooked up a series of Thumbnails with a pre-existing Carousel object that displays a 3d selection to choose from. WIth this combination I can whirl screenshots around in 3d space, select one and make it zoom to the foreground become the current screen, This is real rock and roll, its all my systems talking to each other, I had a few crashes when screens fired up in an untested order to try it all out. I even had each screen running in realtime on the thumbnails but I think that is going too far, they were not designed to run alongside each other so I am surprised I did not have more problems. I tried adding a screen to my spaceship console as if its a computer screen. I added the whole carousel to the console. It works but for the zoom effect its better if the carousel is big. I can now see how all the bits are going to fit together.
Power System.A couple of months ago I installed a super duper power control system. I only put in one of the 6 I needed so thought I better finish it off. The design was quite difficult as it had to cater for user built ships with highly different capabilities. So I decoded to make all the meters run on a fractional basis.
Its starting to look a bit like my sound mixer. I added slider controls so you can adjust the percentage of power into each of 6 power groups. You can overdrive each group to get better performance for a while but the temperature rises and eventually causes damage. You can switch on an auto adjust if you want the computer to balance the power. It gives a nice feeling as the ship powers up and all the meters spring into life. Ill have to add some sound soon. You can underpower your engines for fine manouvering, its working well. I tried flying round and blowing up asteroids but crashed the collision system, Happily the crash was a test I put in to check the data. I forgot to add to a count.
|Killing asteroids, all GFX are just placeholders.|
Programming Tip.I recently dug out some old coding folders to scan some examples to take to the Revival event. I was quiet surprised at how messy my work was. I used to write in pencil and rub out and correct, these were the days before text editors. However the whole thing although superficially messy was well organised. The data was all in strict formats with systemic labelling and cross referencing.
When you write a big program you get to the stage when you just cannot fit it all in your head. The best way to organise a program is right from the start. If you set out a shape to the project you remember where to find anything. Its like organising anything. Group similar things together by splitting up the whole thing into meaningful subsets.
The converse of this is to keep different things separate. I like to split a program into several libraries.
I keep the reusable core routines separate so to start another program you can just include these. These are built into a linkable library.
I like to have a module for each major "object" in the game rather like object oriented programming.
Sometimes a module will have a couple of closely related objects. My Window object and Window Manager share the same module but their routines are kept separate in case one day it gets too big and I then want to split it. I like a header file for each C file strictly containing any structures and external references.I keep internal references in the C module so they are effectively private.
My memory is not what it used to be. One of my methods is to use rules to create names of things. It is then much easier to guess the name and intellisense does the rest. I always put the object name first, so my Window routines are named things like WindowInit, WindowTerm WindowPlot then they appear together in alphabetic lists. I always try to use the same name for the same thing. If a name becomes ambiguous I will consider renaming using find and replace. It really pays to be systematic. I only use abbreviations when words are very long the I always use the same ones, such as Init for Initialisation.
I used to use hungarian notation for years but with intellisense find it mostly unnecessary hieraglyphics. Occasionally I still use it when playing around with types to distinguish several versions of the same data and for pointers and pointers to pointers as it helps with understanding what is going on.