Downloads containing Changelog.txt

Name Author Game Mode Rating
Multi-Layer Level Editor...Featured Download Violet CLM Utility 9.6 Download file

File preview

January 2, 2023 (2.19):
-Added a "Generate" button next to the "CmdLnArgs" field in Level
Properties, to reduce user time spent looking up exact arguments.
-Fixed glitch of reading wrong layer speed models for some layers in levels
saved in earlier versions of MLLE.
-Trying to save a level with one or more layers using the Mapping or
Translucent Mapping sprite modes, if the level defines no extra palettes
for them to use, now shows a warning message.
-The "Help" dropdown menu now has some potentially useful links.

December 17, 2022 (2.18):
-Lots of new layer properties for JJ2+ levels, mostly for textured layers.
(The window had to be rearranged to make room for them all.)
-New drawing option button for JJ2+ levels, "Events Snap to Tile Grid."
When this button is turned off, you may place events at any pixel in layer
4, not just the centers of tiles, including placing multiple events in a
single tile.
---Events that do not normally spawn objects, such as "One Way Floor" or
"Frog Morph," will generally not work right when placed as non-snapping
events, but MLLE will still let you place them in case your level script
makes that useful.
---Not all objects will necessarily work perfectly when placed this way: in
particular, crates may use the wrong event parameters when destroyed. MOST
objects should be okay, though.
---All interaction with the tileset and placing tiles is disabled while
Events Snap to Tile Grid is turned off.
---Implementation note: in levels with one or more non-snapping events,
MLLE will edit the value of jjObjectPresets[254].behavior and will hide one
or more instances of event 254 in the top left of the .j2l's event map.
-JJ2+ levels may define multiple palettes instead of just one, in case you
want to have different palettes at different times/places in the level,
e.g. a day-night cycle. These may be accessed using the "jjPAL@
MLLE::GetPalette(string name)" function, or if you want to use the extra
palettes for SPRITE::MAPPING, "uint8 MLLE::GetPaletteMappingID(string
name)" instead.
-New checkbox in the "Level Palette" window to disable the behavior of
custom palettes reverting upon death in single player games. Defaults to
true for new levels but false for old levels.
-New "WeaponHookPrefix" field in the "JJ2+ Properties -> Level
Properties..." window, for use in levels featuring scripts that send
packets between server and clients, but also featuring one or more custom
weapons that need to be able to send packets too without inviting
-When "stijn vision" is enabled, objects in the tree view in the event
setup window now preview their sprites.
-The Tab key may now be used to drag the level layout pane around, just
like in JCS.
-In local games, the "Missing Objects" ammo crates are now properly solid
for purposes of pushing other solid objects against or onto them.
-2.15's "SaveAndRunArgs" script comments are now editable inside the "Edit
-> Level Properties..." window for JJ2+ levels, labeled "CmdLnArgs," so
you don't have to open up a text editor. Note that this only works to set
arguments when running levels from within MLLE, not from e.g. JJ2's server
setup menu.
-New "Paste and Recolor" dropdown menu option in the tile image editing
-2.17's new Preferences option has been renamed to "'B' returns to normal
mode," as it also works to re-enable Events Snap to Tile Grid.
-Fixed errors from loading multiple instances of MLLE in quick succession
(thanks Seren)
-Level filenames longer than JJ2 supports are no longer allowed (thanks
-Improved handling of 0x202 (1.23) levels using 0x201 (1.24) tilesets
(thanks grovespaz)
-Fixed glitchy saving of levels with edited JJ2+ layer properties (e.g.
sprite mode) but no other JJ2+ features.
-Fixed the animated tile editor still being visible in smart tile mode.
-Fixed error message shown when loading .LEV files

October 28, 2021 (2.17a):
-Fixed mistake in 2.16 that led to levels using the MLLE-Include library
being saved with one incorrect #pragma require line, causing them to be
unloadable by multiplayer clients in some circumstances.

October 19, 2021 (2.17):
-New "stijn vision" option in Preferences to show sprite previews of most
events in the level layout pane. This has only limited support for custom
(scripted) objects and effects, and no support for AGA levels at all; I'm
waiting to see how popular the mode is before deciding whether to dedicate
more development time to it.
---This function (name) funded by stijn's generous donation of $20 or so!
-New option in Preferences to have pressing 'B' disable smart tile mode
while hovering over the level layout pane.
-Better detection of whether tile images/masks have actually been modified
by pasting/automasking.
-Context menu from right-clicking the tileset pane now distinguishes more
between single tile effects vs. selection area effects, and additionally
adds "Type" and "Reset" as selection options.
-When you start a new level and save it, that level will now be added to
the "File->Recent Levels" list.
-Repaired tile number readout in the bottom toolbar when hovering over the
tileset pane.
-Clarified some error messages that may pop up when trying to load certain

May 15, 2021 (2.16):
-Fixed crash from resizing layers with no tiles.
-Fixed handling of #include'd script libraries in folders other than the
level's folder when packaging .ZIP files.
-Fixed saving to not overwrite .j2as files unless their contents have
-Fixed sporadic crash from closing MLLE immediately after opening it.
(thanks grovespaz)
-Fixed sporadic crash from clicking and dragging the mouse upwards out of
bounds from the level layout pane. (thanks grovespaz)
-Fixed inappropriate tile placement from clicking and dragging the mouse
leftwards out of bounds from the level layout pane.
-Fixed behavior of editing a level, not saving, then opening a level from
File->Recent Levels. (thanks redkevvy)
-Fixed behavior of editing a level, not saving, clicking File->New, then
clicking Cancel.
-Fixed placing events in Animaniacs levels. (thanks Assassin)
-Fixed completely random tab orders in many subwindows.

August 19, 2020 (2.15):
-Added "Copy Image" and "Paste Image" options to the right-click dropdown
menu in the tileset pane of the main window. These are available only if
you have at least one tile selected there, and allow you to transfer
multiple tile images at once between MLLE and graphics programs.
---Upon pasting back into MLLE, options to recolor the tiles will be
---You may paste an any-sized image into an any-sized tile selection, but
MLLE will ask you if you're sure you want to resize it.
-You may now write a Doxygen-like "SaveAndRunArgs" comment line in a .j2as
file to choose what command line arguments should be used when using Save
& Run (Ctrl+R) in a particular level. For example, this line might be
appropriate for an CTF map you're working on:
///@SaveAndRunArgs -server -capture
---This line, if present in a .j2as, overrides anything you may have
written in the [Enableable]SaveAndRunArgs field in the game's MLLEProfile
.ini file.
-Improved display of smart tiles in the tileset pane of the main window.
-The color selection dialog for changing the fade color of textured
backgrounds now opens with the current color instead of always black.
-Resizing layers with no tiles (except for layer 4) no longer asks you how
you want to align the resized layer.
-Fixed glitch of the level layout pane's scrollbars sometimes getting
confused and not letting you scroll all the way down. (thanks jgke)
-Fixed glitch of MLLE reacting to your pressing Shift while other windows
(e.g. JJ2) were the active window.
-Fixed crashes from clicking the add rule (+) button in the Define Smart
Tiles window before selecting an assignment.

March 29, 2020 (2.14):
-New super-fast way of laying out levels: smart tiles automatically tile
themselves instead of making you hunt all through the tileset for just the
right connecting piece. For example, drawing a filled rectangle using the
Walls smart tile in Diamondus will automatically put grass on top, put
walls on the side, include a random sprinkling of gems, respect slopes, and
so on. To use, open up the "overlay data" dropdown for tilesets (to the
right of the "Set..." button) and select "Smart Tiles," which replaces the
normal tileset display with a selection of all the smart tiles associated
with the current tileset/s. (If you don't see this option, you are not
using a tileset with smart tiles defined for it; see below.)
---Smart tiles make their best guesses for what you are intending to do but
cannot reasonably predict every possibility; some manual touchup may still
be required after drawing out an area in smart tile mode. Most eyecandy
features (e.g. bushes in Jungle) and certain complicated structures (e.g.
slopes in Psych) cannot reasonably be automated and you will need to add
them yourself. Once you do, though, MLLE should happily let you draw around
those features without overwriting them.
---When you replace a tile in smart tile mode, the surrounding eight tiles
will all update themselves to take their new neighbor into account. (Unless
this crosses selection boundaries.) Some tilesets have certain complicated
interactions that can take two or three passes before they finish
resolving, though, so if an area is tiling wrong, try clicking on it
another couple of times and it will usually resolve itself, unless the
issue is that a tile that would need to go somewhere simply doesn't exist
in the tileset to begin with.
---All tile placement tools (paintbrush, fill, filled rectangle, and
rectangle) are usable in smart tile mode.
---While in smart tile mode, the only events that will be placed are those
associated with specific tiles in the tileset (as previewable in the
"Events" tileset overlay), when those specific tiles are placed. (Unless
the lightning bolt "Overwrite Events" button is turned off.) However, the
Set Event, Copy Event, and Paste Event actions (E, Ctrl+E, and Shift+E)
still work as usual.
---The B, F, and I keys doesn't do anything in smart tile mode, but the
Comma key selects whichever smart tile is associated with the tile you are
mousing over, if any. Backspace selects the first smart tile, which is
always an empty tile but has the benefit of updating all tiles nearby as
you erase with it.
---If you are editing a JJ2+ level using multiple tilesets, smart tiles
will also be available for any secondary tilesets that have smart tiles
defined for them; however, if a tile is not found in the subset of tiles
you are using from that secondary tileset, it will not be placed.
---MLLE only ships with .MLLESet files (in the "ExtractToJJ2+Folder"
folder) for Castle, Carrottus/Easter, Labrat, Colon, Psych, Beach,
Diamondus, Tubelectric, Medivo, Jungle, Damn, and Holiday Hare 98. However,
you can create and distribute definitions for other tilesets using the
"Define Smart Tiles" menu under the "Tools" dropdown menu in the main
window. See the MLLE JCF thread for documentation on how to use this
---MLLE accepts .MLLESet files as command-line/drag+drop arguments, just
like level and tileset files.
=Experimental new "smart flip" feature, only for tilesets with associated
.MLLESet files. To use, while getting ready to place a set of tiles, press
Ctrl+F or Ctrl+I instead of simply F or I. Works best with very simple
tilesets and results are definitely not guaranteed.
-When packaging one or more levels into a .ZIP file, you may choose to
include .MLLESet files for any packaged tilesets. This option is disabled
by default because it is unlikely to be of much use outside of packaging
example levels.
-Fixed glitch from 2.12 of tile types never being displayed in the tileset
-Fixed glitch of MLLE holding onto tileset source files after using them to
build a tileset, preventing you from editing those source files (in any
other program) for an undefined period of time afterwards.

September 6, 2019 (2.13a):
-Added missing preprocessor directive to MLLE-Weapons.asc (inside the
"ExtractToJJ2+Folder" folder).

August 23, 2019 (2.13):
-New "Weapons..." window for JJ2+ levels lets you configure and reorder the
nine weapons used in a level.
---You will need Seren's "Standard Weapon Interface" library extracted into
your JJ2+ folder to properly use this feature:
---Only JJ2's normal weapons are available by default, but other, custom
weapons may also be downloaded (or written by you) that will then also be
available to select from within MLLE.
---As ever, MLLE will do all the work necessary to integrate any weapons
you choose into your .j2as file, adding the appropriate preprocessor
directives but also adding/modifying any special hook functions (e.g.
onPlayer) that may be needed to fully support certain weapons.
---See the MLLE JCF thread for further documentation, particularly for use
by scriptwriters.
-The "Recolor Events" menu for JJ2+ levels has been expanded to let you
also recolor swinging platforms, swinging vines, and spike bolls.
-The "JJ2+ Properties -> Level Properties..." window has a new "Missing
Objects" section which lets you dedicate specific events to +15 ammo crates
for weapons 7, 8, and 9, all of which have sprites available but are not
normally usable.
---This is fully compatible with any custom weapons you may assign to those
three weapon slots in the Weapons window.
-The MLLE angelscript library shows more detailed error messages when
unable to read specific external files.
-Most lines added to your .j2as file by MLLE will now include a special
"///@MLLE-Generated" comment, making it easier for MLLE to remove them
again later if your level stops needing them for whatever reason.
-Fixed error causing MLLE to hang while trying to load levels whose scripts
include any version of the Jazz 1 Enemies library.

April 22, 2019 (2.12):
-JJ2+ levels may now define custom events in their .j2as files using
Doxygen-like comment syntax.
---For instance, the following comment in a .j2as file will cause MLLE to
rename the "Lizard" event to "Zombie Rabbit," but ONLY while editing that
particular level:
/// @Event 104 = Zombie
---If you write insufficient event details after the equals sign, or even a
blank string, that will remove the event from the list for that level
altogether. For instance, if you decide you don't want to give yourself the
option of placing any seeker ammo:
/// @Event 35 = 
---Custom event comments will also be read from any additional script files
included using the "#include" preprocessor directive. The FIRST script file
to redefine an event wins, so if both the main .j2as file and an included
.asc file try to redefine the same event ID, the definition from the .j2as
file will be used and the one from the .asc file will simply be ignored.
---Depending on your personal aesthetics, you may even choose to use "//!"
instead of "///" or "\Event" instead of "@Event".
-New drawing option button (looks like a lightning bolt) to toggle whether
drawing tiles onto tiles with events should replace the old events or leave
them be.
-New "Edit -> Find Parameter Values..." menu option/window to help you
keep track of which TriggerID, WarpID, etc. parameter values you've already
used in your level and which ones are still available to you. (All three
"Jazz Events" .ini files have been updated to use a new parameter name
"WarpID" instead of simply "ID," to reduce ambiguity.)
-Added support for TSF's limit of 256 animated tiles (all other
games/versions support only 128).
-Fixed issues with converting levels containing vertically flipped tiles
between 1.23 and 1.24.

