v3.3 (rr101) 2013/06/21
- Added support for tiling textures, see ch11-resources.xml for more details.
- Images now let you specify a custom UV-range to control the texture offset.
- Added a fast mode to the texture composite function that skips alpha blending.
- skipScene() is now cancelable by pressing the text continue key.
- Improved analytics responsible for generating preloader.bin, handles multiple
  image loads generated from a single line better.
- Better error messages in case of syntax errors in loaded modules.
- Closing Build.jar will now show a warning if a build task is still running.
- The resource optimizer window has been integrated into its parent window.
- Android: Resource optimizer will only be re-run when necessary.
- Android: Added prefs-default-android.ini which allows preference overrides
  to be used for an Android port.
- Android: Added a GLES 2.0 rendering backend with support for bitmaptweens and
- Android: Support for JNG images.
- setScale() erroneously stopped accepting non-positive values.
- Running in Java 7 could under specific circumstances result in an
- Newline characters in text commands weren't being handled properly.
- Built-in word count incorrectly counted punctuation as words.
- Changed the rendering implementation of TriangleGrid to avoid a potential GC
  in the middle of rendering.
- Retrieving the pixels for certain texture types didn't work.
- Fixed a possible OutOfMemory exception when using the skip mode on Java 7
  continuously for very long stretches of time.
- Android: Will not try to download an XAPK if no valid LVL key is specified.
v3.2 (r93) 2013/01/09
- Reduced latency when starting audio while another audio track is already
  playing by implementing a more fine-grained locking system.
- Reduced default fade-in/fade-out time when changing background music.
- Screenshot size for the save screen is now configurable through the
  vn.saveScreenshotWidth/vn.saveScreenshotHeight preferences.
- Added a chapter to the manual with the differences when running on Android.
- Large cleanup/restructuring of bundled tutorial scripts.
- Added setExitFunction() which allows you to override the default behavior
  of the exit confirmation dialog (whether activated by the window close
  button, exit menu item or the Lua exit function).

- Playing video in an upscaled window while an FBO is used for rendering caused
  the video to be clipped (only lower-left rect visible).
- Screen didn't redraw when changing a textless TextDrawable.
- Improved error handling for the edit button in the build command panel.
- Image gallery script was broken.
- Anim.par() will no longer override its components's loop attribute.
- Incorrect return value for yielding Lua functions invoked from a Java
  function (in practice, that means call/dofile).
v3.1 (r86) 2012/12/08
- Update to JOGL-2.0-RC11. Should help with errors on Mac, freezes on Linux.
- Added option to show a splashscreen during startup.
- Added a script tab to the debug window. It includes a script info button to
  display the line/word count for each of the scripts.
- Added Game.addLuaInitializer() which makes it easier to make an interface in
  Lua for complex Java code. Use registerJavaClass() for simple Java objects.
- Added pushStyle/popStyle to make it easier to temporarily change the style
  within a line of text, then later change it back to the earlier style.
- Support for using soft-hyphens in words to indicate potential intra-word
  hyphenation points.
- Support for setting the default text direction to right-to-left (vn.rtl)
- Basic support for bidirectional text in TextDrawable/Button.
- TextDrawable.setAnchor()/ButtonDrawable.setTextAnchor() have been replaced
  by setVerticalAlign(). Set the horizontal align with the default text style.
- Using more aggressive coordinate rounding in text display code to make the
  text appear sharper.
- Added an optional volatile parameter to screenshot/screen2image functions
  which, when true, creates a screenshot which stores its pixels only on the
  GPU. This improves performance, but the pixels may be lost at any time.
- View CG menu option now prints a warning when it does nothing and uses a
  fade-in/fade-out effect.
- Changed behavior of 'stretch' for GridLayout, will now only increase sizes.
  Added a 'shrink' property to allow shrinking of components.
- Setting the text anchor to 0 lets the text alignment depend on the default
  directionality of the containing line of text.
