From Morningside Developer Wiki
Jump to: navigation, search

This is a changelog of the Morningside Engine, which will updated regularly from the 28th of December, 2016. The latest stable version is 0.6.3 alpha.




0.8.5 alpha (08/10/17):

  • Almost a year on from its debut, the particle system gets some new features to allow for far more complex effects.
  • Particle effects now support sub-modifiers. The idea here is that for every given modifier that is used, an indefinite number of sub-modifiers can be specified.
    • These occupy a range between 0-1, and each particle emission generates a value in this range.
    • From there, the applicable sub-rule is selected, and this means that for every effect, certain percentages of particles can be vastly different to others.
  • Modifier StartPosition_Entity has been added, which positions an effect's particles around a given entity.
  • Creating particle systems can now also specify parameters which can be accesed by modifiers to change their behaviour dynamically. alpha (02/10/17):

  • Tables can now be scrolled.
  • Tables now render their last element correctly.
  • Items can now specify an alternative ammo ID.

0.8.4 alpha (29/09/17):

  • OpenAL integration has been achieved. It should result in far more accurate sound recreation and better 3D sound than previously.
  • Spawning explosions should no longer cause a crash in some circumstances.
  • The sound system now cleans up after itself. alpha (27/09/17):

  • MSMultiSound has been fully implemented.
  • An editor for MSMultiSound objects has been added and is accessible from the sound browser editor panel.
  • The sound manager supports loading multisounds, as well as unloading / reloading elements from within one.
  • Playing walking sounds is now properly implemented too.
  • VRF structures now save when a map is written on top of the times they already did.
  • A function to check if an actor is already walking has been implemented - it checks the actor's key flags.

0.8.3 alpha (25/09/17):

  • Modal dialogues implemented. They work by using callbacks, and support an unlimited number of buttons, input fields, and labels. Buttons are always on the bottom of the dialogue.
  • Work started on the MSMultiSound class. This is a container that allows multiple sounds to be referenced by the same name, intended for making it easier to use a random sound from a pre-defined set for a given action.
  • Entity manager can now output walking sounds for entities and materials that support it. alpha (17/09/17):

  • World Damage Objects (primarily used bullets) do damage correctly against entities now.
  • Bugs were fixed with ReloadAction triggering when it shouldn't (such as if there was no ammo left in an inventory - you wouldn't get free ammo but a reload sound would still play).

0.8.2 alpha (09/09/17):

Work on the engine did not stop since the last time this page was updated. The work was instead focused on lots of different areas and was hard to declare finished.

Combat (this is the main reason the updates have been so slow)

  • A mostly-working combat system has been implemented. This system works on a series of states and actions, and supports move chains, key prompting, action effects, missing, critical hits and more.
  • AI behaviours are now able to access their given actor's current combat instance.
  • The CombatMonitor interface can be extended to allow for responsive interfaces and animations in reaction to combat events such as health values changing, actions being blocked, actions being executed, or displaying a prompt key.
  • The CombatManager has been implemented to handle logic for all running combat instances.
  • work has slowly progressed on scripted combat sequences


  • BaseActor can now specify a classname to use for combat.
  • CombatInitiator class has been added to start a combat instance between two named entities.
  • BaseActor can now specify an actor name - this is different to the target name, and is intended for use in games as the name given to the NPC which players will see.
  • The Inventory class used by BaseActor can now trigger events if they are hooked by a supplied InventoryChangeListener at the entity manager level.
    • The Inventory class gained the methods "getQuantityOf(id)", "subtractQuantity(id)" (which removes the given amount or what is left and returns the net change),
    • Fixed a bug where items of the same type would not get added to the same slot and cause an inventory to reach capacity too soon.
  • Use events originating from a BaseNPC class or one overriding it can now be hooked by a class implementing "NPCUseEventHandler". This can be used to completely cancel out default interaction behaviour or alter it dynamically.
  • WorldAnchor now fires its "onArrived" output correctly where it never used to.
  • The SittableObject class has been added. It creates a joint between itself and the actor interacting with it and hooks movement, so instead of moving the player, it can gradually spin faster while the user tries to go left or right.
  • The HUDController entity has been added, and primarily contains inputs for triggering HUD events.
  • Scripted sequence actions can now operate on non-entities but only to trigger inputs.
  • A BaseEntity can now specify to never take damage.
  • Using $comb_0 and $comb_1 in an output parameter will work correctly in all cases.

'Items / 'Weapons

  • Sounds to use for reloading actions, when a reload is finished, and when a weapon's clip is empty are now supported by the item system.
  • The Projectile item behaviour has been updated to link in with these new sounds.
  • The Projectile item behaviour can now specify whether it allows continuous firing (per the given cooldown) or firing only on clicks, and is given in an item's override.
  • The Projectile item behaviour can now trigger an Actor's Reload Action.
  • Proper support for weapon clips and reserve ammunition has been implemented. Clips store a counter and their contents are not present in the inventory.
  • An item can now specify data for reload actions:
    • Reload all at once - to act as if a new clip has been put into a gun, or whether so much ammunition is loaded at a given time.
    • Empty clip auto-reload - reload the gun automatically when the clip runs empty.
    • Manual clip re-fill - require the user to continually interact with the weapon until the clip is reloaded, e.g. ever time the user reloads, another bullet is added to the chamber.
    • Time per action - the time a full reload requires / the time a single reload action takes, depending on if "reload all at once" is true, or false.
    • Reload per execution - the amount to add to the clip each time a reload action is executed, if "reload all at once" is false.
  • Reload actions have now been implemented.
  • Item drops can now specify whether they should not add anything to the user's inventory when they are touched. If they specify this, they can still notify the InventoryChangeListener. They can also specify if their represented item should automatically execute its 'use' action when touched.


  • The dialogue manager now correctly dereferences dialogue instance variables in every case and won't fail randomly.


  • StyledElement has gained the properties "scaleX", "scaleY", "rotation", "translateX", "translateY", "screenWidthPercent" and "screenHeightPercent".
  • BaseAnimation now supports specifying a percentage as a target value - for example "width" "50%" will set the target to be 50% of the HUD root element's width - the HUD root element is the game screen.
  • Issues where due to timing, an animation may appear unfinished and not reach the target value correctly, have been fixed.
  • HUDMessageStack now supports adding a messages to it which do not affect its current position, this will help with aligning multiple messages if different fonts/colours/sizes are required.
  • Support for letterboxing and pillarboxing has been added - these are simply bars drawn over the rest of a game's content, though. They can be controlled to come down at a given speed and retract.


  • Label now supports a basic shadow, with offset and colour.
  • Label now supports a horizontal rule on either side.
  • Label now sets its own height based on the given font's baseline.
  • Fixed a bug with a DirectoryListBox where it would automatically enter a folder the moment it was clicked after dragging and dropping VRF items.
  • Button can specify to have its background image fill the available space of the button.
  • Button can specify to have its text rendered like that of a Label (to the left, no image offset).


  • The console commands "god" and "fullhealth" have been added.
  • Animation debug draw can now be toggled as part of RenderRules - this means that when an actor is moused over, information about its animation name and suffix are drawn on top.

0.8.1 alpha (28/07/17):

  • The map manager loading state capability has properly been implemented now. The engine now provides a default state, too, which displays loading progress by showing the objects that are currently loading.
  • Work has started on serialising containers properly.
  • Template containers have now been implemented. Any container can be saved as a template and re-used.