August 30, 2018 (2.11):
-The event setup window now also lets you pick an event by typing in part
of its name instead of by finding it in the full tree structure.
-Copying and pasting tile images (though not tile masks) now uses the OS
clipboard, so you can make more detailed edits to (individual) tiles in
your graphics program of choice and then easily copy them back into MLLE.
-Added an option to the tileset dropdown menu (only for JJ2+ levels) to
Automask a tile, making its collision mask identical to its transparency
-Fixed glitch involving editing parameters of events that use all twenty
parameter bits (e.g. sucker tubes). (thanks SE)
-Fixed glitch of layers being displayed in the wrong positions when editing
a layer in a JJ2+ level with non-zero X and/or Y offsets in parallax view.
-Fixed glitch of layer 8 in Animaniacs levels not respecting its speeds.
(Animaniacs treats layer 8 differently than other JJ2 engine games do.)
-Fixed error from pressing the Comma key outside the bounds of the current
-Fixed error from using the Fill tool with the secondary (right mouse
button) color while editing a tile image or mask in a JJ2+ level.
-Fixed error from double-clicking certain parts of the tileset after
changing a level's version from something supporting 1024 tiles to
something supporting 4096 tiles.
-Fixed error from using the Fill or Rectangle level editing tools before
selecting any tiles.