- Various small improvements to the manual.
- Choice buttons accidentally had their Z changed from -2000 to 0.
- Screenshots were taken in the wrong layer for layers containing sublayers.
- Buttons still appeared clickable in view CG mode.
- Notifications alignment was accidentally changed in v3.0
- Right-aligned text now behaves the same on the Android port.
- Incorrect decoding of Unicode code points outside the BMP in Lua.
- Lua functions didn't show up in stack traces for Java exceptions for certain
  types of errors.
- colorTex() didn't properly convert the given ARGB color to premultiplied form
- Clip rect calculation in BaseRenderer uses the rounded-to-int version.
  of the parent's clip rect as base. Repeated rounding errors could stack up.
- Errorneously included some unarchived .java files in the engine distribution.
- Removed trailing '&' in Linux launcher script, it causes the program not to
  run properly when using double-click -> run in terminal in some cases.
- Engine/project fields in Build.jar where clipped on Mac OS X.
- On some platforms, default textfield foreground is white, making the
  project/engine browse fields in Build.jar very hard to read.
v3.0 (r69) 2012/11/13
- Added better support for adding an embedded Java runtime (JRE). A 32-bit
  Windows JRE is included with NVList, enable the include-embedded-jre
  preference to add it to distributions.
- Rewrote how layers function. Layers now implement IDrawable and can be
  nested. All default layers are now created within a single root layer and
  Image.getLayers() was removed.
- Drawables can now be moved to another Layer than the one they're created in.
- Added a default 'overlay' layer which displays above any other default layer.
- Added setGlobal/getGlobal/incrGlobal/clearGlobals functions to ease working
  with the globals Java object from Lua.
- Implemented early culling in the rendering code using bounding box
  approximations for drawables (improves performance when there are many
  off-screen drawables).
- CD distributions now also include a .exe version of the installer.
- Installers included with CD distributions now extract directly from the
  no-installer .zip instead of requiring data be duplicated inside the installer
- Moved a number of layout/GUI related code from Lua to Java for increased
  performance. Moved System.(createSaveScreen/createLoadScreen/createChoice)
  to GUI.XXX  
- Removed TextButton Lua implementation, integrated functionality into IButton.
- Default choice screen now creates scroll bars when there are too many options
- Implemented a panel component for grouping and positioning images with a
  layout. The panel can also be given images to use for its background and
- Added a scrollable viewport component.
- Added a FlowLayout which positions items in rows aligned to a particular
- Android version now uses an optional splash screen image during startup.
- Added Anim.fromFunction() which turns a Lua function into an Animator.
- Added getNextFreeSaveSlot() function which returns the index of an unused
  save slot.

- Button rollover is now limited to their parent layer's clipping rect unless
  clipEnabled is false.
- ParallelAnimator looping now waits for each sub-animation to finish instead
  of looping each sub-animation separately and as fast as possible.
- NVL mode on Android now tries to fill at least half the screen before auto
  clearing the screen instead of always after each paragraph.
- Fixed a bug in blend quad rendering for the desktop version of NVList, didn't
  properly restore the previously active texture.
- Fixed a rare array bounds exception in LuaThreadGroup.
- Lua stacktraces got destroyed when tail-calling a Java function which calls
  a yielding Lua function.
- Lua evaluator in the debug tab now also accepts non-expression statements.
- CodeMirror syntax highlighter exited 'code' mode when encountering a ']'
- Lua tailcall optimization was broken for java functions resulting in a yield
  ('dofile' being the obvious one fitting that description).
v2.9 (r35) 2012/10/19
- Added screens.lua to default res folder in order to make it more
  straightforward to edit the save/load/choice/textlog screens. See also the
  custom special screens demo.
- Upgraded JOGL library to version 2.0-rc10
- Added optional size argument to ImageFx.composite to explicitly set the size
  of the output texture.
