Author Topic: Juniper Latest Version Information  (Read 2986 times)


  • Administrator
  • Hero Member
  • *****
  • Posts: 2991
Juniper Latest Version Information
« on: August 11, 2013, 03:32:47 pm »
This post will be updated every time a new version is released.

Since many of you probably weren't aware, I'm a computer science major, and one of the things I often do in my spare (non-translation) time is write code for fun.  About a month and a half ago I started making a VN engine as a way to teach myself SFML, and it went so well I decided to actually complete the program and make a serious release.  So here it is.

Click here to download the Juniper VN Engine Interactive Tutorial (for Windows or Linux).
The latest version is v0.3.
The changelog can be found in this thread. Feedback and error reports for this version should be posted there as well.

On Windows just unzip it and double-click Juniper.exe to start the tutorial.
On Linux you may have to add a permission (chmod +x) and install an OpenAL package (on Ubuntu, "libopenal1") to get Juniper.out to execute.

The tutorial is implemented using the engine itself, so you can start making your own visual novel simply by modifying or replacing the sample files I used for the tutorial.

Here is a partial list of features for this release of Juniper (v0.3):
[spoiler=Current Features]
- autoread mode
- various skip modes
  - hold skip
  - toggle skip
  - turbo skip/skip to next choice
  - autoskip
- previously read text is kept track of automatically
  - skip all text or previously read text only
  - show previously read text in a different color
- backlog with voices
- CG mode
- Music mode
- saving and loading, including quick saves
    - save files have the date and time, a screencap and the name of the current scene
- configuration menu
  - preview textbox
  - silent mode
  - separate volume sliders
  - fullscreen mode and multiple window resolutions
  - textbox opacity and color
  - hide cursor after x seconds
  - toggle confirmation dialogs
- quadruple key bindings for every conceivable shortcut you might want
  - joystick/gamepad support (I tested this with a 360 Gamepad)
  - developers can change the default key bindings using the config.ini file if they don't like mine

- full Unicode support, so file names, text, etc can be in any language you want
- create multiple textboxes
  - use any position, size, font and color you want for each textbox
  - use escape sequences to make pauses, newlines and color/font changes for specific sections of text
  - custom end of line animations
- change an entity's opacity at any time, or tell it to fade smoothly in or out
- create animations simply by loading multiple images
- movement system, allowing you to tell entities to bounce, slide in or out, shake, spin, shrink, expand, and more
  - you can create additional movements yourself, in addition to using the sample ones
- create buttons to execute arbitrary code when clicked on or moused over, so you can easily implement choices any way you like
- every menu (including the backlog) is implemented in a script, which means you can completely customize their appearances simply by changing the positions, sizes and textures I used in the sample scripts
See the tutorial itself and the included documentation for more thorough information.

Juniper is completely free to use, even for commercial projects, as well as open source (the source files are part of the downloads).  See the Legal Stuff section in the documentation for details.  Note that you'll need SFML if you want to compile it yourself.

If people show an interest in using this engine, I'm more than willing to continue developing it (though translation will always take priority).  Below is a list of features I might like to add to future versions, and probably will if enough people ask for them. Feel free to suggest others.
[spoiler=Possible Future Features]
===Easy features to add:

- A command such as SIMPLEIMAGE_FADE_TEXTURE to allow a character to smoothly fade between two sprites. Right now, the user would have to constantly manage two separate images to get this effect.
- Change commands such as WAIT, MOVE_ENTITY and STOP_MOVING to work on multiple entities at once, so you don't need to repeat the command for every single entity.
- Add an AUTO_CURSOR command to make the mouse cursor move to a certain location (most likely the center of a named entity) if the system variable _auto_cursor is set to 1.
- Allow a dynamic textbox's end of line animation to have a fixed position. This would probably be an option like "EOL_ANIM_FIXED x y" for the DTEXTBOX command.
- Add a THEN keyword so that you can write "IF# x = 2 THEN JUMP_SCRIPT s" on a single line without an ENDIF. Right now, you need three lines to write even the simplest if-blocks.
- Allow radio and sliding buttons to set temporary variables, not just permanent ones. This would probably involve a TEMP keyword.