April 15, 2018 (2.10):
-The "Tools -> Package in ZIP file" menu option finally works. This
packages levels, tilesets (except in GorH levels), music files, and (in
JJ2+ levels) script files and all external files referenced by scripts.
---Specifically, MLLE recursively searches your script files for filenames
referenced by the "#include", "#pragma require", and "#pragma offer"
preprocessor directives.
---MLLE also optionally searches for filenames referenced by the
"jjLayersFromLevel", "jjMusicLoad", "jjNxt", "jjSampleLoad", and
"jjTilesFromTileset" functions, just to try to be helpful, but it can only
understand cases where those functions are passed string constants.
-The "Tools -> Save Level Image" menu option now lets you choose the
directory (and filename) for your image.
-New "Tools -> Save Tileset Images" menu option to save the image and
mask of the level's current tileset/s. Note that in JJ2+ levels, this
includes the primary tileset but also all secondary tilesets and edited
tile images/masks.
-The "Edit Tile Image"/"Edit Tile Mask" window now supports undoing and
redoing changes, accessible from its Tools dropdown menu or by pressing
-When editing a non-Animaniacs level, the "Edit Help Strings" window now
previews the font colors of help strings that use '#' or (in JJ2+ levels)
'~' characters. (This feature can be disabled under the main window's
Preferences dropdown menu if you find it too distracting.)
-When editing a non-Animaniacs level, the "Set active event" window now
saves the last ten events you configured in a special "[Recent]" branch of
the tree, retaining all their parameter values.
-The "Level Palette" window now previews each palette color's index in its
title bar when you hover over it, which is consistent with other windows
involving palettes.
-The "Level Palette" window now has a "Save" button in addition to the
"Load" button, which lets you save a palette file in the same format used
by MLLE and JJ2+.
-Fixed glitch of MLLE requiring some JJ2/TSF levels to include the MLLE
angelscript library that didn't actually need it, particularly levels
containing vertically flipped tiles but no other JJ2+ features.
-Fixed glitch of animated tiles animating at light speed for a while if you
minimized then restored MLLE.