0.8 alpha (27/07/17):

  • Support for containers has been added. These are objects that hold items, simply. The advantage they hold over the previous implementation of inventories is that they may be coupled to any physics object, not just actors. They also support persisting across maps.
  • Containers can specify random items with a chance, quanitty, and condition modifier thresholds.
  • The Map Manager can now have a game state specified for it to show while maps are being loaded. By default the engine switches to the pre-state "Loading" screen when loading maps.
  • If a tooltip is concealed as it falls out of the right side of the screen, it will be offset to fit so it is visible.
    The new container tools and interfaces.


0.7.5 alpha (26/07/17):

big feature will debut soon!

  • Improvements to map loading with lots of tiles, again. There were more bugs added than fixed last time - for example, collisions weren't working for tiles at all any more. They work now.
  • Fixed a bug where a map would be cached twice due to the update loop ticking while the map was being pre-cached.
  • The console window can now be resized.
  • A window can be resized by setting the resizable flag.
  • A control can specify to fill the available space on X and Y axes with configurable offsets by using margin properties.

0.7.4 alpha (14/07/17):

  • Loading maps with lots of solid tiles is far more stable and shouldn't crash the physics engine any more.
  • It is now possible to hook into the entity manager and access every entity as it is spawned, by using the EntitySpawnListener.
  • Exiting the editor environment is now possible without using the "map edit_exit" command, which didn't work properly anyway. It will save the map and then return to a gameplay mode.
  • The window manager can now hide all windows without closing them all.
  • Calling "map edit" from the console will now cause the map to be reloaded from disk. This is to restore the state of any entity properties/entities that were removed while in the map so that information isn't lost when saving the map next.
  • Dialogue nodes can now alter quest states. alpha (02/07/17):

  • New HUD container has been added - "HUDMessageStack". It dynamically controls the placement of messages inside it and can override style properties. They are also able to move items to the top-most position possible as well as specify animations for when a message is added and for when one expires.
  • BaseAnimation status can now be listened to by registering a callback - and using an interface called "AnimationStateListener".
  • BaseAnimations can now dereference variables if they are set as a target value - for example, to reference "width" as a target one can now use "$width" so that the animation uses the value of that variable instead. alpha (01/07/17):

  • HUD system has been completely re-written to allow for scriptable control of elements.
  • A new animation system for StyledElement objects (currently only HUDObject and HUDMessage extend this) has been added, which allows for manipulation of multiple properties of different types and with differing target values within a single animation object.
  • Fixed the quest tree assigning new IDs that were too low and overwriting existing nodes when the quest tree had been loaded from disk.

0.7.3 alpha (29/06/17):

progress didn't stop in these two or so weeks but there were a lot of things being worked on simultaneously

  • Dialogue nodes can now specify a "speaker" parameter. This means that the name of whoever is saying a node at any given time can be communicated and kept track of.
  • The dialogue manager has now gained the ability to start any dialogue from the console, as a debugging tool, with dialogue_debug. It can also be instructed to list all known dialogue objects with dialogue_list.
  • A map's nodegraph can now be queried for nodes of a type within a given range, with a distance parameter within which a node should be instantly selected.
  • A map's nodegraph can also seek random nodes of a type properly now.
  • Entity relationships are now properly implemented. They can exist between a combination of two classes or specific entities, or both.
  • The concept of AI teams has now been introduced. An entity can move between teams (but only be in one at once) and will then receive communication when events such as enemy sighting, or members being attacked or killed occur.
  • The AIBehaviour class has been extended to implement handlers for every type of AI Team communication so far added.
  • The dialogue editor is better at saving things now.
  • A dialogue can now specify to suspend itself (meaning that it will not progress, nor print) until the manager receives input to continue printing again.
  • The console now supports marking the most recently added piece of output as a progress indicator - that is, it can be set to use either a spinner or ellipse mode to indicate that something is happening.

0.7.21 alpha (10/06/17):

  • Added some additional corner shapes to the shapes view.
  • Fixed tile shapes not saving sometimes.
  • Added a button to the shape list to pick a shape type from the map and select it.

0.7.2 alpha (09/06/17):

this probably should have been the point at which I bumped it to 0.7...
The new tile shaping tool and capabilities.
  • The engine now supports a range of shapes for tiles. While all tiles still occupy a 1 x 1 space on the map grid, the way they are rendered and can be collided with is now able to be overridden with shapes.
  • The map format has been updated to support this additional data. Old maps will still work perfectly well, and will have the new data added in when saved next.
  • The tile shape altering tool has been added to the editor toolbar and presents a panel of every available tile shape.
  • The render shape and physics shape are now described in the status bar when mousing over a world tile in the editor.
  • box2d doesn't play nice with some shapes as of yet.

0.7.1 alpha (02/06/17):

  • Added the ability to add new layers to maps after they have been created. This is achieved through the "Add Layer" button visible from the map layer list.
  • The engine behaves better when the amount of layers in a map have changed from what there is in region files.
  • tset_vrffix has been added as a command to tidy up tileset data in case any items were left over from other maps. This shouldn't happen any more but there's a fix if it does.
  • Fixed VRF items hanging around after deleting a tileset element from the editor.
  • Fixed props not saving their z-indexes when the map is written.

0.7.0 alpha (30/05/17):

This was bumped up to 0.7 because it's been 0.6 for too long. There are some nice new features, though.

  • A new tool has been added to the engine to record all links between maps. This means, that for any map that links to another using anchors or teleporters, this information can be seen from the new Map Linkage Window. It should make it far easier to create linked maps and worlds without having to write down anchor names and targets and this and that. It is accessible from the toolbar.
    The newly-added map linkage window.
  • BaseEntity now fires a subroutine when all of its properties are done being changed (i.e. all of its properties are parsed, or the instance editor is done saving).
  • The dialogue editor's visualiser handles laying out dialogue choice nodes correctly now - as in, it makes sure that if a choice node leads to another choice node, there will be vertical room to display all the information instead of overlapping and hiding.


0.6.42 alpha (29/05/17):

  • Dragging or clicking with the right mouse button functions the same as the eraser in the map editor.
  • You can now click with the eraser instead of having to drag to use it.
  • The view options panel is clickable again.
  • The eyedropper tool works again.
  • The tileset strip is now toggled with Shift-click to prevent erasing and popping up at once.
  • The tileset strip now shows tooltips for tile names when moused over.
  • Moving tiles now resets the marquee after they are placed.
  • The scroll wheel movement amount for the top down view has been increased.
  • In addition to other counts, a count of active particles rendered is also available in the editor and as part of RenderRules, under RenderRules.drawRenderCounts.
  • Scrolling the layer list to negative indices no longer allows selecting layer -1, layer -2, etc. They don't exist and never will.

0.6.41 alpha (25/05/17):

  • As a debugging tool, the explosion rays of active explosions can be made visible.
  • Fixed an issue with explosions where their rays would not propagate from the blast point.
  • Fixed an issue where entity logic might sometimes continue occurring even while editing.
  • Teleporting between maps using a world teleporter that points to a non-existent anchor will no longer crash a game, instead print some useful error information.
  • Teleporting between maps now sets all entities to the same z-index as the anchor they are targeting.
  • Fixed a crash when getting a target anchor's position.
  • Fixed quest nodes not recalling some information into their respective textboxes in the editor.
  • Quest node descriptions, required maps and display names now save automatically when going between maps as well as when clicking Save or pressing Enter.
  • Fixed some crashes when loading incorrectly-saved quest data from disk.
  • TODO: globally remember links between maps to make it easier to know what to link to where.