===Hard features to add (either they'll take a while, or I'm likely to create a lot of new bugs when I add them):

- Add center and right justify options for textboxes. Right now all textboxes are left justified. Most likely this would be in the form of LEFT_JUSTIFY, CENTER and RIGHT_JUSTIFY keywords for various text and textbox commands.
- Add orientation options for textboxes. Right now all textboxes are oriented left-to-right. Most likely this would be in the form of LEFT_TO_RIGHT, RIGHT_TO_LEFT, UP_TO_DOWN and DOWN_TO_UP keywords for various text and textbox commands.
- Allow modifier keys to apply to mouse buttons and mouse wheel as well as other keys. For example, "Ctrl+MWU" (holding control while moving the mouse wheel up).
- Add an escape sequence to create hyperlinks in textboxes. This means a portion of text would act like a button, changing color when the cursor comes over it and clicks on it, and causing a handler to be executed when clicked.
- Improve Juniper's error handling to allow it to continue executing even after certain errors, if the user wants. For instance, if the texture file for a SIMPLEIMAGE wasn't found, continue executing with a blank texture. Some errors would remain fatal though, like not finding a script.
- Add a particle system, which would create a large set of clones of one or more images, then give each of them a randomly generated movement using ranges of values given by the user. This could potentially be used for effects such as snow, rain and falling leaves.

===Features which would require significant research to implement, so I can't predict how long or hard they'll take:

- Port to Mac OS X.
- Port Juniper to iOS and Android, after SFML (the main library Juniper uses) is ported to those systems.
- Attempt some speed optimizations if people feel there's a need, especially if they can identify specific circumstances in which Juniper is too slow.
- Implement blurs, pixelation, waves, color filters, and other effects by creating a system for using OpenGL shaders on specific entities, which would also allow users to easily add or customize their own shaders (if they knew GLSL).
- Teach sliding buttons, static textboxes, dynamic textboxes and/or layers to change rotation or size, so movements as well as ROTATION and SIZE commands work on them. I doubt I'll do all of these at once, so which ones people ask for will make a difference.
- Add threading commands, which would allow Juniper to execute two blocks of code simultaneously. For instance, if you want a character's sprite to change at a specific time while a line of text is getting drawn, you could start a thread to wait the right number of milliseconds and then change the sprite.
- Come up with a way for Juniper users to add custom icons to their VNs or even create installers for them. This would most likely involve bundling a bunch of freeware tools and providing step-by-step instructions on what to do with them.
- Add a light entity which would be like a simple image, but instead of being drawn directly it would be blended with whichever entities it was told to illuminate.
- Add the ability to play video files.

By the way, this is the first time I've ever publicly released a piece of software I wrote myself, so there's probably a lot of room for improvement, and I'm very open to any feedback on how to make it better.
« Last Edit: August 11, 2013, 08:49:10 pm by Ixrec »
My ratings and reviews of all the VNs I've ever read:
Enjoy disagreeing with me.


  • Guest
Re: Juniper Latest Version Information
« Reply #1 on: September 25, 2013, 04:15:30 am »
Great job Ixrec,

One thing you'll want to do is upload the source to something like GitHub, which lets users have a poke around the code, submit patches to you for review (to merge into the code), and act as a reliable backup.

I think it has it's own issue tracker as well, so you can add those upcoming features into a list for other users to take a shot at when you're too busy.


  • Administrator
  • Hero Member
  • *****
  • Posts: 2991
Re: Juniper Latest Version Information
« Reply #2 on: September 25, 2013, 04:33:09 am »
Yeah, I'm thinking a move to github will be part of v0.5.  The way my brainstorming has gone thus far, v0.4 will be adding a ton of features I think are important (Mac port, shader system, etc) while v0.5 will largely be about cleaning up the code and making various backend/technical improvements.
My ratings and reviews of all the VNs I've ever read:
Enjoy disagreeing with me.