March 16, 2018 (2.9):
-MLLE can now build tilesets. This uses mostly the same interface as JCS
(and is once again accessible from the "Set..." button above the tileset
pane in the main window), but there are a few differences:
---Support for .gif, .png, and .tif/.tiff images has been added, so long as
they are 256 colors. Support for .anm, .lbm, and .pcx images has been
---Tilesets can be built for JJ2, TSF, Battery Check, Animaniacs, or 1.10o,
depending on the version of the level you were editing prior to clicking
the "Set..." button.
---The "Remap Tileset Palette" option has been removed. There are a lot of
resources out there these days to teach you how to make your own palette.
---Instead of filling unused entries in your palette with weird colors,
your palette is preserved perfectly (except that color 0 must be black and
colors 15 and 255 must be white). This means you don't need to include a
palette tile for your textured background to work right.
---Any indexed image should suffice for the mask, including the 1-bit mask
images generated by tileset.exe.
---Copying and pasting the contents of the "Tileset" group from JCS.ini to
MLLE.ini mostly works, except that the Yes and No strings from JCS's Remap
Tileset Palette option, which MLLE doesn't offer, should be replaced with
JJ2 (or TSF) to indicate what game they're meant to be built for.
---The "Rebuild All" button was removed, because it probably hasn't served
any purpose since maybe 1997.
-MLLE now has an FPS limit, and doesn't draw the level/tileset at all when
the window is minimized, meaning it should now use much less of your CPU.
-By enabling the new "Zooming Above 100%" option in the Preferences
dropdown menu, you can view the level at 200% or 400% size. This is
primarily intended for people with very large resolutions, but might also
be helpful for finding tile bugs.
-When editing a non-Animaniacs level, clicking the bitfield (the series of
32 digits) in the event setup window now toggles that bit and adjusts the
current event accordingly.
-Adding an animated tile in the tenth tile column (or deleting an animated
tile when there were a multiple of ten tiles) adds or subtracts a row in
the tileset pane.
-Trying to save an animated tile with one more vertically flipped frames
now warns you about when that is or is not advisable.
-Fixed crashing from saving the same level twice in a single second.
-Fixed crashing at random (but exacerbated by large numbers of animated
tiles) after leaving MLLE open a long time.
-Fixed crashing from trying to save a new animated tile with zero frames.
-Fixed crashing from trying to save a new animated tile that used the
previous animated tile as one of its frames.
-Fixed crashing from the "Play from here" option being used outside the
bounds of layer 4.
-Fixed crashing from undoing tile placement in other layers that would be
outside the bounds of layer 4.
-Fixed error from viewing layer properties window while editing levels for
games with only one textured background mode.
-Fixed error from switching from an event with a large parameter to an
event with a smaller allowed range for that parameter.
-Fixed glitch of horizontally flipped tiles not being saved correctly in
levels with exactly one tileset.
-Fixed glitch of MLLE sometimes incorrectly preventing converting a JJ2+
level from 1.23 to 1.24 or back again.
-Fixed glitch of MLLE sometimes saving nonsense data to its last window
location settings upon closing.
-Fixed glitch of tilesets with non-lowercase file extensions (e.g.
MEZ01.J2T) not being loaded by JJ2+ when used as secondary tilesets.
-Fixed glitch of the "New" dropdown menu option failing to dispose of
certain JJ2+ level settings, e.g. custom palette.
-Fixed glitch of overzealously adding ".j2l" to next level settings that
already ended in ".j2l" when clicking the "Open..." dropdown menu option.