0.6.4 alpha (24/05/17):

  • The rendering performance of the engine has been dramatically improved by better detecting what is and is not on-screen. (for anyone interested: frame times went from 15-20 ms on my laptop to 0-1 on the same map)
  • More debugging information has been added - frame times can now be displayed, as well as counts of drawn tiles and drawn entities.
  • The controls for the editor have been moved to a new Toolbar container class - there's no immediately visible change, but it makes it far easier to lay out and add tools to it in the future.
  • Control anchoring works correctly now.
  • Fixed an issue where getting the mouse coordinates for the centre of screen was offset too much.
  • Dragging entities from the entity spawn window now spawns them where the mouse was released instead of on the centre of the screen.
  • The map view no longer pans when a user is dragging something.
  • The map view won't drag entities or nodes when a user is dragging data around.

0.6.32 alpha (19/05/17):

  • breakable object now supports far more options for what to do when it breaks. It can now emit a particle effect and shatter, or only one of the two. They can also specify whether they should not disappear immediately after breaking, and setting a timeout of -1 means that they will never be removed from the map.
  • The flammability and fire resistance values of a material can now be changed from the material editor.
  • The thrown explosive item behaviour no longer triggers on mouse releases.

0.6.31 alpha (18/05/17):

  • It is now possible to spawn an entity by dragging their classname from the editor's spawn window onto the Orthographic map view. A new, nameless instance of the entity will be created in the centre of the screen.
  • Vehicles now re-spawn in the correct position - they were being pulled by their wheels as the wheels were being spawned first. They should now be exactly where you left them in the editor.
  • Dragging vehicles but having their wheels not follow seems to have been fixed.
  • Fixed a bug where all tab controls were allowing tab detachment despite their setting.
  • Fixed a potential crash where a vehicle's wheels had not been spawned correctly and rendering them would fail.
  • Added the ent_getloc console command for debugging purposes.

0.6.3 alpha (17/05/17):

  • Region loading and unloading when a map is being run at an arbitrary scale is far more stable now.
  • Rendering maps at arbitrary scale works better - chunks are now shown to fill the screen even if it exceeds the defined render threshold.
  • Jumping between chunks from the overview window works correctly now at arbitrary scales.
  • bug: mouse highlighting is still a bit off with scales for a reason that I can't pinpoint.
  • TextBox styles have been updated to look nicer and more responsive to mouse input. The specified border colour is also restored when the mouse exits the control instead of the default black.
    The new editor zoom interface.
  • Slider objects now display differently when they are highlighted under the mouse.
  • Sliders now support having text to display along each step, supplied via an array of String objects.
  • The alignment of a Slider drag bar has been improved.
  • The edit view zoom interface has been updated to work properly and give the user a beter idea of what is going on.
  • The editor view scale can be set with a new TextBox added to the zoom interface.
  • Fixed hooked particle effects carrying over between maps and freezing.
  • Fixed a crash when loading a particle emitter that points to a non-existent effect.
  • The map editing view's camera can be scrolled up and down with a scroll wheel.
  • Holding the Control key and scrolling up or down will allow you to zoom without using the zoom tool.

0.6.24 alpha (16/05/17):

  • Map loading is more reliable (there is an annoying bug where chunks don't load properly after map_load is called but it shouldn't happen at all any more).
  • Panning with scaled maps works correctly.
  • A game window width and height can be overridden via launch parameters: -w <width> and -h <height>.

0.6.23 alpha (15/05/17):

  • Any class extending BaseEntity can now override a method to handle when its health reaches a value below zero for the first time.
  • For maps that are only one layer deep, setting the layer to be visible in the map editor's layer list is no longer a requirement to be able to see anything at all.
  • Items can now handle events based on whether the mouse is pressed or depressed.
  • ItemBehaviours now have access to the state of the mouse press - namely, events like charging a weapon before shooting it are now possible.
  • Equip regions store references to their created behaviour objects to make things easier to clean up and to access from anywhere.
  • Map layer names can now be changed by double-clicking them in the layer list.

0.6.22 alpha (14/05/17):

  • World Damage Objects can now be specified as being rays and be given an endpoint.

0.6.21 alpha (10/05/17):

  • The default path-finding implementation has been improved and should no longer cause crashes or infinite loops when multiple AIs try to construct paths at once - instance variables were hanging around between iterations that would cause these issues, or result in links being ignored in some cases. The solution was to reset most of the state variables between iterations of the algorithm, and re-retrieve a node's neighbours each time they are requested.
  • Fixed VRF data carrying over between maps again. It wasn't being reset if a target map lacked a saved hierarchy.
  • I found out that you can change thread names in Java so I went ahead and gave the game loop a better name. Should help debugging if we know what thread crashed.

0.6.2 alpha (09/05/17):

  • Drag-and-drop functionality has now been added to some controls. The acceptance of drag data can be set per-control by setting the acceptMSDragData flag, else a prohibited sign will be shown when trying to drag something into the given control.
  • Data can now be dragged between windows.
  • Directory list-boxes allow dragging and dropping from any Virtual Resource Folder to any other Virtual Resource Folder if their content types are compatible.
  • The tile-set picker allows dragging and dropping of definitions into other folders.
  • Directory navigators allow navigation by dragging items onto folders in their hierarchy list.
  • Adding a tile definition updates the tile list immediately.
  • Refreshing the tile viewpanel retains the directory that it's in instead of going back to the root.

0.6.11 alpha (08/05/17):

  • Tile clones can now be created - that is, versions of a tile definition that are flipped or rotated or both, which use another tile definition's source image.
  • Map bookmarks work correctly now - they pan the edit view and don't error any more if you haven't selected the coordinate cell.
  • The tileset picker is scrollable now. I thought it was before, oops.
  • Tile definitions now support having their texture flipped and/or rotated by 90, 180 or 270 degrees.

0.6.1 alpha (07/05/17):

  • Particles now support being textured from a texture atlas.
  • The Texture effect modifier has been added and allows control over atlas sample regions and sizes.
  • User-defined AINode types are now visible in the map editor. Previously they weren't being added to the combo box.

0.6.02 alpha (05/05/17):

  • The console now outputs the command that the user typed in as well as any output resulting from it.
  • activeFX is used as a command to monitor the status of active particle effects in the world.
  • A vehicle class can now specify if its wheels fall off when it sustains enough damage.
  • A vehicle class can specify if it should explode when it is damaged enough.
  • A vehicle class can specify if the vehicle body should catch fire once it is killed.
  • A vehicle class can specify a particle effect and sound to create when it is killed.
  • Particle effect modifiers now have access to the emitter that created the particle that they're modifying.
  • A couple more variables were added to the VelocityAngle modifier.
  • A test camera interpolation mode has been added to smooth out panning.
  • Fixed an issue where the default button strip would be visible beneath an editor view panel that specified they shouldn't show.
  • Fixed a bug with particle emitters where they would not successfully mark as finished.
  • The particle manager no longer removes effect hooks when the map editor is open - this is so effects can continue properly even if they technically finish.
  • Fixed a bug where the total amount of particles for an effect wouldn't load correctly from its definition file - I was setting the wrong variable :/
  • Fixed a crash with a missing vehicle class folder that would cause crashes at startup.
  • The CameraShaker entity has been added, which allows controlling an offset to the camera to make the world appear to shake.

0.6.01 alpha (02/05/17):

  • Loading and creating maps is more efficient now. Cycles are no longer wasted on trying to destroy tile bodies that were never there - oops.
  • Fixed tileset VRFs carrying over between maps.

0.6.0 alpha (28/04/17):

I'd call this my first major update. I even had a plan for what I wanted in it.

  • An item can now override variables for its given item behaviour objects
  • The item editor now provides a way to specify item-specific overrides for given behaviours:
Overriding behaviour variables for a test grenade.
  • Items save and load modifier overrides
  • Illegal colour parameters for particle effects should no longer occur as their values are now clamped
  • Particle effects are now no longer tied to entities
  • A modifier variable can now have its type changed after creation
  • A modifier variable's type can now be retrieved
  • A tile definition can now specify a speed multiplier for entities that stand upon it
  • A tile definition can now inflict a configurable amount of damage per second on entities that stand on it
  • A tile definition can now nudge an actor standing on it in the specified direction, with the specified velocity. this prevents the entity from setting its own velocity while the effect is applied.
  • The texture browser now supports Virtual Resource Folders, as does the underlying texture system
  • Texture names can now be changed after they are added
  • A panel can specify to not draw its background (if it’s just used for placement)
  • Resource tabs can be opened in their own windows
  • Tab pages can now be undocked from a parent tab and opened in their own window, if enabled:
Some new capabilities for the window manager.
  • A tab control can specify a tab undocking threshold (amount to drag before a tab undocks)
  • Closing a tab page window re-adds it in the correct location
  • The quest tree finally loads at startup
  • Decals finally save and load to and from a dictionary file
  • A decal view has been added to the resource window
  • The decal editor allows changing of definition names and won't allow saving if a decal contains no images
  • The Thrown Explosive behaviour allows specification of a decal to use through an overridable modifier. it creates a decal at the point where its projectile exploded.
  • Decals seem to work as intended but were never announced as a feature before, so here they are
  • VRF trees are now saved and loaded
  • Tileset VRFs are loaded and saved when a map changes
  • Other VRF-supporting managers save their structures automatically upon map change, map save, or engine exit
  • The VRFOperationSupport interface has been added to mark a manager as supporting VRF operations and adding it to the automatic saving mechanisms. Load mechanisms must be called on their own, as readiness is not the same for every one of them.
  • Maps report to the game console whether any named properties were missing required values
  • Layer visibility is now saved and can be toggled outside of the editor (no in-engine way exists to do this yet, but maps store their own layer visibility)
  • Fixed the reflection checkbox not showing the intensity field
  • Breakable objects use less memory now (they don't store a texture fragment, insted they sample directly from their parent object's texture
  • Editor view panels don't render their backgrounds (saves more cycles)
  • Fixed null pointer exception when getting entity position before it is properly initialised


0.5.4 alpha (24/04/17):

  • Reflection for tile definitions has been re-enabled and works correctly. Enabling this feature results in tiles reflecting a map's sky texture with varying intensity (0.0 - 1.0).
  • A map can specify a sky as a texture.
  • An ItemBehaviour for thrown explosives has been added to the base library of behaviours. Thrown explosives are now possible.
  • Items can now have their behaviours changed in the item editor.
  • Fixed a bug where marking an item as a weapon where it previously wouldn't would ignore the change.
  • Editing item prototypes is handled a lot less stupidly in the engine now.
  • A Table can now specify a message to draw if it is empty, as well as a location for it. It will also not draw lines for the columns.
  • Fixed tables returning 0 as the value for all empty text boxes when it was supposed to be only numeric cells.

0.5.32 alpha (19/04/17):

  • Batch adding tiles is now a possibility, and a button to bring up the window for this has been added to the tileset viewpanel.
  • Texture objects load far more reliably now, using the same mechanism as tile definitions.
  • Texture objects save their paths with the system-agnostic path separator.
  • Fixed a silly bug where textures would continuously try to load themselves and swallow exceptions each time their data was requested. Hopefully this should result in improved performance when textures are missing.

0.5.31 alpha (17/04/17):

  • Fixed a strange Table exception when trying to click on rows.
  • Oddities with steering after changing a vehicle's class have been fixed (it wasn't re-assigning a wheel to test the angle of).
  • Began work on implementing the occupant position input hook feature.
  • Vehicle positions hooking their given actor's item events is now implemented. For example, you could now have a gun as part of a car. Or two, or three. I did.
  • ItemBehaviours now accept an x, y and angle offset in their execute function.

0.5.3 alpha (16/04/17):

  • Vehicle classes load and save correctly from disk.
  • A BaseVehicle saves its assigned vehicle class.
  • A BaseVehicle handles class changes during runtime better now.
  • The entity spawn window is more stable now.

0.5.25 alpha (14/04/17):

  • Isometric panning no longer jumps when using the pan tool.
  • Spinners return their value correctly all the time now.
  • The isometric renderer correctly uses the map scale.
  • Fixed a missing label for the map creation interface.
  • Filling chunks from the overview is easier to do (you can use the fill button now).

0.5.24 alpha (11/04/17):

  • Vehicles have been re-worked to support more physically-accurate driving simulation, now using wheels to steer and allowing for skid and configurable handling capability.
  • Vehicles now properly support having multiple occupant positions.
  • Item textures render correctly in-game.
  • The Entity Manager no longer accepts blank targetnames.
  • Work has started on vehicle classes which will make it far easier to build different vehicles for use in games.
  • Trying to make the camera pan correctly with arbitrary scales and it sort of works.
  • TODO: Quests still don't read from disk yet, sorry.

0.5.23 alpha (09/04/17):

  • A scripted sequence event will now notify if it is being asked to affect a non-actor entity.
  • Drop shadows have been re-enabled and work with top-down entities now.
  • Issues with the instance editor not saving updated values from checkboxes have been fixed.

0.5.22 alpha (08/04/17):

  • A "Move To" script event can specify start and end indices of the chosen movement path for greater control.
  • Collision avoidance behaviours don't avoid an object if it contains their target.
  • It is now possible to rotate an animation frame sprite inside the editor.
  • Fixed some issues where a scripted action wouldn't be saved. They now save automatically when you click "Test".

0.5.21 alpha (06/04/17):

  • Tiles at less than x=0 and y=0 are no longer highlighted when you mouse over them (to prevent confusion).
  • Scripted event objects can now control an actor's animations.
  • An AnimationInstance can now specify if it loops (they do by default) and give a loop quantity (-1 for non-ending loop).
  • Scripted event objects can now be re-ordered in the editor (moved up and down).

0.5.2 alpha (05/04/17):

  • The scripting system has been re-worked to allow for events to execute simultaneously, or to wait on other events to complete.
  • Scripted events can now specify an input to an entity as their action.
  • ComboBoxes can now specify whether they accept manual input as an option instead of just the pre-defined selections.
  • A TextBox is able to refuse input.
  • Double-clicking a TextBox selects all the text within it.
  • Loading a map resets the current pool of dialogue sentences to only have those defined within the map in it.

0.5.12 alpha (04/04/17):

  • Rendering performance should be improved overall. Thank you, Java2D debugging tools!

0.5.11 alpha (03/04/17):

  • Fixed some old entity data hanging around after a map has been loaded over another one.
  • You can now click to reset a marquee.
  • Marquee selection is a bit less quirky.
  • A BaseControl can now specify a LayoutAnchor to position itself relative to, and distance from, etc.
  • Fixed window icons appearing to be pressed down when a user clicks on them.
  • Right-clicking with the paint tool now allows you to pick from up to ten of your recent tileset selections, by showing a new control (TilesetStrip) which can be positioned to anywhere you like.
  • Holding shift while painting tiles now confines the tiles that can be painted to the same x & y values of the tile that painting started on.
    • a.k.a. it prevents drawing anything other than straight lines

0.5.1 alpha (29/03/17):

  • The quest prerequisite type has been integrated into the dialogue editor. A node is able to check if a quest is completed, failed, or started.
  • Fixed a crash while loading malformed dialogue data.
  • Fixed an incorrect constant in the dialogue editor.