- ImageFx.applyColorMatrix now accepts 4x5 matrices instead of just 4x4.
- More helpful error message when trying to run NVList on a non-existent or
  otherwise unreadable folder.
- Added 1024x600 by default when running the resource optimizer for Android.

- AndroidProjectCompiler didn't set XAPK size property correctly.
- Fixed SequentialAnimator to call update on the same frame as start like all
  other Animators.
- [Android] Use of embedded fonts was broken.
- Fixed a bug in GridLayout when using more than one row and the cells need to
  be centered horizontally.
v2.8 (r34) 2012/08/26
- Added the Android port for NVList, see chapter 4.4 in the manual.
- Added a warning message when running on OpenGL version < 1.3
- Renamed resource optimizer result from "_optimized" to "res-optimized".
  Optimized resources are now automatically used by Build.jar, with detection
  if they're outdated and a suggestion to run the optimizer when useful.
- Resource optimizer now defaults to the "size" preset and adds 1280x720,
  1024x576 target resolutions.
- Added a utility function for creating filmstrip animations
  (Anim.createFilmstrip). See image/animation tutorial for example code.
- Fixed an error on OpenGL 1.1 cards: GL_CLAMP_TO_EDGE doesn't exist.
- Error in videoclip conversion to mp4 for some versions of FFmpeg (unknown
  encoder libfaac).
- Project creation dialog's progress bar now actually works...
- Resource optimizer didn't pad with edge pixels properly for subimages.
v2.7 (r32) 2012/08/11
- The $syntax for inserting variables into text now supports local variables.
- Added a sayLine function that automatically resets the speaker at the end of
  the paragraph.
- Added a registerSpeaker function that registers a stringifier function and
  companion global say_XXX function to change the current speaker. See
  documentation (ch 3.1) and text/basics tutorial for more details. 
- Added a new chunk to the save format, containing a savepoint-like IStorage
  object. This object can contain user-supplied metadata for the save file.
- The most recently saved slot is now marked as 'new' on the save/load screen.
- Last used page on the save/load screen is now persisted.
- New DistortGS shader that renders images using a distorted uniform grid.
- BlurGS is now instantiable from within Lua code.
- Added a tutorial demonstrating the use of IGeometryShader/IPixelShader
- Renamed systemVars to sharedGlobals. The old systemVar functions are still
  available for VNs targeting NVList version 2.6 or earlier.
- Added support for using the mouse wheel to scroll the text log.
- Implemented auto cursor scaling based on the default text style's font size.
- Added ImageFx.crop()/ImageFx.composite() functions to combine sprites at
  runtime. This allows you to use 
- Added support for image sequences (for example, event CG variants) to the
  image gallery, see script/gui/gallery.lua for more information.
- Name tags in NVL mode were accidentally being styled with the current
  speaker's text style as well. Fixed to only use the name style.
- Fixed unintended brightness decrease when using BlendGS in combination with
  drawables with alpha less than one.
- Build.jar was supposed to update prefs.ini, but instead wrote prefs.ini.txt
- Fixed an off-by-one error for the cropping in the blur function.    
- Auto read mode broke when a line doesn't fit on the screen and a panic line
  wrap is necessary.
- Image optimizer now pads resized subimages with a scaled version of its
  former neighbor pixels instead of always with transparent pixels, thereby
  maintaining the same edge behavior when rendered with linear interpolation.
- Create project button (and some others) in Build.jar are now disabled at
  times when using them could potentially cause problems.
- Spurious error in build-game.xml:301 when no default video folder exists.
- Under rare circumstances, a repaint would not be issued after resizing,
  leading to image corruption.
- Fixed a bug in BaseImageTween that would replace the imageAlignY with
  imageAlignX if no specific anchor/imageAlignXY set.
v2.6 (r27) 2012/07/06
- Added a matrix color tint function to ImageFX. Can be used for grayscale
  effects, changing saturation, etc.
- Added an Image FX tutorial demonstrating blur, brighten, color matrix.
- Improved runtime performance of the debug window's image tab. It would cause
  lag when viewed during heavy particle effects.