December 14, 2017 (2.8):
-MLLE now keeps track of the ten levels you most recently opened (in the
File -> Recent Levels dropdown menu), so you can easily return to
something that you'd been working on.
-MLLE now creates backups of the most recent hundred times you saved any
level (in the "Backups" subdirectory of your MLLE directory), in case you
need to return to a previous revision for any reason.
-JJ2+ levels saved by MLLE now use the "#pragma require" AngelScript
preprocessor directive on themselves, which should fix some online cache
-Fixed glitch of JJ2+ levels being unreadable in MLLE (but playable in
JJ2+) if you had edited a tile's image/mask but later deleted or shortened
the tileset containing that tile.
-Fixed glitch of copying/cutting blocks of tiles (using the B key or the
Select tool) paying attention to the event map even when you are not
editing the sprite layer.
-Fixed glitch of copying/cutting blocks of tiles outside the bounds of the
current layer displaying a (nonfatal) error message.

December 3, 2017 (2.7):
-Added "Edit Script..." option to the "JJ2+ Properties" dropdown menu,
which attempts to open the .j2as script associated with the level you're
currently working on (creating it first if necessary) in whatever editor
you have associated with .j2as files.
-Fixed crashing from trying to change versions before picking a tileset.
-Fixed crashing from ctrl+clicking the tileset pane when no tiles were
selected and the animated tiles subpane was not open.
-Updated to the newest release of Ionic.Zlib.CF.dll, which fixes a rare
glitch of generating incorrectly compressed byte sequences for overly
complicated input streams.

