Headcannon Game Engine Release 14.06.16
* Release 14.06.16
- "Engine02" has become "Headcannon Game Engine"
- Platform Enhancements:
- A new build is now available for the GCW-Zero
- Functions System Enhancements:
- Object Type IDs with G/Z/A tags can now be used as parameters to _Case Commands by prefixing them with the "O" tag (Ex: "OZ4" as a parameter will cause that case to be triggered when the switch receives the ID value of Zone Object Type 4)
- Object System Enhancements:
- Off-screen "Projectile Objects" now continue to test for collisions if they are still active
- Objects that are set to stay active when out of activity range can now be tested for collision while out of range (particularly useful for properly preserving object/object interaction when the player is not nearby)
- Sprite Editor Enhancements:
- Sprite frame graphics can now be "re-imported" by holding CTRL while clicking "Import"; this will replace the graphic but keep all other settings instead of resetting them
- The Sprite Select cursor has been changed from a small bracket to lines that extend all the way to the right and bottom sides of the screen to make alignment easier
- Utility Enhancements:
- Palette Dumper output now uses a more compact format; it takes advantage of the Function parser's multiple-parameter-per-line feature to place Red, Green, and Blue component entries for each palette index on the same line
- Palette Dumper now has a visual palette index selection tool
- Graphic System Enhancements:
- The game screen height has been expanded from 224 pixels to 240, replacing the black borders with 8 more visible lines each to the top and bottom
- Download System Enhancements:
- The progress bar has returned to the Windows build, and will now display in all other download-supporting builds
- Large and multi-file transfers no longer hog the main thread, preventing lockups on some finicky platforms (It is now possible to switch focus and do something else during a download without worry)
- Download speed has been somewhat increased
* Release 12.11.13
- Platform Enhancements:
- GP2X Wiz Version- Tweaked frame timing to very slightly improve performance
- PSP Version- Added a menu to E02 startup that allows selection of any of the stored Access Points (replaces the countdown timer from other versions and the automatic selection of the first saved Access Point)
- Windows Version- Full-screen mode now displays at 640x480 resolution by default instead of automatically switching and displaying a warning upon failure of an attempt to set 320x240 if the user's video driver does not support 320x240 mode and he/she does not first manually set full-screen mode to display at 640x480 instead. 320x240 full-screen display mode is still selectable for those whose video drivers still support it
- Windows Version- Windowed mode VSync is now enabled by default, as was always the case with full-screen mode. It may still be disabled manually if desired
- New Script Commands (1473-1539, see index in "Functions" doc):
- Constant values may now be used as the first non-destination operand in three-operand left-shift, right-shift, and modulus operations
- Two-variable "raise to power" operations that do not preserve the original value (as opposed to three-variable operations that do) may now be used
- The contents of two variables or text strings may now be directly swapped
- Registers may now be used to obtain index and color component values for setting individual palette entries
- Game/Zone Text strings may now be sent through the message system at any time during script execution, and are parsed for variable names/IDs (enclosed in '!' symbols) so that the current value of that variable can be displayed as part of the string
- "Zone" and "Act" data may now be forceably (re-)loaded without the need to use the "SetLevel" Command to perform a complete level change
- Processing of an Object's Animations can now be triggered manually so that Scripted Object Debug Placement Functions can cause a multi-animation Object to display correctly immediately upon being placed, and so that on-going Animation processing for an Object can be managed by Script Functions
- Parent/Child Object relationship may now be removed when necessary by using either of the new "Detach" Commands
- "BreakTo", a Command combining the functionalities of both "FuncBreak" and "GoTo", has been added as a slightly smaller, faster, "safer" method than using the two Commands individually and in sequence. This can be used to reduce the possibility of causing damage when modifying Functions used by Objects that have already been saved to an Object Layout file
- Scripted String read from file has been modified to include a parameter with which to specify the byte/character that acts as a terminator for the incoming string, instead of assuming all strings will be NULL- (0-) terminated
- Scripted String write to file has been modified to no longer automatically output a NULL string terminator. This allows for un-terminated string writes, and for the use of any byte/character as a terminator, however, it now requires that terminators be written manually
- Scripted String write to file will now parse the string for variable names/IDs in the same manner as the new "_ShowMessage"
- Functions system enhancements:
- New Keywords ("Do", "While", "Forever", "BreakDo", "IfFlag", "Flag", "Array", and "TableB"/"TableW"/"TableD")
- Raise to Power ("_Dest POW= _Exp" or "_Dest = _Var POW _Exp"), Absolute Value ("+_Dest" or "_Dest = +_Val"), and Negate ("-_Dest" or "_Dest = -_Val") are now supported by the "Eval" Keyword
- Labels can now use alphanumeric names, as opposed to the old method of numbering them sequentially (numbers used in older scripts will be regarded as "names", and will still work)
- Alias names can now be assigned "types" (for constant values, and relevant categories of game/player/object variable IDs), enabling the following improvements:
- Variable Type Identifiers (the "(PC)" in the example below) no longer need to be provided when using Keywords, but they may still be used as overrides
- Variable Type Tags (The "A" in the example below) no longer need to be appended to variable Alias Names (However, for commands that support it, the "R"/"r" tag must still be used when the intent is to substitute the contents of a Register for a Constant Value)
- Ex: "~Eval(PC) A_Player_X_Vel += 16" can now be written as "~Eval _Player_X_Vel += 16"
- Script Parser Directives have been added:
- ".Alias" allows definition of Function-local Alias names
- ".Include" allows for the inclusion of macro code from other files
- An error message has been added to point out keyword parameters that appear to incorrectly evanluate to "0" (Alias names not prefixed with a '_', and the negative value identifier '-' appearing after a value base identifier such as '$' rather than before it) to prevent some otherwise unidentifiable miscalculations
- An error message has been added to point out improper use of '=' and '==' to prevent miscalculations and incorrect conditional behavior
- Level and Object Editor interface enhancements:
- The editor size is now 640x480 by default (The old 320x224 editors are still available, and can be toggled by pressing F2)
- The status elements no longer overlay the editing area, and elements that previously required special keypresses are now immediately available (Applies only to 640x480 mode)
- Scrollbars have been added (to 640x480 mode), and automatic scrolling when the cursor reaches the screen's edge has been disabled (by default, to allow interaction with the new interface, and to prevent undesired scrolling when moving the mouse to another window. It can be temporarily re-enabled by holding CTRL. In Object Editor mode, scrolling will also still occur while moving an Object)
- In the Level Editor, keyboard shortcuts have been added for switching the Current Editing Plane and toggling Plane Visibility (ctrl+1-0/q,w,e,r, or shift+ctrl+1-0/q,w,e,r, respectively)
- Support for more than one Stamp list has been added to allow the grouping of Stamps for better organization. Use S/X while in Stamp mode to switch between lists
- Existing Stamps may now be directly overwritten by selecting the desired Stamp in Stamp mode, and then holding CTRL while pressing Shift+C in Tile mode to copy a selected level region as a Stamp
- When enabled, Solidity and Angle/Floor Type value overlays will now be displayed for the currently-selected Stamp while in Stamp mode (the overlay will be applied to the Stamp Cursor)
- In adition to editing the properties of existing Objects, it is now possible to actually place Objects from within the Object Editor (as opposed to having to place them via "Debug Mode" in gameplay)
- There are now four Game Registers (241-244) reserved for use as Object Property Settings within the Object Editor. These values are manipulated by hotkeys within the Object Editor but may also be directly manipulated by Script Functions, and they may be read by Scripted Object Debug Placement Functions to control how the Objects are placed within the Editor or from Debug Mode. It is the responsibility of the Scripted Object Debug Drawing Function to manually enforce limits on these variables to keep them within valid value range for any given Object
- There is now a "snap to grid" functionality for moving and placing Objects within the Object Editor with better precision. This includes the ability to offset from the grid in case of Objects that do not perfectly conform to the actual grid coordinates
- When modifying an Object that has a reset state from within the Object Editor, flashing exclamation points on the Object's editing handle will now warn that the modifications must be manually committed to the resetted state for them to be made permanent (Remember that this is so that temporary modifications can be made for testing without losing the original reset state)
- The Mouse Wheel may now be used in the Level Editor to cycle through Tiles and Stamps, and also in the Object Editor to cycle through placeable Objects
- The F3 key may now be used in all editor modes to quickly save the data that corresponds to the current mode. F3+Shift will always save Layout+Tile data, and F3+Shift+Space will always save Layout+Tile+Object data (this has also replaced the use of "Enter" in the Sprite Editor)
- The editing mode that was last active before returning to game mode will now be activated when returning to editing mode, instead of defaulting to the Level Editor
- The 1-4 editing mode selection hotkeys from the Level Editor may now be used in all editing modes
- Using the editor hotkey from gameplay mode will re-enter the last editor that was used during the current session. Upon first entering editor mode, the Level Editor will be selected
- When a level file is loaded, the first "Flat" type Plane (if one exists) will now automatically be selected as the current editing plane in the Level Editor instead of defaulting to Plane 0
- Music can now be paused/resumed from within any Editor by pressing 9
- The brightness of the red, green, and blue "editor colors" used for things such as level solidity overlay has been reduced so that the tiny font for the angle/floor value overlay is more easily readable
- Rows and columns of graphic pixels or solidity may now be quickly drawn to Tiles by holding Shift (for columns) or Spacebar (for rows) when clicking/dragging the left (for bottom-up columns and right-left rows) or right (for top-down columns or left-right rows) mouse button at the desired endpoint
- The same Tile Plane Collision overlay that is available in the Level Editor can now be toggled from within the Object Editor, and when enabled, will also be displayed during gameplay
- Object Editor will now display a warning when attempting to modify the Object_Type variable of an object and disallow the change unless the Shift key is held to prevent crashes due to accidental changes
- When the Object_CurrSprSet variable is modified within the Object Editor, the editor will now automatically keep it within the range of 0 to the number of sprite sets defined for the Object's type
- Hotkey reassignment- Entering editing mode has been moved from E to Ctrl+Tab. This is also used return to Game Mode
- Hotkey reassignment- Stamp Mode toggle in the Level Editor has been moved from B to Q
- Hotkey reassignment- Map Dump in the Level Editor has been moved from Q to Ctrl+Q
- Hotkey reassignment- Tile Plane Resize in the Level Editor has been moved from M+ArrowKeys to Ctrl+ArrowKeys
- Hotkey reassignment- Cycling currently-selected Tile/Stamp in the Level Editor has been moved from S/X to A/Z
- Hotkey reassignment- Changing initial "Water" height in the Level Editor has been moved from A/Z to Ctrl+A/Z
- Sound system enhancements:
- Stereo Music playback is now supported
- OGG Vorbis files may now be loaded as Music, supporting the same three playback types as with .wav files (non-looped single file, looped single file, two files for intro and loop)
- Due to changes in the sound handling, the "overpower" playback type for Sound Effects has been abandoned in favor of the new "_PlayJingle" Command, which behaves similarly except for the fact that it uses audio loaded as "Music" instead, supporting both WAV and OGG data (XM can not be used as a jingle), and stereo playback
- The mixer has been further optimized
- Overall maximum sound volume has been raised (script volume control still uses a range of "0"-"64")
- Graphic system enhancements:
- Each of the two available gameplay screens may now display different palettes, allowing mid-level palette changes in two-player split-screen games, a secondary status screen with its own color palette, etc
- Miscellaneous updates:
- It is now possible to create "Zone"-specific Tables, which are loaded and made available only in conjunction with the Zone for which they were created
- Each of the two available gameplay screens now has its own set of VP?_Bounce variables. These variables have changed in ID from 52-53 to 56-59
- The titlebar no longer prefixes game names with "E02 - "
- Each game may now replace the running program icon(s) with a custom image on Windows, Linux, and Mac platforms
- Support for specifying files to be exculded from game packing has been added. Create "exclude.def" in each folder that contains individual files and/or entire folders that should be excluded, and use it to list the names of those files/folders
- A new Command-Line parameter, "-regs", has been added to provide the ability to specify non-zero initial values for individual Game Registers (both built-in and User)
*BugFixes*
- Saved Objects with greater than 256 "Extra Variables" would cause a crash upon object layout file loading due to a lack of support in the file format. This most noticeably affected Tiled Path Objects. Although this does not affect existing damaged files, the format has been revised to allow Objects with up to 65536 "Extra Variables", thus preventing future issues
- Inserting and Deleting Tile Planes from inside the editor did not immediately update certain editor state variables when the operation caused editing to switch to a different plane, and would occasionally cause a crash. Editor state is now completely updated immediately after the operation, eliminating the crash
- Script strings terminated by End Of File instead of a comment marker or NewLine would not be read completely (the last character would be ignored), causing incomplete strings, invalid Commands/Parameters, or incorrect number values. This has been corrected- the entire string will be read correctly, even if there is nothing between the end of the meaningful string and the end of the file
- Testing code that broke "large editor" mode in Linux and Mac builds of the previous version has been corrected, and the 640x480 editor no longer immediately crashes
- Sprites drawn in any orientation other than non-mirrored, non-flipped in the 640x480 editor in Linux and Mac builds were drawn incorrectly; this has been corrected
- In the Object Editor, clicking within a 16x16 area of a location at which a Built-In Object type was spawned would attempt to select that Object and cause errors. These Objects are now properly non-selectable
- Within the Tile editor, drawing transparent pixels onto an existing Tile graphic that previously contained no transparent pixels would not stop the tile from being treated as "opaque" until the Tile set was reloaded, and thus, it would completely mask any tiles or sprites drawn beneath it. Drawing transparent pixels, pasting frames with transparent pixels, or clearing the Tile will now disable the opacity, immediately allowing other graphics to show through the transparent pixels
- Switching from large editor mode back to split-screen gameplay mode would cause the game screens to be drawn improperly due to improper rendering settings. Returning to split-screen gameplay directly from the large editor now functions correctly
- Switching to the Sprite Editor after having changed levels, while having selected a Zone- or Act-specific Sprite from the previous level whose ID is higher than the total number of Zone-/Act-specific Sprites available in the currently-loaded level would cause a crash due to out-of-bound memory reads. The Sprite Editor will now automatically switch to Sprite 0 upon entry if the currently-selected Sprite ID is beyond the end of the Sprite list for the currently-loaded level, thus preventing the crash
- The previous scrolling optimization introduced draw and crash errors into non-opaque Horizontal Line scroll planes. These errors have been corrected and all HLin planes now function properly
- Moving the camera to a negative position on the X or Y axis would cause draw errors, slowdown, and crashes with some plane scroll types. All plane types will now behave properly when the camera position is negative
- Horizontal Line scroll for non-opaque planes would draw the left-most tile incorrectly if it was only partially on-screen. The left screen edge of a plane using this mode will now be drawn correctly
- Horizontal Line scroll planes would incorrectly draw one tile beyond the horizontal looping point if the loop end was reached at the right edge of the screen. Lines are now wrapped properly even when the loop end is met at the right screen edge
- When using hotkeys to move the mouse pointer one tile/pixel unit at a time in large editor mode, the position would be updated incorrectly if the window was set to display gameplay at double size. This has been corrected, and the mouse movement hotkeys will function properly regardless of draw size settings
- When resizing a tile plane in the Level Editor, the editor's scroll extents weren't properly updated until the editing plane was switched, or the Level Editor was exited and reentered. The scroll extent will now update automatically when a plane is resized
- When holding the clipboard paste or Stamp draw key/button to draw with a repeating pattern, drawing was not allowed near the upper and left-side level borders unless the key/button was released and pressed again. Pasting and Stamp drawing will now properly allow drawing all the way to the level borders
- When pasting the clipboard contents or drawing a Stamp near any of the four level borders, the borders were ignored, and the contents were pasted outside of bounds, wrapping to the other side of the level, or writing outside of the level array and into invalid memory. Clipboard paste and Stamp draw are now properly trimmed when performed near any of the four level borders, and only what fits within the level area in question is actually written to the level array
- Screen Shots saved in large editor mode would behave as if the screen mode was 320x240 rather than 640x480, saving a smaller, corrupted image. Screen Shots now work correctly in large editor mode
- Game/Zone Text Strings would cause crashes on linux-based systems after having been read from script files if they contained the "%" symbol in combination with certain other characters, due to the method used to copy them for storage. This has been corrected, and Game/Zone texts with the "%" symbol will no longer cause crashes
- Linux version no longer completely hijacks input on startup
- Windows version no longer produces rapidly-repeating clicking sounds during startup
* Release 11.09.18
- Implemented "Keywords" to replace standard Command entry for some Math and Conditionals, allowing the use of Expressions that contain the variables/values themselves
- Created a custom file format for Sprites to replace the old Script lines + PCX/TGA image file method. This new format is not human-readable, but allows for much more flexibility in manipulating Sprites and Sprite Sets in the Sprite Editor, which has been updated to assist in creating and managing these files through a graphic interface. This very slightly changes the format of Character Def and Object Def files; please view their corresponding documentation to find out how. Files created with the old format will still load, however, the Sprite Editor will no longer output this format due to the nature of its newest enhancements
- The Sprite Editor has been enhanced with additional functionality
- Functionality for "Stamps", custom level components of any size larger than a single Tile, but smaller than a Tile Plane, has been added to simplify level editing
- Create "Stamps" by copying a section of an existing level
- Switch the Level Editor to "Stamp Mode" to draw to the level using Stamps instead of Tiles
- XM files with non-standard, "stripped" pattern table lists (such as those created with uFMOD, and newer versions of OpenMPT) can now be successfully loaded
- In the Windows version, the Windows mouse cursor is now disabled when it is within the window client area and an editing mode is active, so that only the E02 editing mouse cursor is visible
- Message system messages now appear at the bottom of the screen in large-edit mode instead of at the vertical center
*BugFixes*
- The error message for a missing Alias Def now properly gives the name of the file that E02 was attempting to open
- Returning to the main interface from a game that is using split-screen mode at the time will now properly return E02 to single-screen mode
- Full-screen mode under the Windows version was still showing incorrect colors under some circumstances when neither of the two video filters were being used, due to mis-synchronization of actual color mode and render mode being used. This has been corrected- full-screen mode under Windows should now display correct colors, even when not using a video filter
* Release 11.08.11
- A new build is now available for the GP2X Wiz
- New Script Commands (1440-1472, see index in "Functions" doc)
- The Tile Editor has been rearranged to make better use of available screen space, and updated for functionality
- The tiny, hard-to-click arrows have been removed; click options are now activated by left- or right-clicking the option label or its displayed value
- The entire 256-color palette is now available all at once
- An option is now available to place a smaller, less-featured version of either the Tile Selector or Level Editor in the lower-right corner for more quickly selecting tiles from the list or the level layout, drawing to the level layout, and instantly viewing changes to the overall layout image while editing a tile
- Palette entries can now be swapped within the editor for easily organizing colors in preparation for Palette Animation, or any other purpose
- An "Alias" system has been added so that more-easily-memorizeable names can be used for Commands, Variables, settings, etc. in scripts instead of their internal ID numbers. Aliases for standard IDs are included and listed/used in the documentation, and users can modify them and/or add their own for game-specific IDs
- Tile Animations can now be set up more quickly and easily by means of the new automatic Tile Animation frame insertion, which uses the Level Editor's Tile Plane section selection/copy feature
- Shortcuts have been added to both the Tile Editor and Level Editor for filling either an entire Tile or all non-transparent pixels of a Tile with any of the four solidity types
- Sprite Editor "Dumps" of Player Character Sprites will now save these changes directly to the selected Character's Character Def File by default. The external "frames.txt" dump is still available, and can be performed by instead holding Ctrl while pressing Enter
- Sprite Editor "Dumps" of Object Sprites will now save these changes directly to the appropriate Object Def File by default (depending on which set the currently-selected sprite set resides in). The external "frames.txt" dump is still available, and can be performed by instead holding Ctrl while pressing Enter
- When viewing Object Sprites in the Sprite Editor, the Status element that displays the currently-selected set number will now display the set's ID relative to the Object Def that loaded it, rather than its E02-internal ID (Ex: If there are 28 Game-global Object Sprite Sets, the final set's ID will be shown as "27G", while the first "Zone" set's ID will be shown as "0Z" rather than "28"). The same principle has also been applied to the "Ani ID" element
- When viewing Player Character Sprites in the Sprite Editor, the Status element that displays the currently-selected "Animation Function" will now display the set's ID relative to the "Player Character Common Functions" list or the selected Player Character's "Character Specific Functions" list, rather than its E02-internal ID (Ex: If there are 33 Player Character Common Functions, the final Function will be shown as "32C", while the first Player Character's first "Character-Specific" Function ID will be shown as "0P" rather than "33"). Also, the selection will default to the Player Character's first "Character-Specific" Function, and "Character-Specific" Functions belonging to Player Characters other than the one that is currently selected will not be accessible
- A new error message has been added to report when Sprite width and/or height are defined as 0 (or less) for both Player Character and Object Sprites, eliminating crashes due to such settings. Please use a 1x1 sprite that loads a single transparent pixel for "invisible" Sprites or Sprite Frames
- Further optimizations have been made to level collision testing for both Players and Objects
- Message system messages have been made easier to read; each string is now drawn with a background color rather than allowing the game/editor/interface screen to show through
- On program startup, there is now a three-second delay on updates testing that provides time to cancel the connection attempt. Also, when pressing F8 to return to the main menu, the menu comes up immediately instead of again testing for updates first
- The current FPS has been removed from the Level Editor's Status display, since the display toggled by F10 makes it redundant
*BugFixes*
- _???=TileInfo(???) commands were treating incoming position values as unsigned rather than signed, which caused negative values to read as extremely high positive values and fail to wrap around the level or looping section boundaries correctly, causing crashes due to out-of-bounds reads. This has been corrected; passing variables containing negative X and/or Y position values will now cause the position to be wrapped properly, eliminating the crash and returning the correct tile data
- Sprite Editor "Dumps" would fail without displaying an error/warning if the "dump" folder didn't already exist in the currently-loaded game's Game Folder. These features now automatically create this folder when appropriate
- "F" for vertically flipping a single Tile Frame in the Tile Editor wasn't working at all, and "M" for horizontally mirroring the current Tile Frame was only functioning on Frame 0 rather than the currently-selected Frame. Also, these features were not functioning correctly in the DOS build with a "vmode" setting greater than 2 (default is 3). These features now function the way they were intended
- All TGA image dumps were output with a single incorrect byte setting in the header, causing them not to load properly or at all in the majority of image editors (except, conveniently, the one that was used for testing). This has been corrected, and TGA image dumps for screen shots, level maps, sprite editor dumps, etc. should now open properly in all editors that support 8bit indexed-color RLE-compressed TGA images
* Release 11.01.02
- Added "Repository" support. Special files placed in the "repo" folder allow E02 to connect to other download resources. This makes possible the creation of public and private listings for third-party games, and private listings for local transfers between platforms (when already running an http server). This feature is not displayed when only the default repository file is found
*BugFixes*
- When a script line was followed by whitespace (space or tab), the whitespace would not be removed from the end of the loaded string. This would cause problems especially with filenames that were followed by comments, as the filename used would contain the space/tab characters and fail to load on some platforms. Trailing whitespace on strings is now ignored, eliminating this problem (comments can be used after strings, and the strings themselves will be terminated after the last non-whitespace character)
- Mode 5 for the Set_PaletteAlpha_Range Script Command attempted to set the global palette rather than the target palette, and when intentionally setting the Global Palette, the alpha was not properly applied. This Command should now function properly for mode 5, and for applying an alpha to the Global Palette colors
- The Dim_Palette_Range Script Command did not test for component value overflow when "Dimming" up, which caused them to "wrap around" and become the wrong colors. Using this Command to brighten the palette (a "Percentage" value greater than 128) should now work properly
- The "Installed Games" section of the menu would crash when no games were installed due to a test on an array entry for an array whose length matched the number of games (in this case, 0). The "Installed Games" menu will now display correctly under this condition, reporting no installed games and displaying only the option to return to the Main Menu
* Release 10.12.09
- "ScanLines" render mode has been added to Windows, Linux, and Mac builds
- "Utilities" menu has been added to editing-supporting builds, with interfaces for features that were otherwise only command-line options: Level Editing for external files, Level Ripping from pcx/tga images, Level Warp at game start with or without instant editor access (unprotected games only), image palette section dumping to _Pal_SetRange Script Command format, image palette section location shifting, and game file packing
- Status Objects Function Commands are now usable from within Animation Functions
*BugFixes*
- Spacebar keypress was not recognized in the Linux build. This key now functions properly
- The "When To Trigger" option for Boundary Event Function calls was never actually implemented. It now functions as described in the documentation
- Windows build no longer attempts to use 8-bit color when in full-screen mode with no video filter selected. This eliminates color problems under these conditions with newer video drivers that do not properly support 8-bit color mode
- E02 would crash when attempting to select a Tile ID higher than the last valid tile in the Tile Editor. Tile ID selection in the Tile Editor is now properly capped at the total number of existing tiles, eliminating this problem
- When entering the Level Editor directly after Tile Ripping is complete, if the ripped Plane's Tile size was less than 81x61, it was not properly upsized to avoid offset errors and crashes in "Large Editor" mode. The newly-created planes are now upsized as necessary
- When file loads from non-packed games were nested, the final file in the nest was "closed" multiple times, and the rest were ignored. File open and close for non-packed game file sets now nests properly
- When a custom global palette file was included with a game, E02 would not close the file handle after reading it. This file is now closed properly
* Release 10.11.16
- Automatic update checking may now be temporarily disabled by holding "Enter" (PC/Mac), "+" (Wiimote/Classic Controller), or "Start" (Gamecube Controller/PSP) while starting E02. This will reduce wait time when there is a slow connection, or no connection at all
- When a new Level File is created (by using the "New" Menu Option in the Level Editor, attempting to load a nonexistent Level File, or using the Level Ripper to create a new Level File), the three default Planes now receive a default size (measured in Tiles) of 80x60 (except, of course, any one that is being generated from incoming Level Ripper data), rather than the original 500x250, 1200x320, and 1200x320 (which was a hangover from a very old version without plane resizing). Also, Plane 0 is now set as "Relative" and "Opaque" by default, rather than "VTil" (should have been "HTil", anyway) and non-Opaque (as the option first became available with release 8)
- A new error message has been added to report when a Function Flow Control Script Command references a label that has not been defined for the Function
- The KeyMap file format has been updated to include key and map naming for the interface, and to allow multiple key-/button-presses to flag the same map entry (which is especially useful for making Wiimote, Gamecube controller, and Classic Controller available to Wii users all at the same time). Any existing keymap files will need to be updated to conform to the new format (updated files for the existing downloadable games are now available when the game is re-downloaded)
- The main interface has been revised with a new layout and new features
- Implemented a better default 8x8 font
- Implemented a key/controller config menu; select a game from the "Installed Games" list to configure
- Implemented in-program game deletion; remove any game from the local listing and delete all of its data
- Notifications for updates are now split across platforms rather than having all builds flagged for update after platform-specific fixes, enhancements, etc, and will appear on the main menu
- Notification of update messages is now possible without also flagging a program update when not necessary, and a count of unchecked messages will appear on the main menu
- E02 Documentation updates are now managed in-program and separately from program updates via the main menu (because Wii and PSP builds do not include editing features, they also do not include this feature)
*BugFixes*
- Loading Object Layout Files that contain no placed Objects would cause the program to crash. These files may now be safely loaded
- Font type 5 (Letters, numbers, symbols, caps/lower) loaded too few characters and would display improperly. Type 5 now loads the correct number of characters and displays as it should
- Built-in and Scripted Drawing Functions were not being attempted when the Object's Type entry had its Out Of Range Event set to "1" (continue processing) and its position was outside of Activity Range. These Objects will now attempt to draw, and will now execute their Scripted Drawing Function
- The documentation stated that the _Debug_Draw Script Command would draw based on an "Object's" type and position, but in reality, this actually applied to the Player's position and Debug Object ID, and was for use only in Scripted Debug Draw Functions. This Command is now also usable in normal Scripted Object Draw Functions, and works as described in the documentation
- NewLine is now interpreted as the line break indicator, rather than Carriage Return. This now actually allows Linux(/MacOSX)-format text files to be used for scripts in addition to DOS(/Windows)-format text files, as was intended. This has necessitated a small change in the pack format, meaning that any user-created games must be re-packed, and any downloadable games must be redownloaded
- Error message reporting that label IDs have been skipped within a Script Function would not display when only one ID value had been skipped. This message is now displayed when appropriate
- Scripted Object Draw Functions are no longer disallowed from manually updating the viewport position for any reason
- Some errors in the implementation of Key Repeat States would cause crashes on script load. These errors have been corrected (This caused Project Mettrix's Rotating Bonus Stage to crash on startup on non-Windows platforms. This is now fixed)
- An error in folder management code caused a glitch during Font File loading that would require all fonts loaded from the same Font Def to be present in the same folder as the first file loaded by that def. This has been corrected, and any Font File may now be loaded from any folder
* Release 10.08.20
- Added a Minimum Required E02 Version setting to the .gdf file format
- Implemented a progress bar for downloads
- Downloads are now counted, with the count being viewable at the bottom of the game's info page
- Chose a new version numbering system, "YY.MM.DD", which maintains release dates and will simplify the numbering of minor updates. This will be used to version both program and game updates, though, internally the periods will not be used ("YYMMDD")
*BugFixes*
- The _PlayTempMusic Script Command hadn't been updated to accommodate for XM music, and would otherwise cause crashes when used more than once. This Command will now load and play XM music, and will function properly when used more than once
* Release 9
- Implemented an updates and game downloads system - The Game Select menu now also functions to check for game and program updates, and allow for direct download of updates and any other available games. Games not hosted on the official site may still
manage updates by use of the new entries in the game's .gdf file (whose format has also been updated to remove "dependency" and "type" information)
- Created and implemented the "game.e02" format for packing and encrypting game file sets if desired. Using this format not only inhibits modification, but also slightly improves disk usage and load time. In addition, these protected games disallow access to the built-in editor and debugging hotkeys
- New Script Commands (1436-1439, see index in "Functions" doc)
- New Palette Effects - Types 7, 8, and 9 (Fade by one step to target, black, or white) added to _Pal_FadeEffect, and Commands added for dimming and applying an alpha to a given range of entries.
- Object Priority can now be properly manipulated by use of the new _Object_ChangePriority(???) Script Commands, which will cause the given Object to be moved to the appropriate place in the active Object list.
- Within Functions, Command IDs and their Parameters may now be listed on the same line, and multiple Command/Parameter sets may be listed on a single line. See "Function 1" in the updated example in the Functions doc
- Implemented "Repeated" Key State. While a key is held, this state is true for one Game Frame each time the specified interval has elapsed.
This has been applied to certain editor keys; their effect is now repeated every few frames if the key is held
- Functionality of the FreezeObjects Register has been updated; This Register is now a bitfield used to individually freeze Palette Animation/Rotation, Tile Animation, All Objects, and four separate levels of Flagged Objects
- Functionality of the _Object_Stop??? Script Commands has been updated; They now destroy Child Objects when used on a Parent whose Type's Object Def entry has the "Destroy Children" flag set
- Registers can now be used to pass IDs and Data to Commands that modify Status Script Windows and Objects
- Level layout files on-disk are now compressed
- Further optimizations have been made in areas such as sound handling
*BugFixes*
- Hard-coded movement functions did not test for an Object that was not playing any Animation at all, and thus, had no "current Sprite frame" from which to grab collision attributes, leading to crashes when all Animation functions were somehow stopped, such as manually ending all Animations, or the use of a Stop_???_Object Script Command within an Animation Function. Hard-coded movement is now disallowed when no Animation is playing, rendering these actions safe
- Palette Effect Commands intended to alter "(Current and) Target (and global) W/ Water" didn't actually affect the "water" area of the Target (fade-to) Palette. These effects now properly update the "water" area of the Target Palette when the currently-selected Level Palette is set for "water" mode
- Certain script buffers created during load weren't freed after the scripts were parsed, leading to very slow loss of memory after successive loads, especially when loading new games. All of these buffers are now freed after use
- The "key off" "note" in an XM would break the note completely rather than processing the "decay" part of the volume envelope if one was present. Instruments with volume envelopes will now properly "decay" after a "key off"
- When viewing/editing a palette "layer" other than 0 in the Tile Editor, the down arrow for the "Current Color" option would not function, and decreasing the number of color frames in the index's animation would throw a "with water" warning. Switching to a previous color frame is now allowed, and the erroneous warning has been removed
- The improper "with water" palette setting warning did not correctly specify the invalid index that was used, and the Windows version was the only build that would actually display the warning. All builds will now display this warning when appropriate, and the index that caused it will be correctly displayed
- The window was not properly resized on some Windows systems when switching from a 320x240 window to 640x480 full-screen, leading to slowdown, desktop flicker, and the ability to click through the program. The window size is now set properly so that it prevents visibility and interaction with the desktop and other programs when in full-screen mode
- The Func_Set_Plane_Effect_Function Script Command would cause a crash if used from within a Status Script or Animation Function. This Command may now be safely called from either of these types of Functions
* Release 8
- New builds are now available for x86 Linux, PowerPC Mac, Intel Mac, Playstation Portable, and Nintendo Wii
- All documentation has been corrected, updated, and expanded, including conversion to HTML with reference links and examples
- Implemented custom 16-channel XM music support, featuring most standard
XM effects, individual channel muting, and in-song script event triggers
- Implemented script controls for music/sound effect volume set and fade (range 0-64)
- Added Targa TGA image support, as it seems to be more readily usable than
PCX. PCX images may still be used. (TGA was chosen for it's simplicity;
No other, more bloated format with irrelevant settings/options will be
supported)
- Windows version now uses 640x480 mode for full-screen instead of exiting
when using a graphics card/chip that doesn't support 320x240 mode. For
hardware that supports both, both modes are available by switch in the
"video" menu in Windows, Linux, and Mac versions
- Windows, Linux, and Mac versions now have the selectable display filters "TV Blur" and
"Anti-Alias"
- Implemented toggleable VBlank wait for DOS and Windows versions
- Windows version sound now uses a streaming buffer with a custom mixer similarly to other versions, and
DOS version now accepts wav files of any quality (16bit-stereo are converted to 8-bit mono during load)
- New Script Commands (1426-1435, see "Functions" doc)
- Expansion and contraction of Tile Plane size is now possible in the Level Editor by using "M"+ArrowKeys.
Saving the Level no longer shrinks Planes automatically
- Game, Zone, Act, and Object Function loading now reports when too many
or too few functions are loaded from external files based on their
respective "total" entries
- There are now error messages for attempting to set a high palette index
in "with water" mode, for attempting to spawn Tile Plane objects
before the planes they reference have actually been loaded, for
ungrouped If, Switch, and Do Commands, and for overlapping boundary events
- "Notes" fields (Including those labeled "Zone Author", "File Description", etc)
have been removed from all scripts, and "Init2 Func" and "End Func" entries have
been removed from "Zone Def" scripts, as they were leftovers from much older
versions that no longer serve any purpose. All official scripts have been updated.
Please update any custom scripts accordingly
- Further optimizations have been made in areas such as level scrolling and player handling
*BugFixes*
- Level Ripper would sometimes crash when using the "Use Existing Tileset"
option. The ripper will now always add tiles to an existing tileset
without issue
- Tile Selector would crash when the user clicked on an area corresponding
with a non-existent tile. It now ignores left and right mouseclick on
areas not corresponding with an existing tile
- Table data wasn't deallocated when loading a new game. Loading a new game
now deallocates the previous game's table storage
- A few memory leaks and a pointer-related "occasional crash" bugs have been addressed
- Insert Row in the Level Editor would occasionally corrupt horizontal (tiled and lined) scroll properties.
This feature now functions correctly
* Test Release 7
- @This document and others are still under construction. Some added
features aren't listed
- @New HTML documentation with better formatting and cross-reference
links is under construction. Documents explaining the new player
management systems as of Demo 6 are now complete, except for links
leading to other unconverted sections
- @Revised function script format to allow automatic length calculation,
labels for loop/goto/switch commands, and limited script error reports
(The old format will still load. See "Functions" doc and "Errors" doc)
- @Added Script Reader support for Hex($) and Binary(%) number values
- @New Script Commands (1263-1425, see "Functions" doc)
- @Implemented scriptable scrolling control. "Plane Effect" functions can
be used to manually control the scrolling of each tile/line row/column
of a tile plane, or the entire plane on either axis (depending on the
plane type setting) to perform finer scrolling than with the automatic
system, or to create plane deformation effects
(See "Plane Effects" doc)
- @Implemented user-definable tables. Binary and Script-form tables of
constant BYTE, WORD, and DWORD values can be loaded at game start and
read by script functions
- @Implemented forced player input control. There are now script commands
to force settings for mapped player input to create effects such as
puppet scenes, AI partner characters, etc. Mapped player input states
may also be copied en masse to variables
- Speed and RAM usage optimizations have been made to resource-intensive
aspects of the program (graphics, script processing, collision, ...)
*BugFixes*
- The script reader did not correctly interpret lines broken immediately
after a colon (:), reading the next line in the file as the Parameter
it was looking for. It now interprets a newline immediately following
a colon as an empty Parameter/blank string (The two in-progress games
released with E02 at this point used some blank "text" entries in their
menu scripts, though the problem wasn't apparant because the entries
were double-spaced. In no other way are NULL Parameters acceptable)
- The script reader did not correctly interpret the final entry in a
script file when it was not followed by a newline. Scripts whose
final entry ends at the end of the file will now work properly
- "Stop_Function"-related commands left behind inconsistent function
IDs in the running function structures, causing skipped calls and
other errors when a new, larger function set was loaded afterward.
"Stop_Function" commands now mark the structures with a fixed ID
signifying "No active function" that won't conflict with changing
function sets, and so will not skip calls, crash, etc
- "Set" and "Add" Animation commands for players and objects did not
properly update the animation for the affected object when the
command was used by an object that processed after the affected
object/player, causing no frame, or a frame from the previous
animation, to display on the game frame on which it was set/added.
These commands now properly run the animation immediately if the
change is requested after the object's/player's normal animation
processing time
- X/Y-relative object values weren't reset to for an object's new
position when it was moved in the object editor due to v5-v6
changes. Variables using X/Y-relativity now update correctly when
an object is moved in the editor
- Resettable objects weren't reset when entering the Object Editor
due to v5-v6 changes. Objects are now reset when entering the
Object Editor unless the ALT key is held
- Deleting an object that is flagged to also delete it's children
didn't actually delete the children due to v5-v6 changes. An object
flagged to do so will now delete it's children when it is deleted
- Loading a new object file mid-level caused crashes because certain
data was only reset during inter-level object list clearing. Object
files may now be properly loaded without changing levels
- Spawning an object in debug mode by spawnobject script command without
also using the built-in Debug_Place_Standard would sometimes cause
crashes because the program relied on the built-in function to obtain
the reset flag for the object type, attempting to read the flag from
the object def for the object type ID that was last spawned, which
would cause an overflow if the last spawned object was a "built-in" type.
Objects may now be placed in debug mode by spawnobject script command
without also using Debug_Place_Standard without issue (This is only
applicable if the object does not need to reset)
- CallFunction/RunFunction script commands caused occasional crashes due
to v5-v6 changes. These commands may now be used without issue
- If_Object_Collide_Player/If_Object_Offset_Collide_Player didn't have
working player hurt->object mainbound support. This condition may now
be tested properly
- ???_Equ_Reg_Minus/Div/Pow_Obj commands read the source Parameters in the
wrong order, and thus, "didn't work". These commands now work as documented
- Incorrect calculation in "Random" script commands caused them to never
generate a value equal to the upper limit. These commands can now generate
all numbers between and including the lower and upper limit
- Object Def Flags would gain junk settings because the field wasn't cleared
before the bits were loaded. These flags are now set exactly as described
in the Object Def file
- Spawning a tiled object would sometimes cause crashes if it took on a pointer
that was previously occupied by an animating sprite, because the animation
was only cleared when a new non-tiled sprite was spawned. Tiled Objects now
properly ignore animation
- Objects/Windows in a Status Object that were already at the position being set
by a SetDest (or window size) command wouldn't increase the activity counter.
They now properly increase the activity counter even if they don't have to move
- Script Window draw behavior was inconsistent between DOS and Windows versions
because Windows version window draw routines were not updated to include
drawing of the row/column specified by X2/Y2 when the DOS version was. Both
versions now display lines/columns of windows between and including X1/X2/Y1/Y2
* Test Release 6
* Note: The documentation has not yet been updated, and is mostly the
same as in Release 5. New features listed below are not properly
documented, nor are the listed changes to current features. Their
use in the current game demos' scripts are mostly commented,
however. Though the current documentation refers to this build as a
"Sonic the Hedgehog build" and describes a "Sonic-like" player
system, this is no longer the case
- @The player system has been almost completely rewritten. In place of
the original hard-coded Sonic-like player, there is now a simple
path/freespace movement handler that acts on velocities set/changed
by the player input event functions, or the new "Movement Function"
that is assigned to the current "Movement Mode". Other than simply
tracing a path or moving through freespace at a given velocity, all
movement/physics, input, and animation are handled by script with
the new player control setup, which adds a "movement phase" script
function before a "sentry phase", followed by the "input phase" to
parse the "key events", and finally an "update phase" to control
manual viewport movement and set the player's current animation.
A "common" function listing accessible by all player characters has
also been added
- @New Script Commands (827-1262, see "Functions" doc)
- @Relative referencing has been added to the "loop" command to jump
foreward or backward by a certain number of commands, rather than
jumping to an explicit command ID
- @"???_Equ_???_Hotspot" commands were listed as requiring Reference 0
for the destination value, and Reference 1 for the source value, but
when the source type was not the same as the destination type, they
actually read from the player/object Fetcheded to Reference 0, and this
also broke the "destinations always use Reference 2" rule. They have
been changed so that they all use the player/object Fetched to
Reference 2 for the destination, and the player/object Fetched to
Reference 0 for the source. Also, new commands for obtaining only the
X or Y portion of the Hotspot position individually have been added,
and so support for the "-1" setting for omitting either X or Y has
been removed to speed up the commands
- @The following commands have also been updated to conform to the
"destinations always use Reference 2" rule: Commands that modify
parent/child settings, Set/Unset/Flip Flag commands, and all
Set/Add/Stop animation commands, as well as "Change_Player_Animations"
(See Corresponding Func Command Docs)
- @"GetArray" and "PutArray" commands have been modified to include a
new Parameter for entering the ID at which the desired array starts,
eliminating the need to manually add the starting ID to the offset
ID using another variable before accessing the array
- @"Set_Delay_Relative_???" animation delay commands have been modified
to remove the unnecessary "divisor" Parameter, which was relatively
useless and only served to slow down the processing of the command.
New versions to delay by given player/object variables rather than
just the velocity variables have also been added
- @Set Player/Object Animation functions have been modified to ignore
requests if the current primary Animation for the player/object is
the same as the requested Animation, so that script functions can
redundantly request a set Animation without having it restart if
it's already playing, eliminating the need for a scripted test.
Change_Player_Animations has also been modified to ignore requests
for Animations that already exist in the designated area to
eliminate jerking that happened when calling for a redundant change
- @Change_Player_Animations has been updated to allow the use of the
"l" tag on the "Reference ID" Parameter to signify that the given
ID represents a custom Animation as opposed to a Required Animation
(See the Animation function doc)
- @Last version implemented two "Status Script" objects that could
be displayed on either the top or bottom screen only. Object 9994
(top-only) has been removed, and 9995 (bottom-only) has been modified
to use an extra Parameter for setting which screen the object displays
on. This value is stored in object variable "E1" and can be used later
like any other object variable value (See "Built-in Objects" doc)
- @An object to draw a "Water" layer based on the the height set by it's
controlling register "Water_Level" (54) has been added as Built-in
Object 9994 (See "Built-in Objects" doc)
- Slightly improved the speed of player/object collision testing
- Applied a new and faster method for keeping deleted/spawned objects
properly sorted
- @Added "Key Mapping" for mapping any regular input to "Map" fields.
One use of these fields is to manage input for multiple players.
"Player Events", "Status Script" "Selections", and the function
"If Key State" have been updated to make use of them
(See "Key Map", "Character Def", and "Status Script" docs)
- @Added "Path Objects" by means of a new Object draw type to use the
object's variable space as a tile map for drawing level tiles to
the screen, and a new collision type to allow a player character to
react to that map
- @The use of the ';' character in previous scripts to denote
comments was only cosmetic. The script parser now recognizes
it as the start of a comment line, so it can be used to comment
out script lines without having to delete the ':' character,
and can also be used at the end of lines requiring text Parameters
- @Previously, the only way to address the object being placed from
within a "Debug Placement" function was as "Last_Spawned". This
object is now recognized as the "Current Object" as well, so that
commands affecting "Current Object" can be used to change it's
settings, and so the object's pointer will still be available if
another object is spawned from within the function, overwriting
the "Last_Spawned" pointer
- @The "Destroy_Current_Object" Command (88) was previously only
for animation functions. It can now be used by movement and
collision functions as well to destroy the object with a single,
one-line command instead of having to Fetch it and set Object Type
to 0 manually. This command also works for functions controlling
"Status Scripts", and replaces "Stat_Destroy" (0). Command 0 is
now "nop", a do-nothing command that can be used in place of
removed commands during function testing so that function length,
and loop/goto locations don't have to be updated
- @Added "Object_CurrSpriteSet" variable to objects (as variable 4, it
replaces the "useless" Object_Collide value), which can be used to
set which of the sprite sets referenced by the object will be used
to draw the object. It's set to 0 by default for newly spawned objects
*BugFixes*
- Functions 357, 359, and 361 ("If Not Flag" Functions) not only
tested the condition of the flag, but caused all other bits to
be zeroed out in the original value. The value is simply tested
now, and the original value remains unaffected
- Negate and Absolute Value Functions that didn't alter the original
value (791-799 and 803-811) were listed as requiring Reference 0
for the source value, but actually used Reference 2. They have been
altered to use the player/object Fetched to Reference 0 as the source
as listed
- The "Restore_Global_Palette" command would set all global palette
entries to the same "random" color when "ActiveFlag" was set to
0, instead of correctly resetting the global area of the target
palette. This command now works properly for both settings
- Copy/Paste Tile in the tile selector worked improperly in modes
3 and 4, causing an incomplete tile with garbage at the bottom.
The copied tile is now pasted properly
- Functions run during "Boundary Events" or by a "Run Function"
command would crash if they called the "Stop Current Function"
command because function processing wasn't broken, causing an
attempt to read a nonexistant function. The "Stop Curren
Function" command now breaks the process and terminates the
currently running function without error
- A function could not be stopped by one of it's subfunctions (any
function that it starts with a "Run_Function" type command, which
starts the referenced function immediately, pausing the current
function) because there was no exception to catch this case. A
function now recognizes when it has been terminated by any other
function that it runs during it's own process
- When using the "Set Animation" functions during the animation
sequence that should be affected, the new animation is passed
to a second function parser to begin processing immediately,
but the first was never instructed to break when control
returned from the "Run Function" call that started the new
animation, and would run it a second time, skipping ahead and
either displaying the wrong frame with the wrong starting timer
value, or exiting the animation altogether. The original parser
is now instructed to break when control returns so that animation
occurs properly
- @Trying to access Player Variables from Functions belonging to
Game Objects (not Zone or Act) when custom Player Constants were
present would cause undesired results or crashes because the total
number of Player Constants was assumed to be equal to to the number
of required Player Constants at the time they were loaded. The
"Number of Constants/Variables per Character" entries have been
moved just below the "Num Registers" entry so that they are known
before the Game Object Def is loaded
- The "If Collision Axis" commands for players/projectiles would always
return false due to an improper test. The test is corrected now,
and will return true if collision is being tested on the referenced
axis (if the "count" variable is > 255 or < -255, at least one pixel's
movement in either direction on the axis)
- @The "Status Script" "Object" setup for Player Variable display was
not updated to accommodate the lower-case "a" and "c" tags for
user-defined variables/constants, so "a" would display a normal
variable instead, and "C"/"c" would read as constant ID 0. These
tags have now been implemented properly for Player Variable display
- Using the "G" key in the sprite editor to move the sprite's normal
Y drawing offset down caused the backward-drawn X2 main boundary
box for that frame to be incorrect unless another of the offset
modifying keys was pressed, or the game is restarted, either of
which would re-calculate the reverse versions of the boundary boxes.
The reverse boundary box positions are now calculated correctly
after using the "G" key, as with any of the other offset modify keys
- ???_Get_Tile_Info_From_??? commands sometimes caused the program to
enter an infinite loop due to re-use of a global variable. Also, if
the destination variable for the Tile ID was reused as a destination
for other data retrieved from the tile, the value recieved was used
as the Tile ID from which to obtain any remaining data. These commands
no longer cause an infinite loop, and if the Tile ID is not desired,
the variable ID used as the destination for retrieving the Tile ID
can be safely overwritten by another data, as the command will now
remember which tile it should be recieving data from
- Call/Run/Stop_Function commands weren't properly accepting values
larger than 256 for function ID due to a mis-set type. Function IDs
up to 65535 will now work (The phrase "Function ID" refers to the
function's actual position in a complete listing, not it's offset ID
in a segmented listing such as the Zone or Act portion of the complete
set of Game Functions)
- "Stat_Set_Object_Animation" would cause errors by mistakenly affecting
the function that called it, stopping the function or causing a crash.
This command now functions properly
- "Stat_Set_Window_Animation" commands wouldn't accept an explicit
Y position because the destination was always mistakenly set equal
to the current position. The command now properly sets the destination
so that the window will move to the desired location on the Y axis
- @Status Script Windows were drawing up to the last pixel specified by
X2 and Y2 size, but not the last pixel, and if the window was collapsed
in on itself on either axis (X1>X2 or Y1>Y2), one pixel width/height on
that axis would still be drawn. Now, collapsed windows do not draw
(X1=X2 and Y1=Y2 is accepted for one pixel height/width) and the pixel
row/column specified by X2/Y2 are now drawn
- Status Script "Objects" of type "Script Sprite" and "Script Text" were
listed as supporting the G/Z/A tags for the "Script" entry, for listing
which script contains the desired data, but support for those tags was
not implemented, causing the value to read as 0 (It would attempt to
read the data from the first Status Script loaded by the game def). The
G/Z/A tags are now recognized and properly signify a Game, Zone, or Act
Status Script ID
- @Object Collision testing was behaving as if level looping were set on
both X and Y axis, even when it was not, causing invalid "collision"
with "invisible" objects (most notable when the level boundaries were
set within the level instead of to level extents). Collision tests for
objects on the other side of a loop are now only performed if looping
is activated on the corresponding axis
- Explicit negative values for X/Y Parameters for "Spawn_Object" were
mistakenly interpreted as references to registers and would cause a
crash instead of spawning the object directly at the given location.
Giving a negative value for the X or Y position will now work properly,
and if desired, registers may still be referenced to retrieve their
values for use as the object's position instead
- "Floor Path" mobile objects with a velocity greater than or equal to
zero would move down one pixel more than they should each frame. This
has been fixed, and the objects now move only one pixel for every 256
units of velocity, as they should
* Test Release 5
- Implemented scripted "Move", "Draw", "Collide" "PCollide",
"DBDraw", and "DBPlace" functions for Game Objects
(see "Object Def" doc)
- New Script Commands (92-826, see "Functions" doc), and altered
"Switch_Palette" (91), "Chr_Equ_Const" (85), "Chr_Equ_Reg" (86),
"Reg_Equ_Chr" (87), and "Loop" (28) functionality and Parameter
list format. New functions include many to directly manipulate
Game Objects and Player Characters. The Functions documentation
has also been broken into categories for easier navigation
- Added resizing of "Windows" during processing of Status
Scripts, change their clipping regions instantly or cause
them to grow/shrink
- Implemented a faster method for processing "If"/"Else"/"EndIf"
Script Commands
- Added "Player Hotkeys", "Player Functions", and Player Animation
Listing to "Character Def" format (See "Character Def" doc)
- Reference tags for Player Variables have been updated to include
"C", "c", and "a", as well as the previously available "A".
(See "Player Variables" Doc)
- Added "Out Of Range Event" line to "Object Def" format for
handling objects that move outside of "active" range (two screen
widths away from any active player) (see "Object Def" doc)
- Added three new commands to the Object Editor for managing
object's current states and "Resetted" states, and changed the
"D" keypress for deleting to "Ctrl+D" to avoid accidental
deletion of objects during editing (see "Object Editor" doc)
- Added "Flags" line to "Object Def" format for setting special
properties of an Object Type such as whether or not it is saved
when an Object File is created (see "Object Def" doc)
- Added "Hotspots" to sprites for managing collisions, object
spawning, ETC., based on "Hotspot" position in each frame
(see "Character Def", "Object Def", "Functions", and
"Sprite Editor" docs)
- Added "Auto Center" option to Drawing Offsets manipulation in
sprite editor. When this option is on, flipped/mirrored drawing
offsets will be automatically generated from normal offsets
based on object position (the crosshair's point)
- Added "Player Boundary Positions" case (2) to "Boundary Event"'s
"Target Object" Parameter (See "Zone Def" doc)
- Added ability to assign Player Character sprites to a Game Object
using the "P" flag (See "Object Def" doc)
- Finalized implementation of "FreezeObjects" "Game Register", for
freezing game objects' movement and animation
- Added "Player_Freeze" "Player Variable", allowing scripts to
freeze a player's automatic movement and animation
- Added "Curr_Palette" (51) "Game Variable", allowing scripts to
read the ID of the level palette that is currently being displayed
- Added "PalDump" utility to dump color palette entries from a PCX
image to a file in "Set_Palette_Range" script function format
(See "Command Line" documentation)
- Added ability to modify Global Palette from "Set Palette Range"
script function (Func 21, see "Function" documentation)
- Added Tile Plane Copy/Paste to Level Editor for copying tile and
scroll data from one plane to another (See "Level Editor" doc)
- Converted "Ring" object collision to generic touch item collision
(See "Object Collisions" documentation)
- Added other mobile Game Object functions, including a "projectile"
object that can test for collision against other Game Objects
(see "Object Movers" documentation)
- Added objects for "Status Scripts" that should only be displayed
on the first or second screen in split-screen mode as opposed to
being shown on both screens (see "Built-In Objects" documentation)
- Added "Player_Type" "Player Variable" (A24) for reading the Character
ID that any given player is using so that it may be used in scripts
(see "Player Variables" documentation)
- Added "Number of Constants/Variables per Character" entries to the
Game Def File Format to enable users to create extra Constant and
Variable space within Player Characters for use with scripts
(See "Game Def" documentation)
- Added Level Map Dumper to Level Editor for dumping any combination
of level tile planes to a PCX image
- Sprite Dump from the Sprite Editor now outputs Game Object sprite
properties in the format in which they appear in the "Object Def"
instead of defaulting to the Player Sprite property format
*BugFixes*
- Modification to Sprite Editor caused boundary boxes to display
improperly sometimes and caused crashes when selecting a box
type that was not already used on the current frame. Boxes now
display properly and there is no crash
- RAM wasn't allocated properly during loading of scripted
Game Object functions and would sometimes cause crashes, most
noticeably after loading games during an existing session,
during the new load or during object animation. The functions
now recieve the proper ammount of RAM and will not crash
- Improper initialization of "Animation" scripted function
structures caused crashes after repeated use. Proper
initialization now ensures that other RAM doesn't become
corrupted and eliminates this crash
- Program switched back to "Game Folder" instead of "Zone Folder"
after loading Zone-specific "Game Objects", causing a crash if
a file containing these objects was specified. It now returns
to the "Zone Folder" and continues to process normally
- If two different levels used object files that opened image
files of the same name, the second level wouldn't load it's
image because a copy of the filename is used to determine
whether to load a new file, or work from the file that is
already open. The filename copy is now reset between levels,
allowing them to load image files of the same name
- Collision lists weren't cleared during a level transition,
causing objects in the new level to be inappropriately set
for collision during the first gameplay frame of the level,
which would cause a crash if those objects weren't intended
for collision. Collision lists are now cleared during level
so that object collision behaves as it should from the start
- Mishandled pointers in DOS sound code caused game to crash
when a sound should have looped. The pointers are now set
correctly, causing looping sounds to loop without problems
- An un-freed pointer during the clearing of Status Scripts
between levels caused a slow loss of free RAM. The pointer
is now freed properly, returning unused RAM
- The Status Script "Level Window" (254) didn't display it's
sub-windows' contents properly, and windows nested more than
one level below either the "Level Window" or "Screen Window"
wouldn't display at all. "Level Window" now displays it's
sub-windows correctly, and windows nested within non-"main"
windows will be displayed
- Program mouse didn't properly keep up with Windows mouse in
double-sized windowed mode. Program mouse now follows Windows
mouse properly
- Game-Specific Global Palette would load after selecting new
game with the game menu, but not when the game was started
from the command-line (or launcher). The game's global palette
is now loaded instead of the default when applicable
- Tile editor's fat bit editing grid expected stretched art in video
modes 1 and 2, which is only used in modes 3 and 4. This caused it
to display and accept input improperly. It now recognizes the
un-stretched art, displaying the tile and accepting editing input
correctly.
- Level Ripper only reads and creates un-stretched art, which caused
corrupted output when using Parameters to call the level editor in
video modes 3 or 4 after the ripping is complete. Preexisting
tilesets are now un-stretched before the process begins, and the
output is re-stretched before the level editor is started, saving
and displaying the resulting tiles correctly.
- Sprite editor would report and act on doubled sprite size in
modes 3 and 4 rather than actual size. It now reports and acts
on the sprite's actual size
- Sprite Editor would not reset current boundary box and animation
frame to 0 when switching between sprite types, causeing errors
and crashes when a higher frame/box ID is selected before switching
to a sprite type who's first sprite has fewer frames/boxes. These
values are now reset during the switch, preventing errors and crashes
- Saved tiles would become corrupt when saved while using modes
3 or 4 because the stretched art was not un-stretched before
save. The art is now un-stretched before saving, allowing for
proper output in all modes
- Script Functions 86 and 87 actually called function 85 due to
improper setup. These functions now work as they should
- Palette fades would sometimes cut off prematurely when most
colors were already close to their target values. All fades
now run their full course
- When inserting a row or column in a tile plane in the level
editor, the plane may visibly repeat itself and visibly cover
any alterations that are made to the new section. The scroll/
repeat settings are now fixed so that the newly created rows/
columns are visible
- A miscalculation caused the Right-Click "Get Color" feature of
the tile editor to select the wrong color when trying to select
a color from a tile while in video modes 3 and 4. The correct
color is now selected when any fat pixel in the tile grid is
right-clicked in all modes
- When altering a palette color in 64-color mode ("water" mode),
the program would attempt to also modify the "water" equivalant
color, but index calculation was based on an older version, and
"global" colors would be changed instead. The corresponding
"water" index is now properly modified, leaving other colors
untouched
- An error in manipulating the double-buffer caused the program to
crash when returning to game mode from the level editor if the
large editing mode and video modes 3 or 4 were being used. The
buffer is now set properly, allowing for transition between
large editing mode and mode 3 or 4 gameplay without crashes.
- Both C and V keys would cycle foreward in the list of object
sprites in the Sprite Editor. C now cycles backward as it should
* Test Release 4
- "Boundary Events" implemented (new info in "Zone Def" Doc)
Player variable "Player_Curr_Boundary" added to accomodate
(see "Player variables" doc)
- Level segment looping implemented. BGOffset? "Registers"
updated, and ?Loop_Size "Registers" added to accomodate
(see "Game Variables" doc). "Level Looping" doc added
- New Script Commands (89-91, see "Functions" doc)
- Added "Max_Objects_Used" and "VMode" to "Game Variables" (see
"Game Variables" doc)
- Added Status Script object types 14 and 15 for Player Variable
display (see "Status Script" doc)
- Re-implemented solidity viewing in level editor (press
5 to toggle, or use the tile editor, as described in
"Tile Editor" and "Level Editor" docs)
- Editor now attempts to view the same portion of the level
that was visible in gameplay mode when entered from gameplay
mode if the currently selected plane is large enough
(Ex: Go to level editor, select the "flat" plane that is
used for collision, return to gameplay mode, return to editor
mode. Editor will view player's current position without having
to scroll to it)
- Added ability to toggle boundary viewing during an animation in
the sprite editor (right-click the "Ani ID" option)
- Re-implemented Tile Animation and Palette Rotation toggles in
Tile Editor, and enabled both in Object Editor
- Re-worked scripted function handlers to use fewer unique functions
and structures between types, easier to build (C++ Functions,
available script functions have not been changed). "Animations" can
now use "if" statements like normal "functions".
- Removed the limit on the number of active functions/animations and
their "if" statements. The lists will grow and shrink automatically
as needed IMPORTANT: This has slightly changed the formats for
"Game Def" and "Status Script" by removing unnecesary lines. Please
see relevant documentation, the removed "If" and "Active Function"
items are no longer listed
- Added new video modes with square pixels. Original 320x200 video
mode is still available (and active by default) for speed. Others
can be selected by command-line or launcher (see "Command Line" doc)
- Updated launcher with video mode select and a functional "Game Help"
button which will load the currently selected game's documentation
if it's available and properly stored (see "Launcher" doc). "E02 Help"
opens docs folder
- Allowed for PCX image sizes other than 320x200 when loading game art.
These images will now load properly instead of causing errors
- Level Ripper now auto-detects image size; Image width and height
settings have been removed from the command line switch and the
Level Ripper portion of the launcher ("Level Ripper" doc updated)
- Slight Sonic player handling bugfixes and improvements
- Hard-coded debugging status removed and re-created through the
status script "dbgstat.def" in the "default\stats" folder (must
be loaded and spawned by the game to be displayed)
*BugFixes*
- "Relative" tile planes would cause crashes or load improperly.
Levels with "Relative" planes now load correctly
- "PCX Palette Import" didn't function properly, it now properly
imports the selected palette region to the selected palette "layer"
- Deleting Palette "layers" could cause crashes or freeze the current
selection on an invalid "layer". Adding/subtracting "layers" now
works properly
- Mis-set window type in full-screen mode caused mouse to be able to
grab the program window and/or click window buttons, which would
cause problems. Window does not react to mouse in full-screen mode
now
- Tile editor allowed for "Total Colors" of a color entry to be reduced
to 0 which is invalid and caused crashes, the editor now prevents the
value from dropping to 0
*Special Notes*
- Scriptable object functions are documented in the "Object
Def" documentation, but they are NOT currently active.
Only scripted "Animation" functions are available for
objects currently.
- Demo recording is listed in the launcher, but not currently
active.
* Test Release 3
- Act data loading implemented
- Tile Editor reimplemented
- Tile/Level ripper reimplemented with new features
- Object (placement and properties) Editor reimplemented
- Command-line Parameters reimplemented with new features
- Macro file for command-lines longer than 10 Parameters
(only necesary for DOS ver) ("Macro.txt")
- Launcher re-built for new options
- Re-wrote level editor, tile editor, and level ripper
documentation to suit E02, and created up-to-date
documentation for all other aspects (32 total docs)
- Corrected Level Editor Row/Column Insert for non-"flat"
planes
*Special Notes*
- Scriptable object functions are documented in the "Object
Def" documentation, but they are NOT currently active.
Only scripted "Animation" functions are available for
objects currently. Also, level boundary events are not
currently active, though they may be emulated through
creative use of "Game Functions". Level Loop activators
in the "Game Variables" are also currently ineffective.
- "If" conditionals currently cannot be used in "Animations"
- Demo recording is listed in the launcher, but not currently
active. Loading of game-specific .txt and .hlp files is
also not currently active, as well as joystick support.
* Test Release 2
- "GDF" and "ZDF" Scripts re-implemented, along with new
Music and Sound Effect scripts.
- All Script formats have changed to accomodate for the higher
level of versatility.
- ".?DF" file extensions have been replaced with a uniform
".DEF", or ".DE1", ".DE2", ... in case of game Sub-Types.
- Certain types of data can be loaded as Game-Global,
Zone-Specific, and Act-Specific: Music, Sound Effects,
Game Objects, Script Objects, and Script Functions. Game
texts can be loaded Game-Global, and Zone-Specific.
- ".GDF" file type has been remade. This file, which must be
placed in the "GDF" folder, contains basic information about
it's "Game Set" such as it's name, how many sub-types it has,
and what files to look for if it requires another add-on. It
controls the listing of the games in the selection menu and
how the program loads their data.
- Game and sub-type selection menu has been added. Hold F8
while starting the program, or press F8 at any other time
to select from a list of available games and their sub-types
- "Game Functions" introduced, "Functions" that can be called
outside of "Status Scripts" (such as at the start of a level),
and exist within their own files
- Many new "Functions" added to "Status Script" and "Game
Functions", introducing loops, conditionals, variables,
and math operations, among other useful things
- Split-Screen game mode and large level editor mode reimplemented
- Art is actively stretched/shrunken in RAM when switching
to/from stretched split-screen mode instead of reloading
(which involved re-reading full scripts and disk load time)
- Info message system implemented, gives "technical" and "debug"
information when necesary
- Several new editor keys
- Sprite editor in progress
- New version of Game Object system in progress
- Player character scripting and gameplay in progress
- Script Documentation in progress
- Script/Scroller/Player demo created
* Test Release 1
- First Release
- Up to 16 layers available per level, with the ability to
turn each on or off.
- In addition to the Normal and Horizontal Tiled scrolling
modes, 4 new modes have been added: "Relative Flat",
Vertical Tiled, Horizontal Lined, and Vertical Lined.
- Level Editor contains a more descriptive status listing
and features improvements related to layer selection,
visibility, and type, as well as more functionality for
the "Selection Box", such as the ability to use it to
change scroll properties for more than one row/column
at a time.
- "Titlecard Script" has been replaced by "Status Script",
which can be used to create "Titlecards", Title Screens,
Menus, Status Displays, etc.
- ".SPR" and ".SCR" file extensions have been replaced by the
less 'confusing' ".PCX" extension.
- Script/Scroller demo created