- Changed some code related to tweens, removing anything that changed the
  texture anchor (image alignment) without explicit action from the user.
- Fixed a bug in customTextBox that could cause a crash when not passing
  explicit bounds
v2.5 (r26) 2012/06/18
- F5 can now be used as a hotkey to restart when debug mode is turned on.
- Replaced IDrawable.getColor with getColorRGB/getColorARGB to work better with
  Anim.* functions.
- Added an example usage of sprite tinting using IDrawable.setColor() to the
  image/basics tutorial.
- Moved Anim.* functions to a separate module (vn.anim)
- Added Anim.seq(), Anim.par() for sequential/parallel chaining of Animators.
- Added Anim.createWait() for adding pauses to chained Animators.
- Added Anim.waitFor() that blocks until the Animators passed as arguments
  have finished.
- Added loops parameter to Animator.start() to let the animation loop a specific
  number of times (or infinitely by using -1).
- Added example usage for Anim.* functions to the image/animations tutorial.
- Added vn.enableProofreaderTools preference that, when enabled, adds a report
  bug/typo button to the menu bar. This button automatically adds info about the
  current script location and merges bug reports into a single file.
- Changed the interfaces of the Camera object to be compatible with the new
  Anim.* functions. See camera tutorial for details.
- Added the ability to customize the text continue cursor image using the
  customTextBox function.
- Added a second parameter to TextDrawable.setCursor() to be able to turn off
  the automatic positioning. This makes a fixed position cursor possible.
- Added a textbox customization tutorial demonstrating setCustomTextBox
- Added vn.engineTargetVersion preference to allow you to specify which NVList
  version your VN was created for. This allows built-in functions to change
  their implementation but continue to function the same way for VNs targeting
  the old NVList version.
- Added an example image gallery script as a GUI tutorial.
- JNG images were erroneously saved with premultiplied alpha by the optimizer.
- Fixed resource optimizer stripping start/end attributes from snd.xml
v2.4 (r25) 2012/05/25
- Made fog effect much more customizable.
- Added documentation to stdlib.lua and vn/gui.lua
- Added a changeVolume function to (gradually) change the volume of sound or
  music after they've started playing.
- Moved code related to the default titlescreen into its own file
  (titlescreen.lua), added a lot of code comments to it and main.lua
- Screenshot menu item now has the ability to save screenshots as JPEG
- Create new project button added to Build.jar, creating a new project now
  triggers an automatic rebuild. 
- Added Anim.* function for easily interpolating (animating) between two
  property values (for example color, or scale). Background animations also
  benefit; the new system saves a bit of typing.
- Wipe tween ignored sprite transform (position, scale and rotation).
- Changes to the color or alpha of a name box would disappear after switching
  back and forth between ADV and NVL text modes
- Fixed a runtime exception when loading a 16-bit RGB image without alpha.
- Paragraphs longer than a few hundred characters could, under specific
  conditions, trigger a program crash on ATI graphics cards.
- Setting texture parameters on a GLSL object didn't force their
  initialization, making the textures appear transparent.
- Resource optimizer was broken, gave an error message when attempting to use.
- The return to title menu item accidentally reset the window size/position.
- Text (sub)lines consisting of only whitespace were eaten by the parser.
v2.3 (r23) 2012/05/01
- Implemented a basic auto-updater menu item (experimental, see game.ini)
  JVM running NVList must be closed before library files can be overwritten.
- Added a menu for setting the window size to a XX pct of the preferred size
- Camera.add() now returns an ICameraImage which can be used to change the
  image's depth after adding it to the Camera.

- Generated installer splash screen was corrupted for images with alpha
- Launch4j PPC binaries (windres/ld) replaced with PPC/x64 universal binaries
  This should fix builds on Mac OS X Lion