December 2, 2017 (2.6):
-MLLE should no longer automatically crash or show error messages if you
open a level using a 1.23 tileset but do not have 1.23 installed (or the
same issue with 1.24); instead, it will search your 1.24 folder for the
1.23 tileset (or your 1.23 folder for the 1.24 tileset).
-Fixed glitch of custom tile masks (in JJ2+ levels) not working for
horizontally flipped tiles.
-Fixed corruption of event data from closing the "Set active event" window
by pressing the Enter key while a text box had input focus.
-Fixed crashing from dragging a selection of multiple tiles across the
right border of layer 4 after opening a level whose layer 4's width in
tiles was not a multiple of four.
-Made a few tweaks to the saving code to prevent JJ2(+) from crashing under
certain circumstances.
-Added a special error message to the MLLE angelscript library for when
JJ2+ is unable to open the level file itself in a jjSTREAM.
-When editing a tile image (in JJ2+ levels), you may now use Fill and Color
Replace tools in addition to the regular Paintbrush.

August 11, 2017 (2.5):
-Jazz Events Plus Style.ini has been updated to reflect new event
parameters from JJ2+ versions 5.0 and above.
-Fixed bugs associated with editing events when Layer 4 was not the fourth
layer in drawing order.
-It is no longer possible to place events when Layer 4 is not the layer
currently being viewed.

August 10, 2017 (2.4):
-Using the mousewheel to scroll up and down now works even when Windows
10's new "Scroll inactive windows when I hover over them" option is
-Several new layer properties can now be edited in JJ2+ levels: the layer's
name (used throughout the MLLE GUI), visibility, rotation numbers (for when
a player is stoned), and sprite mode/parameter.
-Added a Layers window under the "JJ2+ Properties" menu which lets you
rearrange the layers and add new ones. There is no limit on how many layers
you may use in a JJ2+ level. These new layers can be accessed from the
toolbar in the top right of the main MLLE screen, or by right-clicking most
anywhere and using the context menu, but not by hotkey (1-8).
---In AngelScript, you can call the function "jjLAYER@
MLLE::GetLayer(string layerName)" to access any of the layers used in the
level, e.g. "MLLE::GetLayer("Sprite Layer") for Layer 4 unless you rename
it. The return value is null if there is no layer with that name. The
result is undefined if two or more layers share the same name.
---Additional layers are stored in separate .j2l files, e.g. a "foo.j2l"
will create a "foo-MLLE-Data-1.j2l". Don't worry about these files; MLLE
will manage them for you.
-In JJ2+ levels, right-clicking the tileset panel gives you options to edit
the image and/or mask of a tile for that level. This lets you fix masking
bugs in a tileset, add missing tiles, create connection tiles between
elements of two different tilesets, etc.
-MLLE now previews the "Invisible" and "Frozen" JJ2+ tile types. ("Heat
Effect" tiles are still drawn as regular/opaque, though.)
---Tile types 2 and 3 are now only drawn as translucent in 1.00g/h levels,
instead of all the time.
-Setting a tile's tile type using the tileset panel's context menu now
properly updates the tile's image in parallax view.
-It is no longer possible to change a level's primary tileset to something
that would cause the level's total tile count to exceed 1024 (or 4096,
depending) counting tiles from secondary tilesets.
-Changing a level's primary tileset adjusts tile IDs for secondary tilesets
the same as resizing/deleting a secondary tileset does, meaning that your
level layout should appear as unaffected as possible.
-In levels that do not use custom palettes, the "MLLE::Palette" AngelScript
value is now equivalent to the tileset's palette (i.e. "jjBackupPalette")
instead of all-black, which should make for better consistency.

