In working on my fancase All the Brooks and Soldiers, I kept running into the limitations of AAO. Not because AAO is inadequate - far from it! AAO can do pretty much any reasonable thing you'd want to do.
Sadly, I'm not doing reasonable things.
Suppose you want to embed elaborate Professor Layton-style puzzles, have smoother 3D object rotations than PyWright allows, or otherwise extend the base idea of an "AA game." You can fake some of that in PyWright, AAO, or even Ren'Py, but it'd be nice to have a framework that's a more open to extension in ambitious ways.
That brings me to UCANT.
What is UCANT?
In a few words: An Adventure VN engine for people who like to program, but also like having tools to make that easier.
In more words:
UCANT is a set of Unity assets, including lots of scripts and a simple text script parser. I'm using it to make All the Brooks and Soldiers, and that's its main purpose. But I will release it to the public to see if other people can make use of it, and try to support it in whatever limited way I can.
When should I use UCANT?
UCANT is meant for the following case:
* You are making an adventure novel, a hybrid of adventure game and visual novel. Examples include AA games, Professor Layton, Dangan Ronpa, Zero Escape, etc.
* You need a simple, clean way to handle dialogue and control flow, but also have gameplay scenes that diverge drastically from choice-clicking.
*** Those gameplay scenes would be easier to make in Unity than in Ren'Py.
* You want an engine that makes good use of a large chunk of the screen (like AAO), supports scaling (like PyWright), and does NOT necessarily emulate the look-and-feel of the DS/3DS.
* You are willing to write scripts in text for most basic operations.
* You are prepared to learn how Unity works for more advanced operations, like making your own minigame/special interface. CantScript lets you make "hooks" to stuff you write in Unity pretty easily.
* You are mostly using original assets, not importing pre-existing ones. AAOs make it very easy to use assets from AA, and PyWright has pre-built asset libraries! It's a bit tougher in UCANT. Not so much anymore! Now it takes animated .gifs
In short, UCANT is best used when...
* PyWright and AAO, which have had a lot of development work put into their usability, will not work for your project.
* Ren'Py will not work for your project.
What are the disadvantages of UCANT?
* Want to load pre-made AA assets from an online database (like AAO does) or asset packs (like PyWright)? UCANT.
* Want to import an animated GIF and have it straightforwardly turned into a talking character? UCANT.
*** To be fair, animating characters is a pain in every system, and at least UCANT is friendly towards making new expressions by mixing and matching eyes and mouth for a character.
*** You could even Frankensprite inside Unity using the animation editor, if you wanted. I suspect you should not, though.
*** Now animated gifs are supported and work very nicely!
* Want to prototype a game as quickly as possible? UCANT.
What are the advantages of UCANT?
* Simplifies integration of relatively gnarly game engine stuff. If you want to put in a 3D exploration scene, I'm going to try to keep out of your way.
* Simplifies AA-style text display and warns you about four-liners, etc.
* Simplifies common refinements to VN game design, such as giving shorter summary dialogue on repeated Talk/Examine commands, etc.
* Does not rely on loading assets from the Internet every time the game is played. You could put a complete build of your game on DropBox or even torrent it, and that'd be that. (PyWright also allows this.)
* Does some simple type checking and error handling early on, so that you aren't surprised by errors after the game begins.
*** Of course, not all errors can be eliminated this way. I can't detect an infinite loop, for example!
* Built on the Unity framework, which has lots of tutorials and documentation online.
* Works on any system Unity can deploy to (Mac, PC, etc) with a single click of the Build button. Warning: Not optimized for phones!
How does one use it?
* Get Unity 5 and import the UCANT .cs files.
* Add all the assets you need to use (characters, backgrounds, etc) to the appropriate folders.
* Register the assets with the game - for characters, this involves making a file that tells the game what a character's animations are, etc.
* Write any special engines you are adding to the framework using Unity's editor and C#.
* Either define new CantScript functions that can hook into your engines, or use the predefined "EngineHook" function to allow your CantScript scripts to call your engine.
* Write your game scenes as text files in CantScript.
* Playtest and revise, expect a certain amount of suffering at this stage.
What is CantScript?
CantScript is a custom language for Adventure Visual Novel writing that aims for:
* Brevity for common commands. PyWright, Ren'Py, and Catalysis all can be good examples in this regard.
* Principle of least surprise - how commands work should be fairly intuitive.
* Failing early and loudly, not quietly and subtly. If you make an obvious mistake in your code, ideally UCANT will throw an error at you as soon as the game starts, even if the error is in the endgame.
**** To this end, CantScript uses static typing - that is, commands expect very specific kinds of objects, and will complain as soon as the game runs.
**** This means you have to declare your variables, but there's a lot of leeway as to where you do that.
CantScript is not built for super-high speed. This is a deliberate choice - Adventure Novels tend not to require that in general, and specific segments that would require it can be handled as C# scripts you write yourself and hook in.
Where is the project now?
I'm implementing CantScript gradually. I've gotten a good enough system for handling commands in general, but we'll see how well it sticks together when I add flow control!
My first step is to make a pre-alpha version that has the following capability:
* Show dialogue
* Set variables
* Do flow control, including player choice
* Display characters, backgrounds, and textboxes.
I'd like to see if people can make simple choice games with that! Then once I've gotten feedback on usability and documentation, I can add more and more features.
Once I am at that stage, setting up some kind of online code repository seems like a good idea.
Comments and suggestions are welcome, though I'm going to try to limit how much stuff I implement "out of the box." The goal here is to make AA or Danganronpa-styled games, not recreate AA or DR.
"A slow sort of country!" said the Queen. "Now, here, you see, it takes all the running you can do, to keep in the same place. If you want to get somewhere else, you must run at least twice as fast as that!"