- getPlayTime() function was broken.
v2.2 (r21) 2012/04/16
- Script errors printed on-screen now try to include a filename+line.
- Clicking to instantly display the entire paragraph now works properly for
  text with [bracketed] Lua code in it.
- When using the img/imgf functions with a sprite slot, the y parameter can
  now be used to change the baseline y. 
- The OSD (toggle with F7), now displays much more information.
- Added a quickload(slot) function
- text/appendText functions now support StyledText objects as their text args.
- waitForTextVisible function now takes an optional TextDrawable to wait for.
- The createStyledText function can now be called with a StyledText arg.
- Added a createLayer(name) function that calls imageState.createLayer()
- Image cache size can now be specified in pages. A page is the amount of
  memory required to store a full screen RGBA8 texture.
- Debug window got a line in the VRAM graph indicating the image cache limit.
- Added a vn.system module with lua wrappers for SystemLib functions.
- Added a website() function that opens a webpage in an external browser.
- Tuned the scale factor at which the main FBO starts mipmapping.
- The Lua tab in the debug window now contains a print stack trace button.
- Parse errors related to img.xml are now displayed on screen.
- Added BlurGS class that provides a scalable blur.
- Preferences starting with vn. can now be accessed through the prefs Lua table
- Implemented depth-of-field/perspective for the Camera object.
- Reduces mach banding of wipe tween (WipeGS).
- Changing the text layer constructor now triggers text layer recreation.
- quicksave/quickload now display a success message on screen.
- Added support for reading precomputed mipmaps from KTX files.
- Added prefs for readTextStyle, textLogStyle, choiceStyle, selectedChoiceStyle
- Added registerJavaClass() function for importing Java code from Lua.
- No longer requires separate executables for 32/64 bit Java.
- Building a release now creates a .exe version of the generated installer.
- Improved perceived startup time by showing an empty window early during init.
- Significantly improved image load times on slow singlecore processors.
- Reduced processor usage for sound playback, especially on slow singlecores.
- Game update stops when the window is minimized. 
- Video capture function (F8) now forces continuous repainting to reduce video
- Added mouse wheel down as a text continue key.
- Changed Build.jar to automatically do a rebuild when necessary.
- Changed main.lua to act as a template for a standard VN titlescreen.

- Rewrote the way OpenGL resources are managed internally. This should fix a
  memory leak occurring when the texture cache becomes full.
- Fixed mapping of linear volume dB gain. Previous implementation could raise
  output levels over their natural maximum.
- Text style property editor used by Build.jar now applies any pending edits
  when closing the popup dialog.
- Editing a preference in Build.jar now also updates save/prefs.ini
- Silently crashed if gluegen-rt was not in the library path.
- Keyconfig only read the first key specified for each line.
- Increased default minimum heap size to improve performance in situations
  with high garbage generation (like particle effects).
- When running on hardware incapable of NPOT textures that also doesn't support
  large textures, the just-in-time resize could cause a data alignment error. 
- ARGB screenshots were shifted up by 1 pixel in some instances.
- Improved support for escaped \$, \[ in text lines for syntax highlighters.
- Events enqueued with edt.addEvent() now wait while the main thread is blocked
- Saving could change the result of == for Lua userdata objects.
- Using alt+enter to return to windows mode from full screen advanced the text.
- Up key accidentally opened the text log even during a choice.
- Show text log menu item was broken.
- On some graphics cards, the menu bar popups were overlapped by the screen.
- Crash on UniChrome GPU for glReadPixels(type=GL_UNSIGNED_INT_8_8_8_8_REV)
- Drawing blended quads used wrong UV coords when NPOT textures unsupported.
- screen2image aspect ratio was wrong when FBOs turned off and the physical
  window didn't match the aspect ratio of the VN's virtual resolution.
- Setting the FBO preference to true, now really always forces the FBO on.
- Updated JOGL to 2012-02-28 build to fix compatibility with Mac OS X 10.5
v2.1 (r15) 2012/03/02
- Initial release