NVList v3.0

A major version release brings new features, but also incompatibilities. All deprecated functions and backwards-compatibility hacks have been removed. A lot of GUI-related code has been altered or moved and the way layers work has been significantly changed. Layer are now also drawables which means layers can now contain other layers. Because of these changes, visual novels written for an earlier version of NVList won’t work by default. You can force an older VN to work by changing engineTargetVersion in game.ini to 3.0 or later, but take care to test thoroughly before releasing.

As you may know, NVList requires Java to run. The current version opens a browser window to java.com when no compatible Java install is found. NVList 3.0 makes it easier to distribute Java together with the VN, requiring no separate Java install. Just check the include-private-jre box in the build preferences and a 32-bit Windows Java runtime will be packaged with the VN.

The manual has also been significantly restructured and I’ve added advanced scripting chapters covering user interfaces and animations.

There have also been some improvements to the Android port. It now displays total play time in the preferences screen and there’s a new setting to change the minimum number of lines the text box should show at one time. The "initializing" screen has been given a makeover and now features a changeable splash screen image (build-res/splash-android.png).

2012/11/13 — 3.0 (r69)

– 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).

→ NVList project page

4 thoughts on “NVList v3.0

  1. Is there a version of the Cottage on the Moor source that’s compatible with 3.0? When I try to run it, I get the error at main.lua:34 :: attempt to call nil.

    • Not yet. I’m prioritizing getting NVList 3.1 out first.

      Doing a find/replace on the scripts to change “SystemVar” to “SharedGlobal” may be all you need.

  2. Oh, great. What can we look forward to in 3.1?

    I recently stumbled upon the engine and have been considering it for my next project. Certain features (such as Lua and Java, as well as the way scripts are set up) make it much more appealing than Ren’py. I guess while I’m here, I’ll also ask the other question I have: How do you go about defining methods or objects you can interface with in Java? For example, say I wanted to use the in-app billing API on Android, how do I expose that to the Lua context?

  3. Mostly small bugs introduced with the 2.9->3.0 update.

    Right now, the easiest way to expose in-app billing would be to use the registerJavaClass function in the vn.system module.

Leave a comment

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>