0.5 alpha (28/03/17):

  • The foundations of the Quest System are mostly complete and an editor + debug window are working and stable.
    • Quest nodes can specify events for when they are begun, failed, and completed.
    • Quest nodes can also hook output events from any entity, or members of any entity class.
    • The quest tree can have any number of quest nodes, which can have any number of sub-nodes.
    • For debugging, the new commands qMarkA <questname> and qMarkD <questname> were added.
  • The QuestEventListener class has been added to allow a developer to hook into events from the quest system.
  • Participants in chains of events in the entity communication system can now find out the entity that started that chain off (the root cause).
  • Some change I made that I forgot about making at all seems to have fixed map load crashes where the prop format wasn't quite up to spec.


0.4.63 alpha (23/03/17):

  • Added the FilterComboBox class which allows searching of its elements.
  • The Entity Instance Editor now uses this FilterComboBox for output and input selection.
  • Updated the ComboBox style to make the button more apparent and appealing :)
  • Removed the black border from most controls and substituted it with a medium gray.
  • Increased the tab control header height a bit.
  • Fixed a null pointer exception when getting the selection from an empty list box.
  • Started work on the Quest System.

0.4.62 alpha (17/03/17):

  • Changed the way the engine receives and handles key input to fix a bug on MacOS Sierra, where all input would stop working after a couple of keystrokes.
  • Implemented basic collision avoidance behaviour for the MovementPath class, used by scripted sequences and default AI behaviour.

0.4.61 alpha (10/03/17):

  • Orthographic view supports passing inputs to entities that are under the mouse pointer by using the variable $pointer in place of a name.
  • $pointer can be used to target the entity under the mouse pointer akin to a variable.

0.4.6 alpha (9/03/17):

  • The isometric rendering module now handles perspective correctly and is capable of drawing textures properly now.
  • A new launch argument, -setup has been implemented to aid creating new projects. It launches a setup environment.
  • A setup environment has been implemented.
  • Trying to open the console when it's been disabled won't spit exceptions everywhere any more.
  • Changed the default progress bar colour to a nicer green.
  • The -game flag is no longer necessarily required, if you set the Game.GAME_NAME property in your code to the name of your desired resource folder, before calling anything else, the engine will know what to load.

0.4.59 alpha (7/03/17):

  • BaseActor movement code has been re-worked to use flags based on the currently held movement keys corresponding to the action of "Left", "Right", "Up" or "Down".
  • BaseActor movement with free angles now works correctly with acceleration to a target speed, instead of having the speed set immediately.
  • An actor will no longer act up when you let go of one of the movement keys while holding others, then pressing it again.
  • The Nodegraph correctly loads from disk and recreates compiled links.
  • Picking nodegraph nodes in the editor works correctly.
  • The order in which resources load has been tweaked as to make sure that necessary things are ready before an auto_executor fires its "Automatic" event.
  • Fixed the view position of the editor being out of sync when a map is loaded into it while editing.
  • Fixed blank sprite sets being sometimes erroneously added to the sprite manager.

0.4.58 alpha (5/03/17):

  • A tile can now be assigned a material to use when solid. This is primarily for the sound to make when another object hits it.
  • The engine can now play a sound when two objects hit one another, based on their materials.
  • Removing a sound from memory now removes it from the VRF hierarchy, too.
  • A BaseEntity can specify whether it should not be saved when the map is saved. This is useful for entities which spawn their own children for functionality when they're spawned.
  • Fixed a crash when clicking "Move" on a selection of 0x0 tiles.

0.4.57 alpha (2/03/17):

  • Fixed particles spawning with zero opacity when the age_fade parameter is not set.
  • Fixed issues with executing an auto.txt after the game loop is initialised.
  • If no state is currently open the back-buffer is cleared and the text "Loading..." is written on-screen as a fallback.
  • Added the circle_radius_variance property to the StartPosition_Circle effect modifier.
  • Added the age_fade_delay property to the Lifetime effect modifier to control the time in ms after which a particle will begin to fade to nothing.
  • The Fire entity has been implemented properly (it deals damage at a configurable rate now).
  • The BaseDamageObject has been added as an extensible way to deal damage to entities over time.
  • A BaseEntity can be set alight with the setOnFire input and extinguished with the extinguish input.
  • A ParticleEmitter can have a flag (emitMore) set which determines if it should continue emitting particles, in addition to the existing stopped flag. If set to true the particle emitter will stop itself from updating once no active particles remain.
  • If a BaseEntity touches an active fire it can be set on fire if its material's fire resistance is lower than a threshold and will remain on fire for a given number of seconds. The damage dealt and the rate at which it is dealt is determined by the fire that was touched.
  • Particles using additive blending render correctly on maps.
  • A BaseEntity can now respond to when it changes layers.
  • A material can now specify fire resistance and flammability.
  • An arbitrary player class name can be set in the Game class - this can be used to stop erroneous duplication of a custom player object when loading a map.

0.4.56 alpha (1/03/17):

  • Fixed a crash when loading a map through auto.txt.
  • Fixed an issue where the depth sort list would not be initialised with the correct amount of layers.
  • Paths to tileset textures are now stored with a platform-agnostic path separator (TileSet.AGNOSTIC_SEPARATOR) as opposed to the current system's path separator character. This should fix most instances of missing tile textures across separate platforms (tested on OS X and Windows).
  • If a tile texture fails to load, it will re-attempt by ensuring that the path is correct for the platform, before falling back to the missing texture image.
  • The beginnings of Fire were implemented into the engine.
  • Fixed a crash when loading a map for the first time of an engine instance where an entity had prior state.

0.4.55 alpha (28/02/17):

  • The item system has been largely re-written to support the concept of Item Behaviours, which are programmable actions that occur on a primary fire/secondary fire event, and can create and update their own instance objects, thus permitting events such as ranged attacks and melee. A few base behaviours (Projectile, RangeStab and RangeSwing) are available as part of the engine. Behaviours will be configurable in the Item Editor, as will their parameters (per-item).
  • The Sound Manager now saves and loads its dictionary of sounds.
  • The Sound Browser view panel now allows deletion of sounds from the dictionary.
  • A BaseActor can now have both rotation and movement disabled via flags.
  • An EquipRegion can now have its primary and secondary fire capabilities disabled. This gives the benefit of preventing a player from executing a move before a swing or animation is complete.
  • The engine can now be run stand-alone, albeit in a very limited initial state. A game data folder still needs to be specified in the launch arguments passed to the engine. No custom classes or behaviours will load, only resources and maps.
    • Blank slate behaviour is yet to be defined. I want to build some sort of menu and testbed environment, as well as a setup system of sorts for automating project creation.
  • Bringing up the Console with the tilde key won't insert that character into its input field any more.
  • The Bullet class has been renamed to WorldDamageObject. They function identically by default.
  • The bullet flag has been added to the WorldDamageObject class.
  • The vModel flag has been added too. It serves to get the renderer to draw the selected item's viewmodel in place of a projectile texture, at the viewmodel's defined size.
  • An EquipRegion can have its visibility toggled. Combined with a vModel WorldDamageObject, it can be used to create an effect where the viewmodel itself is being used as a weapon and simulated in the physics engine.

0.4.51 alpha (25/02/17):

  • The breakable_object class has been implemented into the engine. It displays as a normal object but can be destroyed/shatter if it sustains enough damage from bullets or other physics objects.
  • Fixed some issues with rendering ToolTips.
  • BUGFIX saving entities' custom widths and heights works correctly again.

