I have just complete the synthesiser and mod player necessary for the game music, so I hope to have a new build of the software out in public during the next week.
It remains to be seen if it can be made to run on the ARM7 processor of the Dreamcast sound chip, or if it is too inefficient, I might have to run it on the SH3 and hopefully I can use DMA to load the wave stream to the AICA sound memory.
Seasons Greetings to you all.
It's nearly 3 months since I last made a test build available. One of the main reasons for this, was a small series of disasters which befell my website.
Well, the website is now back up and running at submarine.org.uk/projects/fury Hopefully I will continue to have reasonable access to it, and so to keep it and the project more up to date.
This newsletter is now being distributed by a mailer script, I hope this will address some of the issues that I had in the past getting the newsletter to people. Also it is archived on the website on the progress page and is available as an rss feed.
This build contains all of the sound effects in the intro movie. They are not yet in quite the correct places, and some parts of the movie are still running at the wrong speed, but I will be able to address all of this better when the music is finished.
I have now confirmed that the .kmd music files use an ad-lib based fm synthesiser, I am in the process of quantifying the parameters of that synthesiser, and then I will be writing a platform independant synth and a kmd tracker to play the music.
Also in this build, once you get as far as loading up a game, there is a little non-animated furry on the screen which you can move around using the arrow keys / dpad. There is no collision detection, but it allows you to see the whole level.
I am off on my Christmas holidays soon, so I'll write again in the New Year.
David O'Rourke (c14)
It's taken quite a while, but now the Dreamcast version is capable of playing sounds to the same extent that the PC version can. Along the way I came across the S3M mod file format which seems to offer me some further clues as to the wave-form parameters in the kmd files. If I can find a machine where I can use the sound card, I'll be able to do some more experiments on the sound to try and prove one way or another. I think this remains the largest sticking point at present. There's a lot of minor experiments to do for the game physics, as I think I mentioned last time, but I can't get any game music going until I can nail down the exact nature of the tracker that I need to build.
The submarine web site is still down, and may well remain down until the new year, when I hope to move house and get broadband.
Not much else to say really, this week has been entirely taken up wrestling with the Yamaha AICA spu in the Dreamcast. I did also notice that I was running out of texture memory though. I had to rearrange a little bit of the code. I think I mentioned the possibility in the last newsletter, but the problem was already there in certain circumstances. The DC has 16Mb of core memory, 8Mb of texture memory and 2Mb of sound memory. The decor files, when loaded up into the texture system, in 16bit color can take up 1Mb each, so I have to load and discard textures as I need them for each section of the game.
That's all for now.
Long time no speak.
a small series of disasters has befallen my web site, so I haven't posted any new builds for a while, but I have been making progress.
I recoded parts of the gameplay handling so that initialising and managing levels is more self contained. This is important because I have to maintain a game level while you are playing bonus levels that spawn from it. I now have a heirachical structure. I must remember however to release the textures of the parent level before starting the bonus level, and then rebuild the parent textures when the bonus level exits. The Dreamcast only has 8Mb of texture memory and a large part of this is taken up by the two sprite files for the furries, the level decor and the sprites for the bad dudes.
I added in the cut scenes between sections of the game: The map of the world, with the little animated furry that traces your path through the world, and the various other animations on that screen. I haven't added in the extra animations when the machine comes out of the sea. The data for the route traced on the map comes from a static table inside the original executable, so I have loaded the exe in memory to drag out such tables. Also added the pictures labelled as PRESENT1.LBM -> PRESENT9.LBM These are the 256 color pictures shown at the start of every 10th level and the scroll with the 'You are heading for the evil forest level 1' sort of message on it.
The main gameplay itself has not really progressed. Last time I wrote the game loaded the decor file and drew the background for the game. Now I have added a non-animated furry as a marker to show you where you are, and you can move around the map. There is no collision detection and no gravity yet.
I have also started on the sound engine. Under Win32 the game now loads two kinds of sound effect files. Inside intro.dat there are .snd files which are raw wave data, and the SND directory contains .iff files. It can load these and currently it plays the two .snd files during the Kalisto splash in the intro, and the noise when a furry appears in the game.
One of the starting points of this project was the fact that I could never get the game to run properly under 32-bit Windows. On my current machine, I cannot get the sound card recognised under DOS (or even in DOSboxes under windows). This is the sort of issue that's all too common these days. The sound chip on board the machine will be recognised under DOS if I turn on the 'Legacy Sound Support' in the BIOS. Which I would do if Compaq had had the decency to provide such an option in their customised BIOS. (It's not the only option that's missing). So I'm having to resort to other machines to do my sound testing. I have modified the intro.kmd music file so that it's completely silent, and this will help me establish which sounds play where during the intro.
The sound engine under the Dreamcast is my target for this week. The Dreamcast is fitted with a 4.5 MHz Yamaha AICA 64 channel sound chip which is controlled by a dedicated ARM microprocessor. This means that all the hard work for sound can be shunted off to a dedicated processor leaving more time for the graphics and gameplay, but it means that I have to cross-compile a custom built sound player for the ARM, get the main program to pump it into the sound memory, which is not directly connected to the primary processor anyway, so I have to negotiate the timings with an ASIC, and the kick the sound engine off, where hopefully I will be able to signal to it every so often that I want it to do something. It should be perfectly possible, but I always find new territory very daunting.
This week I might get round to trying to contact Frederic Motte to let him know what I'm up to.
Then my next target will be an xml-parser. I need someway to convert the game level data into a reasonably editable form. I got part way through in the past with a text-based format. I have decided that if I have to write a parser to convert it back again anyway, I may as well make it a generalised xml-parser that would be useful for other formats. There's a great deal of experimentation to be done to accurately measure the game physics, timing and so on.
As soon as my web-site is sorted out, one way or another, I'll post up some more screenshots and the latest builds.
Bye for now....
I reached a milestone last week, for the first time, the program now actually loads and displays information from a level of the game. If you select a game to play from the main menu, it will load and display the background for the first desert level.
Having acheived that small but significant step, I went back and optimized some of the code:
There are four different fonts used at various points by the game, each having different sizes, different kerning, and being layed out differently on the textures. Where before I handled this with 3 different font drawing routines, I have rationalized it all down into 1 function to streamline things a little. At the same time I added in the kerning information which I had previously left out as a low-priority issue. As a result, the text layout matches the original considerably better.
Another place where I was able to streamline the code was in handling the screen fades. Previously this was done with a black, blended polygon which covered the screen when needed. Instead I now use glColor to fade all textures as they are drawn. On the Windows platform, this greatly reduces the screen overdraw and leads to a significant improvement in graphics bandwidth use. On the Dreamcast, the consequences are more significant. Blending is a slow process for the pvr tile-engine, and blend polygons occupy their own polygon list. By removing the need for blends, I can render all the polygons as punch-thrus and avoid having to switch lists altogether. This improves performance, and streamlines the code.
My target this week, is to build the game play code, into a stack structure, so that it is possible to play a secret level in its entirety and then return to the original level, where you left off. To test this, I'll also have to implement some sort of movement, (without collision detection at this stage) and also level changes triggered by the exit, or by the clock expiry.
Thank you for listening.