GameFrame for Java 0.9.4 Class Library
Game Developer Documentation - Version History
Version 0.9 04. Jul 1999 by Pasi Keränen, javanerd@geocities.com
Version 0.9.1 02. Nov 1999 by Pasi Keränen, javanerd@geocities.com
Version 0.9.2 29. Nov 1999 by Pasi Keränen, javanerd@geocities.com
Version 0.9.3 02. Apr 2000 by Pasi Keränen, javanerd@geocities.com
Version 0.9.4 16. Jul 2000 by Pasi Keränen, javanerd@geocities.com
1. VERSION HISTORY
0.9.4 BETA - Fifth BETA release.
- Fixed bitmaps sometimes being loaded incorrectly (caused if loading bitmap from a streaming medium like network). Caused by read buffers sometimes being left non-full due to network breakups.
- Fixed incorrect calculation of bitmap row padding to 4 bytes.
- Fixed null pointer exception under MS Java 3.x when invoking getClone with null BitmapEffect.
- Fixed incorrect behavior of getSubBitmapClone() under MS Java 3.x.
- Fixed ColorReplacementEffect to ignore alpha field and handle different bit depths correctly.
- Changed the MS Java 3.x implementation to use the DirectDraw surface lock /unlock method to get the raw pixel data for effect processing. This is (despite the heavy pixel/memory order conversions) faster than the old temporary bitmap file based approach.
- Changed the title for the graphics engine to be set via GameFrameSettings instead of setTitle() method in the GraphicsEngine (the setTitle() method was removed). This was a tradeoff for allowing the component, windowed and full screen modes.
- Changed the screen mode to be set by enumerated with GameFrameSettings method setScreenMode( int ) that accepts one of the GameFrameSettings.SCREENMODE_xxx values.
- Changed BitmapEffect interface to return the resulting bitmap data object. This allows the bitmap effect to change the size of the image data if needed.
- Changed BitmapData to include a lot more information about the contained bitmap data.
- Changed AnimBitmap to advance frames using floating point numbers, so that the frames can be advanced with fractions of frames.
- Removed command line option "-nofs".
- Removed double definitions of classes in all engine packages (jdk12x, msjava3x and msjava4x). Now the engines that come with GF4J are integrated so that JDK 1.1.x engines serve as the base that all other implementations also use and only sensible engines are overridden. This reduces the size of the library a lot and also reduces the amount of redundant work needed to upgrade the engines.
- Added method loadAlphaBitmap( String, int, int, int) that makes it possible to load the alpha bitmap by specifying the transparent key colour directly.
- Added AppletGameFrame that can be used to create Applet GameFrame engines.
- Added Applet specific engine implementations for JDK 1.1 under gameframe.appletengines.jdk11x package. Also added methods to load bitmaps and samples from URL's.
- Added Counter class to utilities. It can be used to count e.g. players score. It uses the fontbitmap that is in use upon the creation of the Counter object.
- Added ScaleEffect bitmap effect.
- Added new screen mode of component screen mode where the returned GraphicsEngine can be casted to java.awt.Component and can be used as normal focus traversable component in an application.
- Added AnimBitmap that is an animated bitmap object that users can use to easily display animations.
- Added command line options "-forcewin" and "-forcefull" that force either windowed or full screen mode.
0.9.3 BETA - Fourth BETA release.
- Fixed getSupportedResolutions() in Microsoft Java EngineFactory. The algorithm didn't take into notice the already existing GraphicsEngine instance and confused that existing instance if user asked supported resolutions after he had created it.
- Fixed setDataDirectory() methods of GraphicsEngine and SoundEngine classes to not require leaving out the last path separator.
- Fixed getSubBitmap() and getSubBitmapClone() methods in all implementations to work correctly when getting a sub bitmap of a sub bitmap.
- Fixed JDK 1.1, JDK 1.2 and Microsoft Java 3.x windowed graphics engines to use clipping regions only when absolutely necessary. This increased the speed quite a bit when using plain bitmaps.
- Changed JDK 1.2 implementation of the InputEngine to use a replacement for the system event queue (slightly faster than the normal listener methods).
- Changed the packages and moved classes to the appropriate package. This should help a novice user to grasp the use of any class more quickly.
- Changed the default font bitmap to a more fancier looking.
- Removed the finalize() method from PointerDevice and KeyboardDevice interfaces. There shouldn't be no reason to use finalize a separate device and removing it from the interface allows more freedom in implementations.
- Removed the GameFrameStrings class, all texts are now inlined in the source.
- Added getName() and getDescription() methods to GraphicsEngine, SoundEngine and InputEngine interfaces.
- Added getDataDirectory() method to GraphicsEngine and SoundEngine.
- Added getTextWidth( String ), getTextWidth( byte[] ), getFontWidth() and getFontHeight() methods to GraphicsEngine.
- Added EffectSettings and ColorMapping classes that allow the user to define effect settings that are then applied to a bitmap. Currently implemented effects settings are rotation, flip, mirror and color replacing.
- Added getClone( EffectSettings ) method in Bitmap that allows getting of effect processed copy of a bitmap. The method is very, very slow as under Microsoft Java when using DirectDraw it has to store the processed bitmap into a temporary file and load the new bitmap from there.
0.9.2 BETA - Third BETA release.
WARNING: gameframe.Sound is now named gameframe.Sample. gameframe.Sound contains a new interface different from that in the previous version! When starting to use this version of GameFrame for Java first rename all Sound definitions in your old source code to Sample.
- Fixed "CRiffWavFile.load() No filename was specified" exception always being thrown by JDK 1.1.x SoundEngine.
- Fixed Microsoft Java EngineFactory throwing exception instead of returning NullSoundEngine when sound card was not available.
- Changed MainFactory class name to GameFrame.
- Changed MainFactorySettings class name to GameFrameSettings.
- Changed MainFactoryException class name to SettingsException.
- Changed sample loading method in SoundEngine from loadSound to loadSample.
- Changed Sound interface to be named Sample.
- Changed NullSound to be a separate class NullSample instead of being an internal class of NullSoundEngine class.
- Changed beginners_guide document to GameDeveloperIntro.
- Changed bitmap loading and WAV loading code to be centralized in the gameframe.util package.
- Changed EngineFactory interface to be in the gameframe.common package (so that it is excluded from game developers documentation).
- Changed GameFrameExceptions due to engine creation failure being thrown upon GameFrame instance creation. This removed the need to try-catch each GameFrame.getXXXEngine method.
- Changed all classes in gameframe.common and gameframe.util to use standard Java naming (removed all C and I prefixes).
- Removed Java Media Framework timers as they were no better than the Java timers based on System.currentTimeMillis().
- Removed getBounds() and setBounds() methods from the GraphicsEngine as they were invalidating the settings given in GameFrameSettings and thus might have caused undesired behavior.
- Removed the gameframe.jni package as it didn't contain anything useful.
- Added new Sound interface that acts as the base interface for all sound representations be it music, sample etc.
- Added exit( int value ) method to GameFrame object that takes care of finalizing the whole library before exiting the application. Users MUST take care of finalizing the library before exiting their program as for some reason upon application exit the finalizers are not executed automatically by the Java runtime.
- Added Music interface for playing MIDI music files. Also added method loadMusic() to SoundEngine for loading these MIDI files.
- Added LibraryDeveloperIntro document.
- Added support for 1-bit and 4-bit bitmap files.
- Added object preserver for preserving singleton objects under any JDK version.
- Added Finalizable interface to the gameframe.common package, this allows any engine factory to keep record of any engine implementations that it needs to finalize upon its own finalization. E.g. one implementation of NullSoundEngine can this way be shared by all engine factories.
- Added getSize() to GraphicsEngine so that the current size of the display area can be gotten (replaces the removed getBounds() method).
- General cleaning up of the code and removing unnecessary catching of all exceptions and errors, so that the game programmer can see the ACTUAL exception or error not just the GameFrame's internal exception (suggested by Donald Strong).
0.9.1 BETA - Second BETA release for collecting input from the public.
- Fixed finalize() method issues where all engines were not releasing their internal static attributes.
- Fixed Microsoft Java graphics engine not loading fontBitmaps in all situations.
- Fixed Java 2 not being able to run at all (due to the new way classes are loaded).
- Fixed Java 2 using Java 1.1 engines.
- Fixed too loose specification of maximum size of a bitmap. DirectX graphics engine was showing smaller bitmaps in GraphicsTester than other implementations. The maximum size of a bitmap is now limited in all implementations of graphics engines to the current graphics engines resolution.
- Added sound support to Java 2 implementation.
- Added build numbering.
- Added possibility to check if the library is a stable release with MainFactory.isStableVersion().
- Added error handling with exceptions (suggested by Donald Strong).
- Removed unused classes from packages.
- Changed to very strict access control in all methods and classes, only methods defined in interfaces should be visible outside the engine implementations package.
- Changed Engine Factories to be hidden from the user (suggested by Donald Strong).
- Changed the way in which MainFactory is created and its settings set (suggested by Donald Strong).
- Changed the engines to be compile time separated from MainFactory by using Class.forName(). Individual engines can now be compiled separately. Still JDK 1.1 and JDK 1.2 engines need Java Media Framework installed before they compile.
0.9 - Preview release released for collecting input from the public.
- Has some major issues left (library compiles only with MS Java SDK 3.x, no joystick input support on any platform, no MIDI music playback, no engines based on JNI etc.).
0.0 - Initial development version, not released to public.
- Implemented both Java AWT 1.1 and DirectX engines with the initial functionality.
2. ABOUT VERSION NUMBERING
Major version number will be incremented by one upon each new public stable release that will change existing functions in a major way or adds major new functionality. Major versions might break downwards compatibility, but are don't always do that. Breaking downwards compatibility must always be done in a major version update and must be well documented. Backwards compatibility should be preserved for as long as possible.
Minor version number will be incremented by one upon each new public release that adds (or changes in a minor way) functionality to the library's interfaces. This means versions that are bug fix versions or include new engine implementations for the existing interfaces. Upon new major version release this version number will be reset to 0. The game shouldn't need to check for minor version, as minor versions are compatible between each other as far as the interfaces go. But if you know that you use a feature in the library that was fully functional only after a certain minor release, you can check that the library's minor version meets your requirements. The game should always check for "at least version" as the game library should be downwards compatible inside the same major version.
Build number is incremented by each build. One minor version can have (theoretically) up to 2147483647 builds (that is the limit of the used integer number). A build is considered being a compiling of edited source code that is given to person/persons outside the development team. This means that there is no need to count the number of compiles inside the development team.
Unstable build flag is also used when the version in question is a build in anticipation for the next major version, but is not of release quality yet. This usually happens, when a radically new version of the library is underway. E.g. all versions before the first release 1.0.0 are versions 0.9.x with the unstable flag set.
All this means that:
- A game can trust that game libraries that have the same major number as the library that was initially used with the game, will be compatible with it and can be used by the game. An exception to this are all the beta releases that are indicated with the unstable flag. These beta versions are usually injected into the versioning at with version numbers of 0.9.x, 1.0.9, 1.9.x etc. But if a game finds out that the version is lets say 1.9.0 and the unstable flag is off, then the version really is a version compatible with version 1.0.0 version. But if in that same case the unstable flag is on, then the library is no longer guaranteed to be backwards compatible.
- A game can insist "at least" minor number (that has a bug fixed or feature added that might inflict the games operation).
- A game can insist "at least" build number (that has a bug fixed that might inflict the games operation).
- A game can insist a stable build or at least notify the user that his current GF4J library is not a stable version.
Copyright ©1999-2000 Pasi Keränen, javanerd@geocities.com
Re-use with the GameFrame for Java library builds
allowed if the history field in the beginning of the
document is left intact (only adding of entries
is allowed, no removing).