Hey all, the update is live.
I built a temporary workaround in for duplicate UIDs. It simply checks if the UID has already been taken, and generates a new one. This will likely result in connections being attached to the wrong bubbles, but that should be easy enough to fix manually. Again I apologize for this oversight.
More importantly though, I added a palette creator so you can assign color palettes to each bubble. The difference between the palette system and the color picker from the old Chronicler is that modifying a palette updates all bubbles using that palette. For example, if you wanted to change the default color palette for all story bubbles, its as simple as editing that default palette and hitting save!
Palettes can also have names associated with them. In the case of Choice of Dragon for example, I added palettes for “Brutality”, “Cunning”, “Disdain”, and I renamed the default story palette to “Common.” This way you can easily follow which paths of your story affect which variables. (if you apply palettes correctly haha)
Controls for the palette button are as follows:
- Right clicking on the palette button creates a new palette.
- Right clicking on an existing palette lets you edit it.
- Right clicking on a bubble while in “paint” mode will select its palette.
In paint mode the mouse cursor changes to the currently selected palette.
As you can see, it involves a lot of right clicking which is not ideal. I plan to add these actions to the edit menu at some point in the future.
I also need to add the ability to delete palettes. Right now if you create an invalid palette, simply ignore it until you need a new one, and then edit it rather than add.
I also intend to add an “Export Palette” button that lets you choose which palettes you wish to export into a single file, for import into another project.
I feel I should explain a little bit about the UID conundrum. Essentially I needed a way for connections to remember which bubbles they were attached to after saving and loading a project. Simply storing the memory address of the bubble would not work as they would be assigned new ones by the OS at runtime.
So I added a UID (Unique Identifier) to each bubble.
When a project is loaded, it instantiates all bubbles and connections, then loops through the connections and attaches them to the bubbles with the correct UIDs.
The way a UID is generated is simple, I just loop until I find the lowest UID not taken. In other words, if you created 10 bubbles, and deleted the 7th one, it opened up “7” as a valid UID, and the next created bubble would take it.
While not as efficient of a method, it is still better than having a global UID that gets incremented every time a bubble is created. Eventually you would run out of UIDs even though you had deleted a million bubbles.
I could make this more efficient by having a second list of “available UIDs” that have been freed, on top of the global UID. I’ll probably change it to this system eventually, but right now you shouldn’t notice any slowdown until you have thousands of bubbles in your scenes.
I also hate to admit it, but I don’t think I’m going to have time to properly implement the variables or stats screen editors before I’m thrust out into the boondocks for the summer.
The reason for this is that I don’t want to throw together a hack job like the ones in the old Chronicler.
I want the stats screen editor to be visual, and you can just drag controls around on the page and see how they look in realtime. I will of course have a “code” control that allows for you to type advanced features, but for the most part you’ll just want to drag the bars in and assign variables to them.
One further statement and I’ll stop chewing your ear off haha.
I’ve made my decision regarding Action bubbles. I’m going to keep them in a list, but the list will have varying columns. Each column will have a spinbox that lets you choose the action and relevant data associated with it.
For example:
“*set experience %+ 10”
would have a column for
- the action (*set)
- the variable (experience)
- the operator (%+)
- and the value (10)
Being spinboxes, they allow you to type whatever you want into them, or let the context provide you with a dropdown of suggestions. The value box would let you type in 10, but would also let you choose one of your variables to use instead.
I feel this makes it modular enough for advanced users, and simple enough for new users to see all the options available to them.
Thanks, and happy Chronicling!