Android VNDS Interpreter v1.6.0

A pretty large update this time. Probably most notable are some interface changes. The novel selection screen has the buttons at the bottom moved to the action bar on devices that have it. The text log is now also full-screen instead of filling only the same 4:3 rectangle as the VN. I’ve also made a proper startup splash screen instead of just using a progress dialog.

I’ve also integrated some user suggestions: The search hardware button can now be used to advance text, the soft menu button becomes completely invisible in landscape mode or on devices with a physical menu key and the time spent reading a VN is now visible on its preferences screen.

Additionally, I’ve tweaked some things for today’s higher-performance devices. On high-res displays, coordinate rounding to integers has been disabled and texture downscaling uses bilinear instead of nearest-neighbor.


– Changed how SD card detection works, now browses /mnt
– Text log now fills the whole screen
– Soft menu button is now invisible (but functional) in landscape by default
– Added playtime counter to prefs screen
– Added preference for min. number of lines to show in the textbox
– Hardware search button will now advance text
– Use higher quality texture filtering (bilinear) on high-res displays
– Better init screen
– Improved performance when 2+ sprites visible

Android VNDS Interpreter v1.5.9

Just a small bugfix release. I changed the novel selection screen to show larger icons when holding the device in landscape orientation, primarily for the benefits of tablets and other large screen devices.


– Added /mnt/extsd to the default novel search path
– Novel selection screen now uses larger icons in landscape mode.
– Higher resolution “New Slot” image for the save screen.
– Tried to reduce unnecessary progress popups.
– Last word jittering between lines should be fixed.
– Fixed NPE when save folder exists but unreadable.
– Disabling auto mode removes “auto” text properly now when text speed=instant.

NVList v2.8

The Android port is finally here. It’s now possible to create an Android version of your NVList VN with a flick of the wrist and a press of a button. The new Android Build Config sub-screen guides you through the process, warning about missing/incorrect properties. Full documentation can be found here.

One thing to keep in mind when creating an Android port is that on Android, the engine controls the position and size of the main textbox. This is to allow your readers greater control over text size, etc. Since the system overrides some of your settings, it’s usually best to disable textbox customization on Android. A global boolean android is set when running on Android, so to use a custom textbox (but not on Android):

if not android then
    customTextBox(TextMode.ADV, {
        textBounds={190, 528+16, 900, 128},
        textBackgroundExtra={x=128, y=528},


2012/08/26 — 2.8 (r34) enhancements: – 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. bugfixes: - 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.[/changelog]

→ NVList project page

Android VNDS Interpreter v1.5.8

I’ve added pages to the save/load screen, you now get 10 pages with 10 save slots each. This should fix the crashes some people were having when using 20+ save slots. It also provides a little bit of structure to the saves (for example, you could use a different page for each route).


– Added pages to the save/load screen. 100 save slots should be enough, right?
– Improved look of textlog

Android NVList Update

I’ve been working on the Android port of NVList, mostly on getting it to the point where it’s usable by humans and you don’t need to be some kind of masochistic time wizard to get it running.

I’m adding a subscreen to Build.jar for configuring Android-related settings, and generating/updating an Android project based on those settings. The generated project will have the app icon, name, etc. hardcoded, but not any of the scripts or other resources. You can choose to either include the resources as assets directly into the APK, or as a separate download (preferable for VNs over 25-30MB).

There’s still a bunch of documentation to write, and a considerable amount of fiddling. I hope to have Android support ready for NVList v2.8 (currently at v2.6). The code of the Android version of the engine itself is ready; I made a quick Android port of Cottage on the Moor to test/demo the code:

Cottage on the Moor (Android version)

Android VNDS Interpreter v1.5.7

Auto read should be working properly now, even in edge cases. I didn’t write a post for v1.5.6, but I decided to finally request the permission required to keep the screen on even when there’s no user input. When you add auto read, it suddenly becomes extremely important.

I’m working on a better save/load screen that scales better to 20+ saves without having to scroll through a giant list. Probably something paginated with a fixed number of save slots per page, though I haven’t picked a final design yet.


– Fixed auto read blocking forever on lines that don’t fit entirely on the screen


– Added a wake lock to keep the screen from turning off when idling.

– Bug in internal function could cause sprites to not show up.

Android VNDS Interpreter v1.5.5

– Added an auto read function.
– Added an optional list view for the save screen.
– Target SDK increased to 16 (Android 4.1)

– Return to title causes the textSpeed preference to be ignored until reopening
  the preferences screen.
– ANSI color escape codes were being parsed, but not stripped from the string.

Android VNDS Interpreter v1.5

I haven’t really posted about this since the first release. It’s interesting to see how much has changed in just over a year (several new Android OS releases, for one). Very little code is Android-specific, so dealing with new OS releases is usally not a problem. That is, until suddenly the pysical menu button disappears and is replaced by an icon in the (hidden) title bar and there’s no way to access the menu…

Anyway, about the 1.5 update. The most noticeable change is the new text fade-in. Enabling it required a bit of optimization in the text rendering, and a whole bunch of rewriting of the text display code (probably the most complex part of the app). The tricky bit is doing the text layout only once (for the full text), then rendering only the first N characters (or making all characters after N invisible, ha).

I you encounter a bug, the fastest way to get it fixed is by contacting me via email.

– Implemented text fade-in, see “Text Speed” preference.
– Added an on-screen indication of when superskip is on.
– Sped up font rendering by using the built-in shadow style instead of rendering
the shadow manually (by drawing the same layout twice with a different
– Decreased memory allocations for smoother animations
– Action Bar on Android 3.0+ devices can take up too much vertical space. On
small-screen devices it now auto hides (see “On-Screen Menu” preference).
– Decreased save file size (ImageTexture accidentally serialized its pixels)
– If a VNDS format global.sav exists, its contents are used as defaults. Some
VNs use gloval.sav to pre-unlock routes.

– Skipmode didn’t skip animations fully when effect speed < 1
– Wait for any animations to finish before showing a choice popup.
– When in a VN, volume keys change music volume even when no music is playing
– Music unpaused on the lock screen, not only after dismissing it.
– Clock didn’t try to move out of the way of the textbox.

To download, scan the above QR code with a barcode scanner or search for “VNDS Interpreter” in the Android market.

Android Compatibility Update

Over the past few months, I’ve had a number of people complain about lack of sound & voice effects when using VNDS on Android. The type of AAC audio used by VNDS seems to not be supported anymore by a lot of newer devices. To remedy the problem, I’ve changed the audio codec used by my converters to Vorbis (.ogg) when selecting an Android target.