0.4.5 alpha (23/02/17):

  • When selecting tiles with the marquee selection tool, a new right-click menu has been added:


  • Tiles, once selected, can now be cut, copied, copied without collision data, and moved around. Setting a group of tiles to be moved is functionally the same as cutting them, but the engine renders them as if they were still in the map.
  • Right-clicking with tiles in memory presents the following:


  • You can now paste tiles into a separate location and layer of the map once they are cut/copied/set to be moved.
  • BUGFIX: removing a tile's solidity attribute now works correctly. Their static tile bodies were never actually being removed, as a reference to said body was never stored after it was created.
  • Maps now render properly no matter the set view scale, and physics manipulation and picking works correctly too.

0.4.41 alpha (22/02/17):

  • layer_changer entity has been added. It moves both props and entities to a specified target layer when they come into contact with it.
  • The SpriteManager falls back to using the missing texture data file as opposed to trying to first load a sprite set when a given name is an empty string.
  • Tiles no longer render their physics bodies (if solid) in addition to the standard black rectangle in the editor.
  • The zoom slider in the edit view now works correctly. There are still some issues with zoomed views, however.
  • Two view toggles have been added to the edit view:
    • Draw physics models - whether, as well as any sprites/animations, to draw the vertices of any map bodies.
    • Fade layers above selected one - if the map has multiple layers, should any above it be drawn with transparency?
  • Layers above the currently selected layer in the map editor can now be drawn with transparency, if they're visible.

0.4.4 alpha (22/02/17):

  • Physics bodies are now depth-sorted between layers of tiles, and are rendered in the correct order.
  • Right-clicking a body now shows a menu to change the z-layer that it is on, if the map has more than one layer.
  • Solid tiles can now be on any layer of a map.
    • There is not yet a way to change the layer a body is on in-game. An object will be added that toggles objects on contact, for things like staircases.

0.4.31 alpha (21/02/17):

  • A sound browser has been added to the resource window. It allows importing and renaming of resources, as well as testing them.
  • Sounds can be imported into the sound dictionary with the Sound Import Window.
  • An EditorViewPanel can specify to hide the default Edit, Define and Delete buttons of the resource window.
  • Sprite sets now load into memory on demand.
  • Items can now specify sounds to play upon certain events.
  • A tab has been added to the Item Editor Window to edit the sounds items use.
  • A BaseEntity can now cause a named sound to emit from itself.
  • The DirectoryListBox can now rename and display folders and contents.
  • Bullets that stick no longer stick to the actor that created them.
  • BUGFIX Items now correctly save projectile speed data.
  • BUGFIX The texture picker doesn't jump when scrolling.
  • Fixed a null pointer exception when manipulating equip regions in rare cases.
  • BaseControl.addChildren has been implemented as a Java Vararg, which can add multiple BaseControls at once.
  • Loaded props are recreated with facing the angle they were saved as facing.
  • A world_sound can specify if the sound it references should be streamed into memory, and whether it is an ambient source (does not come from one particular point).
  • Finally fixed the cause of a sporadic crash when loading maps. It was due to a chunk being unloaded while the renderer was in the middle of accessing it in memory.

0.4.3 alpha (19/02/17):

  • The PaulsCode SoundSystem sound library has been implemented - work began on this months ago, but integration is complete and functional now.
  • The world_sound entity has been implemented.
  • The world_music entity has been implemented.
  • Within the console, it is now possible to execute inputs on an entity by doing this:
<entity_name>.<input> (parameters)
//for example: player.disableMovement true
  • A list of all known entity classes has been added to the spawn window, and can be filtered.

0.4.22 alpha (18/02/17):

  • The map view within the editing environment is now hardware-accelerated, like viewing the map in-game.
  • A window can specify whether to use its own buffer, or to use the engine's hardware-accelerated drawing surface, at the cost of some animation capabilities.
  • Menus are no longer treated as second-class citizens in the Window Manager, and now function exactly the same as any open window. The only difference is now that they do not come to the foreground when focused.
  • When picking objects in the editor, a list will be shown if more than one is present under the clicked point, instead of selecting the first one found automatically.
  • The "Sprite Sets" category has been added to the resource window, and the Sprite Set Editor has been made accessible. Sprite Sets cannot be loaded yet.
  • EquipRegions can specify if they affect an actor's still sprite or animation based on what's equipped in them.
  • The ent_equip console command has been added. It takes an ID and forces an entity to equip it if present in its inventory.
  • BaseActors now render with sprite sets, and support suffixes like those specified in item definitions.

0.4.21 alpha (17/02/17):

  • Joint editor displays the class (className for a BaseEntity or the definition name for a Prop) in the joint list for a selected body.
  • BasePhysicsObject now contains more methods for retrieving its owner's identifier.
  • Windowing and other key resources are now packaged within the engine's .JAR file, removing the need for them to be copied between projects.

0.4.2 alpha (16/02/17):

  • Joint editor support for Distance, Revolute and Weld joints is fully complete. Each parameter can be adjusted after their creation.
  • Joints, entities and props are all assigned unique IDs which persist through engine instances.
  • Joints persist through saving and loading.
  • A toggle has been added to the editing environment to control the rendering of joints.
  • Buttons appear to respond to being clicked by indenting their contents. This can be disabled with the ignoreMouseDown


0.4.11 alpha (10/02 - 13/02):

  • Joint editor added to the map editing environment. Supports creation and editing of Distance, Revolute and Weld joints, with the possibility of more to be added.
  • An element of a ListBox can be double-clicked to be copied to the engine's clipboard.
  • Dragging a control while the mouse is outside of a window's bounds now works correctly.
  • Utility commands deg_to_rad

and rad_to_deg

have been added to the console.

  • A BasePhysicsObject

can now print the name of its parent object, if supported, with the method getOwnerName()


  • A BasePhysicsObject

can now print its type, with getTypeString()


  • Fixed a crash when focusing windows.

0.4.1 alpha (09/02/17):

  • Fixed a bug where when rotating a physics object, it would appear to jump down a bit if its rotation came to 0.
  • Fixed a bug where painting tiles would sometimes paint one too far down.
  • Fixed a bug with rendering physics objects in the incorrect position relative to their models.
  • Fixed a bug with picking small, rotated physics objects.
  • Fixed a bug where a window could lose focus while being dragged, or having a dragging operation be performed on one of its children.
    • The Window Manager can now be said to be functionally complete.
  • The PickerTextBox

has been expanded to support any physics body. It has also gained a flag to only support picking entities (defaults to true as to preserve existing behaviour).

0.4 alpha (08/02/17):

  • Added the onPropTouch

output and propTouch

input to the BaseEntity


  • The BaseEntity

class now reliably stores resize information across sessions instead of resetting.

  • An output parameter can now specify $comb_0

or $comb_1

at the beginning. This has the effect of concatenating any built-in output with any user-specified output parameters.

    • $comb_0

has the result: <built_in output> <user-specified>

    • $comb_1

has the result: <user-specified> <built-in output>

  • The PropManipulator

entity class has been added, and features methods for managing spawned props in-game.


0.33.9 alpha (07/02/17):

  • The map editing environment's resource window has been replaced with the new resource window.
  • Fixed a crash when loading a map with solid tiles.
  • Fixed a crash when loading a map with a PlayerSpawnPoint


  • Fixed a crash with setting an improperly spawned BaseEntity

's position.

  • Added a capability to the BaseNPC

class to be able to pick up props.

  • The map resource window stays refreshed more reliably.
  • Props can now be cloned, and a clone window and button have been added.
  • Props can now specify if they are able to be picked up or not.
  • A BaseNPC

can pick up and punt props.

  • Fixed picking within the physics simulation when used by a rotated entity.
  • A Materials tab has been added to the map resource window.
  • The Material Editor window is now accessible again, and all materials can be saved to disk in the material dictionary file. They cannot yet be loaded.

