ProSonic Engine Update

ProSonic Engine Update

by February 18, 2009

Sonic Fan FlashGrove Explains what to Expect Next Release

One of the more anticipated Sonic fan game projects is Damian Grove’s ProSonic engine, in development for some time.  Periodically, Grove will update those curious with what’s going on, and he did so over this past weekend at Sonic Retro.

The update was very detailed and filled with a significant amount of jargon only those close to Sonic fan game development would be aware of.  The short of it is that the ProSonic engine supports an array of music options, splitscreen for up to four players, demo recording, and resolution doubling–but there’s much more to go:

—- Background layer —-

I had to take out the background layer for the 8-22-8 release, because I knew it would only make the engine perform even worse, especially for people who don’t have newer computers. Now I still have the background layer coded, but the code is horrendous. I could post it on here to show everyone, but you’d never be able to understand half of what’s written. I know I don’t, and I’m the one who put it together! There’s also some bugs in it, and certain features never did work exactly as they were supposed to.

So, I’ve planned out in a little text file exactly what I want it to do and what possible features are optional (not absolutely necessary.) The background layer will still use “cells” as used in this video to achieve paralax scrolling. They’ll be able to scroll horizontally and vertically, distort, and optionally be shown only at certain camera positions. These combinations allow for enough flexibility to do everything done in all three Genesis games, and then some.

—- MMF-like scripting language —-

I am studying MMF’s event editor, and I’m drawing many ideas from it. I have brainstormed how the language will be structured and parsed. I’m designing it in a way that allows me to create software in the style of ClickTeam’s event editor to do scripts. You could call it a rip-off sorts, but the event editor is easy to use without a doubt. It will be only be the second task I do, but it will also be the most difficult one of the bunch.

—- Configuration file —-

There’s a lot of switches in ProSonic, but the only way to really access them is internally because they’re hard-coded. So I think a configuration file will help people access these switches. It would allow things such as setting the resolution, frame rate, enable/disable Smart Mix, and some nitty-gritty stuff. I know this has been requested on several occasions, so it’s something I have put on my list of things to do.

—- Load data files from external list —-

All the sprite/animation and sound files are loaded according to a list that is internal to the engine code itself. If people are to write their own objects or create their own music and sound effects, they probably want to be able to name them whatever they want. Therefore, I’d like to make some external files decide which filenames to look for. I may apply this idea to PZF files, but I’m kinda used to the whole “zone###.pzf” system at the moment, because it also allows zones to be automatically ordered by the engine without extra data needed to do that. But I’m open to suggestions, so if anyone has any input on what should or should not be done here, let me know.

—- Animate block art —-

I’ve wanted to do this for a while. I always knew I’d eventually have to do it, and so I’m making it a goal this time around. Ever since I transformed ProSonic from 8-bit color to 16-bit color, I’ve pondered what the heck to do about color animations and underwater palettes. There are several things I could do, but none of them are really easy to do or very flexible. My solution is to allow blocks to have animations. That way, if you need a palette animation, you can just update the block artistically rather than changing the palette. This is the easiest method from a programming standpoint, and it’s probably easiest to grasp for game designers too, both experienced and inexperienced.

—- Get water working —-

Anyone who played the anniversary camera demo I released back in 2006 will know that water used to work, and it had distortion, raised up and down at identical pixel progressions, any all that jazz. It was my favorite part of the engine, mainly because of everything I did, it was the only sophisticated feature that was actually flawless. Since then, water has been taken out of the engine mainly due to the problems with 16-bit color.

My decision is likely to be frowned upon by some who are dedicated to palettes. I feel most people don’t like palettes. I don’t like palettes either. My decision is to use a sub-set of block art for underwater portions. The downside is it’ll eat up more hard disk space (it’s not like a couple hundred kilobytes is a big deal anyway though), but the upside is newbies will get it. It’s easy to grasp. I firmly believe this is the right way to do this at this time. The engine could always be expanded to support water palettes in the future.

—- Add object layout editor —-

This is a key component that was missing in the 8-22-8 release. There’s no way to place objects in levels without a hex editor. So as one of the final things I plan to do before any release happens is to make object placement possible. I have been unsure how to go about it mainly because I need it to be able to interface with my engine at run-time.

Yeah I could make it a seperate program, but in the past that has got me in trouble because whenever I’d change something major (perhaps a file format), I’d forget to change it in the other programs, and so I’d create more work for myself. Keeping it internal saves me headaches, and I think most people will like it being built-in. So I see it as a win-win.

Now, I’d just like to review some things I’ve already accomplished since 8-22-8. I’ve talked about many of these before, and one or two I have not, but I like to review them in case anyone missed previous posts which seems to happen more than I’d like. So here we go:

– BUG FIXES!! It took me a week to do it, and they were silly (but hard to find) bugs. I cured the engine of these, and it no longer spontaneously crashes

– Major speed improvements! The first task I took on after fixing bugs following the 8-22-8 release was speeding the engine up. PZF files load faster than before, getting rid of the delay at boot-up and between levels. The drawing code has been entirely rewritten to be process on-screen information several times faster than the 8-22-8 engine release. I also recently put in an optional V-Sync to smoothen out the frames.

– Advanced sound support! VGM files are supported as I’ve stated before, and WAV files can also be used. The Smart Mix feature makes it the engine’s job to mix the sound rather than the game designer — easy! Up to 4 (software) channels of sound can be used. The engine has a WAV logging feature — that’s mainly for my use, but I may keep it in for anyone interested. Currenly, jumping, spinning, spindash, brakes, death, and the ring chime are implemented. Rings alternate stereo channels.

– Multi-player split-screen! Have 2, 3, or 4 players on a single screen. All of them are Sonic right now, but these players could be Tails, Knuckles, or anyone in the future. Net-play would be ideal, but I’m not planning for that right now.

– Demo recording works flawlessly! Before, because of bugs, it wasn’t entirely consistent. Now demos play the same everytime and don’t crash the program either! Currently I have a demo sequence that cycles through 3 different demos, and pressing enter starts the game. It’s mainly to show off the engine for people who have never actually played it before. At the end of a demo, it fades out the same way it does in Sonic 1 and 2.

– New screen modes! Now the screen can be doubled in size like Kega and Gens. In addition, I made it so all the screen sizes can be viewed properly in full-screen. I’m providing for a very emulator-like experience.

That should get everyone up-to-date on what’s happening. I’m also taking a look into the Vista Aero issue that has been brought to my attention — it has to do with security in Vista not allowing ProSonic to run while Aero is being used if the desktop isn’t using 16-bit color. That’s a problem. I don’t know what I want to do to make it work with Vista without turning Aero off. I’d like some programmer opinions on this.

The next official release of the engine is still undetermined.  We’ll continue to track developments on Damian Grove’s ProSonic.