Download 0.99 now! (unstable build)
Edit 20th May 2009: As expected there are some pretty serious bugs in this build, which have been corrected for the next build. 0.99.2 will be following up shortly with important fixes.
Construct 0.99 is the biggest code review & overhaul we've ever had, so chances are, as many things are broke as are fixed. Be careful when importing projects to 0.99, you are advised to keep backups of .caps and keep a 0.98.9 installation handy in case the roof caves in. We're sorry for the long wait, but here it is at last Remember, this is an unstable build, so it is not guaranteed to work at all: it is for testing. If you are worried about your projects, continue to use 0.98.9 until there's a stable release, but remember we still need testers to see if this one works!
- 3D box was difficult to refactor to the new renderer. Since the new renderer uses the camera at height 100 instead of height 8, the scaling for depth and Z are different, and may need adjusting. Yaw and Pitch currently have no effect. This may be fixed in a future build. You also need to enable '3D layering' for correct display.
New features & Changelog
New project bar and application organisation
The project bar has been rewritten entirely, to show and provide much greater application organisation. Among the new features are a visual hierarchy of your application, with integrated resources - split into music, sounds, menus, icons, etc - and previewing, object folders, and greater control over things like event sheets, families and global variables.
New runtime renderer
The runtime renderer has been rewritten from the ground up. It's now faster (twice as fast at displaying large numbers of rotated sprites), more powerful, and supports better features. It has been tested internally, but if your game appears differently to how it did before, please log a bug with the appearance problem. Reproducing in a fresh .cap, as always, is the most efficient way for developers to solve a bug.
Here are some of the new things you can do with it.
3D sprites: Z elevation
Using the 'Set Z elevation', any sprite can now be moved on the Z axis, towards the camera, or off in to the background. This allows for you to easily have things genuinely up in the sky, taking off, falling down pits, far away in the distance, and so on! The camera is at Z=100, and the layout is at Z=0.
To make things in the distance appear behind things in the foreground, instead of overlapping in the order they were drawn, enable '3D layering' for the layer. If objects are at the same Z elevation (like the rest of the game at Z=0), the normal front/back ordering applies, otherwise they are drawn based on depth.
Mesh editor & 3D mesh distortion
You can now move individual vertices in a sprite mesh on the Z axis, like Z elevation. There is also a new Mesh editor (screenshot), a Construct-made mesh designing program, which you can find in the Tools subdirectory of the Construct installation path. The commented .cap file and documentation (readme.pdf) is provided. The Mesh editor makes it easy to distort a sprite by dragging its points and seeing the result. You can then save the mesh to a file to load in to your game, without having to type in long lists of numbers!
Moving points in 3D allows for a very basic form of 3D modelling. You can easily move a few points around a hill sprite, for example, and elevate some of the points making them higher. Bingo, a 3D hill!
You can now set in application properties, whether to load textures on a per-layout basis, or all on startup. This can be overridden by a setting in each layout's properties. For example, you can set the application to load textures per-layout, but if one layout is set to load on application start, that layout has its textures pre-loaded on startup.
There is also a new system action, "Load/unload textures", which allows you to load or unload textures for any layout at any time, for specific control of which load layouts and when. Also, with 'FPS in caption' enabled, the VRAM usage is also displayed in the caption for easy tracking of VRAM usage.
You can now enable multisampling in Application Properties, to antialias the edges of hard-edged sprites. This has some limitations, though, so it's best used to improve the display quality of retro games. It has no effect on shaders PS1.1 and above, and slows down shaders which use the background, due to limitations in DirectX 9.
- [ADD] Fade: minimum opacity property
- [ADD] Physics: change 'immovable' and 'no rotation' properties at runtime
- [FIX] Platform: Jump action now accounts for direction of gravity
- [ADD] 'Player' column in controls dialog, to assign keys for players 1-10
- [ADD] Option to select which player controls behavior for behaviors with input
- [ADD] 'Player' parameter to Mouse & Keyboard 'On control pressed'/'Control is down'. Note: existing applications using these conditions might not display it correctly (player appears as %1), but it will work correctly if you edit the condition, and press OK.
- [FIX] Editing the key for a control via the Controls dialog didn't work
Event Sheet Editor
- [FIX] Ampersands now show correctly in parameters
- [FIX] Selecting 'no' when prompted to add an undefined variable no longer crashes
- [FIX] Sometimes created event groups would be disabled by default, this is now never the case
- [FIX] Sometimes events could disappear or warp
- [ADD] UI persistence: when saving a file a '.persist' file is saved with it. This represents your workspace when developing this .cap file, and when it is loaded, it will open your editors as they were
- [ADD] '3D layering' option to layer properties. This must be enabled for 3D objects (Z elevated sprites etc) to overlap according to their depth. If off, objects will overlap according to the order they were drawn in
- [ADD] 'Load textures' application property
- [ADD] 'Load/unload textures' system action
- [ADD] Name and category field to insert object dialog
- [ADD] 'Smart Text' shader. DirectX can't seem to render antialiased text properly; this shader applied to text makes the antialiasing look better, until a new font rendering system is in place
- [ADD] Multisampling application property
- [ADD] Sharpen effect, thanks to Thomas Mahler et al
- [FIX] Renaming an application with event sheets open would mess them up
- [FIX] Plugins would fail to load when Data Execution Prevention (DEP) enabled. Note exported EXEs before 0.99 will also fail to run on computers with DEP enabled, so it's advised you re-export any EXEs if your game is stable in 0.99.
- [FIX] When deleting a layout, it now checks if the event sheet is used elsewhere before prompting
- [FIX] Opacity is now stored in objects which use it as a floating point number, rather than internally converting to a byte. This allows better precision when adjusting opacity
- [FIX] Removing family behaviors would sometimes crash
- [FIX] Right clicking in a blank area of the animation bar, then clicking on a frame immediately afterwards caused construct to crash
- [FIX] Event sheet includes which are the owners event sheet are no longer exported
- [FIX] When deleting variables/objects/families, if the event sheet was not viewed before a preview, the IDE would often crash
- [FIX] Pasting objects from other applications would not update animation identifiers, and there would be overlaps
- [FIX] Crash recovering from fullscreen mode after removing an effect in layout editor
- [FIX] If a behavior is missing, the file will no longer load
- [FIX] Using save as will now add files to the recent file list
- [FIX] Families cannot be added to objects if an object with the same name exists
- [FIX] Attempting to save over a read only file now prompts and fails instead of appearing to succeed
- [FIX] Inheritance layers are now initialised when needed, and not just when their layout is opened (fixes a crash)
- [FIX] Overlay effect now blends like Photoshop does, thanks to Shviller for fix.
- [ADD] Load Textures property: on app startup, on layout startup, or use application setting. Layouts loading textures on app startup never release their textures until the application exits, unless you override with the 'Load/unload textures' system action
- [ADD] Layers can now set independent point/linear sampling, or use the application setting
- [ADD] Dark line where the application window boundaries are
- [FIX] Prompt to delete is now fixed.. once and for all
- [FIX] Ctrl-A no longer selects hidden or locked objects
- [FIX] .ini file could save bad data sometimes which would crash the Picture Editor
- [FIX] Cropping an empty image made the hotspot jump to a random location
- [ADD] Line plugin. Can draw antialiased lines between any two points. Both the start and end point can be in 3D to create wireframes
- [ADD] Image: Get alpha level of individual pixels
- [ADD] Box: Hotspot position can be adjusted
- [FIX] List Box: Editing initial list items now works correctly
- [FIX] Common ACE: Move to layer didn't check if layers existed before trying to move
- [FIX] Common ACE: Get layer was 0 indexed and thus caused problems
- [FIX] Function: Crash using recursion with expression functions
- [FIX] Text manipulator: Still used 0 based indexes in sub strings
- [FIX] Text manipulator: Won't crash if loading a non existent file
- [FIX] Edit: Multiline no longer on by default [caused password mode not to work]
- [FIX] Text: Write text now immediately clears old text
- [FIX] Tiled Background: Last column/row of pixels was wrong if object size was exactly the same as the texture size
- [FIX] Array: Compare conditions now respect 1-index
- [FIX] XAudio2: Possible memory leak with "Play music"
- [FIX] Hash Table: get current index in 'for each' was 0 indexed
- [FIX] Issue with objects created in a trigger not being affected by actions in the same trigger (eg. with two 'start of layout' events)
- [FIX] AngleDiff() with two identical parameters sometimes returned -1.#IND due to a floating point rounding error. It now returns 0 in this case
- [FIX] Calculations had wrong order of operations in some cases (eg. Array(a - 1 + 1) evaluated to Array(a - 2), now works as expected)
- [FIX] Some advanced picking conditions (like Sprite: pick closest to...) were not working correctly
- [FIX] Changing the display size always centres the window (only did it once previously)
- [FIX] DisplayWidth and DisplayHeight used to take a tick to update their values after Set Display Resolution, now they update immediately
- [FIX] Crash changing resolution with a sprite having a texture loaded from a file
- [FIX] Crash testing collisions with infinite/NaN width/height
- [FIX] Possible inaccuracy of runtime timer over long periods of time
- [CHANGE] When an 'Else' event runs, it now in effect has all instances picked. This fixes some things not working with Else, but it does not yet pick the objects that did not meet the previous event. This should be corrected in a future build.
- [CHANGE] Batch count is now gone from the caption when 'FPS in caption' is enabled. It has been replaced by VRAM usage.
- [ADD] Set/Get/Compare Z elevation. Adjust a Sprite's position on the Z axis in 3D
- [ADD] Can distort in to the Z axis with distort maps allowing basic 3D deformations
- [ADD] 'Lock animation angles' and 'Set animation angle' actions: disable locked animation angles and Set Animation Angle can control animation angle independently of object angle
- [ADD] Get animation speed expression
- [ADD] Save/load mesh to/from file
- [ADD] Expressions to get mesh rows/cols/x/y/z/u/v/filter/opacity
- [FIX] Ping pong animations 'on finished' were triggering a frame too early
- [FIX] A ping ponged animation could escape out of its repeat limits by pausing and resuming if it was on frame 1
- [FIX] Mesh distorted sprites now rotate and scale accurately
- [FIX] 'Set position to another object' with a float for the image point parameter did not work
- [FIX] Images loaded from external files are now mipmapped
- [CHANGE] Set animation speed now works with negative values so you can reverse an animation
- [CHANGE] Animation is playing condition now works if your animation is paused
- [CHANGE] Clearer distort map action display texts