0.33.8 alpha (06/02/17):

  • Active dialogues now properly support selecting random listed nodes.
  • Nodes with prerequisites are shown more clearly in the dialogue editor.
  • Props now support animations, using the OMNI


  • Loading animations as they are requested (in runtime) has been made more reliable.
  • Windows now no longer focus automatically when you mouse over them.
  • The tileset picker now displays the name of the tile definition under the mouse with a tooltip.
  • A BaseControl

can now override the location at which a ToolTip renders by setting the TooltipCX

and TooltipCY


  • A BaseControl

can now specify if its tooltip should follow the mouse cursor while it is receiving mouse focus.

  • Refresh buttons have been moved into a new class and use a unicode symbol instead of loading an image.

0.33.7 alpha (05/02/17):

  • Props can now be spawned via the prop panel in the resource window. They are placed in the centre of the screen for convenience, and a name can be specified.
  • Picking small, rotated objects has been made more reliable.
  • A prop loaded in from a map is now re-created with all the information it was saved with.
  • Editing dialogue node prerequisites no longer silently crashes in the background.
  • The dialogue variable editor now works correctly and shows previously declared fields.
  • The TextBox

control now has a "Select All" function.

  • Loading maps does not add a new VRF root for the tileset each time any more.
  • The statusbar in the editor now shows the tile co-ordinates of the mouse cursor.
  • Fixed a bug where a VRF root would no longer recognise itself as a root.
  • Fixed the scrollbar within the resource window texture list not showing correctly.
  • Fixed the padding of a tooltip being incorrect when showing on the left side of a control.
  • Updated the style of the minimize and close buttons, and added a tooltip to each.
  • Moved the functionality of the minimize button into a separate class.
  • Viewpanels now draw a separator line on their left side.

0.33.6 alpha (03/02/17):

  • Spawned props can now be resized.
  • The shift-drag resize amount has been changed from 0.25 to 0.1, as 0.25m was not precise enough.
  • Clicking on props in the editor now gives a proper toolbar for managing them (resize, delete tools). Their information (name, prop definition and ID) is also shown on the status bar, much like an entity's would be.
  • An entity's classname is now correctly shown in the info label on the status bar.
  • Spawned props and projectiles are fully removed from memory on a map change.
  • Spawned props can be written to and loaded from disk as part of a map now. BUG - the physics body type is not persistent, yet. They default to static, immovable bodies.
  • The res_verboselevel

command has been added to dictate the amount of messages from the Resource Loader and Map Loader that should be logged to the Console for the user to see.

0.33.5 alpha (02/02/17):

  • Doors can now be of the SLIDE

(11) or SWING

(12) type - Swinging doors can be moved around, though, so they would need to be joined to something to stay fixed.

  • Doors now have the open_angle


  • Fixed a bug where once you focused on the close button of a window while it was minimized, it would be the only control to be clickable.
  • Using an entity_mover

class on an entity that has been improperly spawned will not cause a crash any more.

  • The active effects tab of the Map Particle Effect Editor window has been completed and has options for toggling emissions, killing an entity, editing it, or editing its effect definition.
  • Props can now be written to disk, and a prop dictionary is written every time a prop is defined or destroyed.
  • A prop view panel has been added to the new resource window. For the first time, props can be edited after being defined.

0.33.4 alpha (01/02/17):

  • Properties have been added to the Item class that allow a user to specify if a projectile fired by it sticks when it hits something.
  • A bullet can stick to Tiles, Entities, and Tiles & Entities, or nothing (as specified in the item editor).
  • New items are automatically given the first free ID as opposed to 0


  • A button has been added to the edit view toolbar to delete all active bullets and decals from the map.
  • Entities can now be cloned with a new tool.
  • Items spawned through the Items tab are now placed at the mouse cursor automatically, as opposed to (1, 1)


0.33.3 alpha (25/01/17):

  • Items now have a simple method to calculate the endpoint of their viewmodel in world-space.
  • Fixed some crashes that may occur during loading maps from disk after a map has already been loaded.
  • TextBox

objects can now display an error icon and error text that is visible when the error icon is moused over.

  • TextBox

objects contain a convenience method to check if their contents are numeric or not.

  • The map editing environment's toolbar has had some more re-arranging done - the Chunk Grid button has been removed, as well as the Toggle Weather button (it has been added to the view options panel).
  • The view options panel can be toggled with the 'v' key.
  • Particle effects can be spawned into the world through a new map particle effect manager - previously, they could only be spawned with the spawn

command and did not save any kind of information about their state (effect name, whether or not it was stopped). It will also allow easier managing of existing effects when completed.

0.33.2 alpha (24/01/17):

  • The entity tool window that used to pop up when clicking on an entity has now been integrated into the main toolbar, and has also been removed from the codebase.
  • The status bar down the bottom of the screen now allows for messages to be shown while in the editor, for example, instructions or tips.
  • The map doesn't appear to exist!

error message has been made a bit more verbose.

  • A tool to resize entities has been implemented. If an entity has been resized, it will store the new w

and h

values when written to disk.

  • Minimized window controls no longer hog keyboard focus - this means that selecting tools with keyboard shortcuts should be more reliable. It also fixes the bug of a minimized window re-opening if you click anywhere on the titlebar.
  • Tooltips show correctly for children of controls that belong to a Menu object.
  • TextBoxes use a text cursor now.

0.33.1 alpha (23/01/17):

  • You can now click or drag to toggle tile solidity in the map editor.
  • Entities now support being resized in the editor, a resize tool will be added soon.
  • The paint tool can now be used by clicking instead of only dragging.
  • The redundant map_grid

command has been removed.

  • Old editing environment windows were removed from the codebase and can no longer be used.
  • The icon for deleting an entity was updated.
  • BUGFIX Using the eraser on a marquee selection of tiles will now actually erase them, as opposed to filling them.

0.33 alpha (20/01/17):

  • The concept of Virtual Resource Folders has been introduced (currently only for the Tileset and may be extended to other things), which allows organising resources into folders and easily browsing them.
  • The TileSetPicker

has been updated to support VRFs.

  • The FolderNavigator

class has been introduced to have a consistent UI tool to traverse directory structures.

  • Any control extending the BaseControl

class can now receive double-click events, and the speed at which two successive clicks is registered as a double-click can be changed with the console variable "dblck_interval <ms>"


  • The TileSetPicker

now uses correct padding for its elements.

  • The DirectoryListBox

has been implemented to allow for browsing of VRF directory structures.

  • The new Map Resource Window has a tab for browsing the VRF tree, as well as adding, removing, renaming, and moving individual folders.
  • Erasing a tile now resets its solidity.

0.32.5 alpha (19/01/17):

  • The ItemDrop

entity can now have picking up disabled via a flag or an input, and triggers an OnPickupAttemptFailed

event in that case.

0.32.5 alpha (14/01/17, 16/01/17):

  • The item class stores a reference to its texture as to reduce the time needed to find textures in the dictionary.
  • The Item Editor Window now has previews for item textures.
  • The Table class had a helper method added to quickly change the bound action listener of all cells, as well as any new ones.
  • The filter()

method of a ListBox now functions correctly.

  • Getting relative paths to the classpath using the toolkit method should now produce consistent paths across platforms.
  • Particle effects can now be read from disk, and are saved into a dictionary which is loaded when the engine loads. A tab for viewing and filtering them has been added to the new map resource window.
  • Currently, the engine loads all known effects when it starts, but if this causes problems an option will be added.

0.32.4 alpha (13/01/17):

  • When attempting to close the engine while editing a map, a prompt will be shown asking to save the map before the game shuts down.
  • Clearing or filling chunks from the Map Overview Window no longer reallocates an entire chunk's worth of tiles each time one of those operations is performed.
  • Clearing or filling chunks from the Map Overview Window only performs said action on the selected map layer.
  • Saving a map using map write