June 23, 2017 (2.3):
-Much greater JJ2+ support:
---The Layer Properties window now lets you edit layers' X and Y offsets.
---Tiles may now only be flipped vertically (using the "I" key) in JJ2+
levels, not e.g. in Battery Check.
---When resizing layer 4, special JJ2+ events (trigger zones; the pit level
event in the bottom right) are now moved to new positions in layer 4 to
preserve the old settings.
---The old JJ2+ options under the "Tools" menu have been removed and
replaced with a new top-level "JJ2+ Properties" menu with the following
-----Level Properties: Configure various things about this level that don't
show up in the regular Level Properties window because they're JJ2+ only,
such as water and darkness colors.
-----Palette: Edit what palette this level uses without having to make a
custom tileset edit. (This palette's name in AngelScript is
-----Tilesets: Use tiles from other tilesets (e.g. background layers) in
this level. You are recommended to change the level version to TSF before
doing this, in order to be able to use up to 4096 distinct tiles instead of
only 1024.
-----Recolor Events: Change the colors used by certain events (e.g. pinball
objects or shootable poles) to look better with this level's palette.
---See for more
technical details behind this.
-The "Trial Run" and "Play from here" options now run a level's angelscript
file if it has one.
-The "Trial Run" and "Play from here" options no longer make MLLE think the
level has been saved since it was last modified.
-Trying to save a level with no user-set filename now displays a save
-MLLE now remembers whether it was maximized last time you ran it, and if
not, what size the window used.
-Changing a layer's dimensions now removes all references to that layer
from the Undo/Redo buffers, to prevent crashing or other unintuitive
-Fixed display issue with editing animated tiles in levels with very small
-Fixed visual-only bug associated with columns of the same tile when some
were flipped and others weren't.
-Fixed issue of pressing F or I messing up blank tiles in the current
-Fixed the selected tiles sometimes being drawn with the wrong transparency
-Fixed crashing when animated tiles had overly long delay settings.
-Fixed results of pressing certain keys (such as E or M) while selecting a
tileset from the tileset dropdown.
-Fixed issue of too many texture modes showing up in Layer Properties
window when you edited a lot of different levels in one session.
-Improved the "Paths and Filenames..." configuration (which also shows up
when you run MLLE for the first time).
-Added an About window.
-Added undocumented JCS feature re: highest event bit on animated tiles.

April 21, 2017 (2.2):
-The "Show Events," "Show Parallax," and "Show Mask" context menu buttons
from right-clicking in the level pane now work.
-The fill drawing option now works. (thanks SE)
-The "Tools -> Save as Image..." menu option now works. (thanks SE)
-Fixed level corruption when '' is used in a help string. (thanks blur)
-Fixed level corruption due to resizing a layer. (thanks blur)
-Fixed crashing when creating a new level after editing another level.
(thanks blur)
-In the application title, the level name now comes first and "MLLE" now
comes last, like many modern applications. (thanks blur)
-When the level is modified, an asterisk is now added at the beginning of
the application title. (thanks blur)
-Added support for any path (particularly a full path) for Jazz2.exe for
the SaveAndRun setting in MLLEProfile - JJ2.ini. For example, "-server
-battle" can be used to run the level as battle. (thanks blur)
-Added new SaveAndRunArgs setting in MLLEProfile - JJ2.ini. (thanks blur)
-Added support for "Open with" in Windows context menu. (thanks blur)
-Added minor improvement to BASS error handling. (thanks blur)

October 14, 2014 (2.1):
-Added "I" key to flip tiles vertically
-Added "Jazz Events Plus Style.ini" for JJ2+'s various event-based
-Added JJ2+ tile types and textured background styles to the JJ2 and TSF
.ini files

January 2012 (2.0):
-Initial Release