or the Save command now shows progress in the progress bar, and the window closes when the job is done.

0.32.4 alpha (12/01/17):

  • Beginnings of the BaseTimeline

class which will serve as the base of every editor window that requires the use of a timeline view (e.g. credit rolls, screens, scripted sequences).

  • Currently supports a list and grid view, as well as compact and full event styles.
  • The map layer list drop-down now has two buttons - "Set All Visible" and "Select Inverse" - for toggling visible layers quicker.
  • The map edit view now has a drop-down to quickly access view options - currently to disable any active map and tile render hooks, and toggle the visibility of entities.
  • Selecting tools with number keys in the editor works again.
  • Performing commands within the editor that require a meta key (e.g. Ctrl-S, Ctrl-O, Ctrl-N) now work for the first time ever.
  • CheckBox objects now use the visual style from the layer list check-boxes by default.
  • ComboBox drop-down buttons now render their arrows correctly.
  • Tooltips belonging to controls that are a child of a Menu object now render in the correct location.
  • Opening the decal editor will no longer cause a crash.
  • Map entity list now allows access to the entity instance editor and kill entity functions, as well as centering the camera on a selected entity's location.

0.32.3 alpha (04/01/17):

  • Editor resource window rebuilt as the code was a buggy, unmaintainable mess. It now uses a new class in the windowing toolkit called EditorViewPanel

- a developer can create their own and easily add them to this very same resource window to streamline workflow.

  • Particle effects can now be named and saved to disk. they cannot yet be read, and a particle effect dictionary must be implemented.

0.32.2 alpha (31/12/16, 01/01/17):

  • The Comparator

class can now compare two values passed in via an input.

  • More entities added to the editor's spawn window.
  • BUGFIX Window manager does not open windows twice any more.
  • BUGFIX Window manager permits repeated clicking of one point on the screen again.

0.32.1 alpha (29/12/16):

  • BUGFIX Scripted actions will no longer crash on empty targetnames.
  • The 'use item primary' and 'use item secondary' actions allow for a time to be specified (the amount of time in milliseconds that the item should be used for).

0.32 alpha (28/12/16):

  • Scripted motion paths can now specify free rotation between points, so an actor will turn to face it without being confined to Left, Right, Up and Down.
  • Window screenshots are possible through using the window_screenshot

console command, and clicking on any open window. They will then be opened in a preview window. bug - this does not capture window borders as they are not drawn to the window buffer

  • Region files are now able to store more than one layer on the z-axis.
  • The map editing view has been updated with a drop-down menu that allows for toggling the visibility of layers, and selecting the layer to be edited.

0.31 alpha

  • Rewrite of the isometric renderer to minimise draw calls.
  • Added support to the isometric renderer for arbitrary chunk depth, and map streaming.
  • A BaseActor

now has flags to allow for it to face any angle, apart from the base directions of Left, Right, Up and Down, as well as face the mouse pointer ( faceMousePointer


  • A BaseActor

can set the topDown

flag, which disables directional animations and uses their omni components by default.

  • The mouse_look

console variable has been introduced for testing with the default Player object.

0.3 alpha

  • The particle system introduced at the start of 2016 was re-written and now allows for far more flexible particle effect creation.
  • A visual particle editor was added, that works through use of modifiers which can be added and removed per-effect, at will. Each modifier contains its own variables ( ModifierVariable

s) which are applied when a particle is spawned. A programmer can create their own particle effect modifiers, too, by extending the Modifier


  • An extension to the Java Graphics2D library - an additive blending composite for particle effects which gives a more realistic colour blending result, and can be toggled per-effect.
  • The Window Manager was updated to a compositing-style renderer - each window object is drawn to a buffer object which increases memory usage slightly, but allows more control over the appearance of a window and the possibility of window animations. A minimize and opening animation were added as part of a proof-of-concept.


These versions weren't given changelogs (I regret this) but I was posting some information on the engine's Facebook page.

0.25 alpha (19/10/16):

  • A partially-functioning isometric map view, with editing and lighting
  • Further integration of the map editing environment, toggle between isometric and orthographic view for maps that support it
  • A compositing window manager with support for window and control animations too, as well as further control over a window's appearance
  • A window schema editor to allow for simpler UI designing
  • Custom tile and map render hook capability (will be used in a forthcoming tech demo)
  • Better handling of user input
  • Implementation of a positional sound system (which then lay un-touched until 0.4)
  • Improvements to the Heads-Up-Display system
  • UI redesigns
  • the addition of basic AI frameworks, including the ability to create and manipulate nodegraphs, and the inclusion of a simple pathfinding routine. Nodes can be weighted and use the A* algorithm by default.

some time in 2016

  • A credits system, managed by entities
  • Support for screen overlays and a ScreenFade entity
  • Implementation of a train system that can have unlimited tracks, each of which can toggle between a default and alternate 'next' point. The BaseTrain entity follows these tracks at a set speed.
  • I added a GodRay entity and caster, with configurable gradients and colours.
  • Doors (lockable, only openable once, etc…)

22 January 2016

  • Dynamic lighting support
  • Vehicle support
  • Integration of a fully-fledged physics engine (this was where I added Box2D - previously, I was using grids)
  • The ability to create props out of custom polygons through use of a built-in editor
  • The ability to interact with objects in the world via 'use' actions

23 October 2015

  • Maps can be written to and loaded from, using a specially designed compression algorithm to reduce chunk sizes (version 1). They weigh in at about 100-200 bytes each, but I'd say could grow up to 500 bytes-1KB once more complex map designs are used.

  *currently maps can only be saved and loaded via the console.

  • Map data is saved as well, and is loaded from each map's individual "info.txt", allowing for values such as size, background and certain elements of the editor's state to persist.
  • Addition of a map creation dialog box, allows for specification of size, base ID and name, although sizes too large will hog memory as the engine currently holds all chunks in memory.
  • Addition of a spawn window to allow addition of entities without use of the console, shows a list of all defined entity classes and allows specifying of a target name.
  • Further implementation of the entity instance editor , allows properties of any selected entity to be changed, but currently changes cannot be saved. Lists properties in order of inheritance from the class hierarchy. In case of a boolean shows a combo box, otherwise all values can be input as text, and the parentname variable allows use of a picker.

20 October 2015

  • Implemented ability to set custom key bindings, including resetting all and individual bindings to defaults.
  • Ability to toggle console access as a setting
  • Game states partially implemented, each have their own update and render capabilities:
  1. Intro state, used for things like splash screens, can specify image path, duration and fade duration in the <game dir>/introdata.txt file, screens can be skipped with the spacebar.
  2. Load state, can be used to render an image and any progress-related controls while the game loads things in the background
  • Table columns can be resized by dragging
  • Table values can be manipulated through indices
  • Windows no longer lose focus while dragging
  • Addition of a Key Binding text box - supports a single key input and fires when a key is pressed

18 October 2015

  • implementing more rendering options (background frame limit, power saving mode, text anti-aliasing toggle, general anti-aliasing toggle, and interpolation options)
  • addition of a Table class to the UI toolkit for designing complex multi-control layouts
  • addition of a Picker text box to allow for simplified picking of entities in the world editor.

September 2015

I found this version and I remember it being around September 2015 before I reset progress on the engine into the current version. This is the last remaining build of that version from before then.

  • Entity movement and collisions
  • Chunk-based worlds
  • Tile collisions

ancient bioshrek.PNG

August 2013

The first dated usage of the name "Morningside Engine". It was little more than a window manager and skeletal animation system. None of the old code survived.

ancient morningside.PNG