Hello, everybody!
Update News
It's been nearly a month since the last devlog update here. Apologies for taking so long, but I've been working away relatively quietly on this until I've had something substantial for you all. Now, that time has come, and so I've updated MasterPlan to
v0.7.0. Huzzah!
Anyway, this update is a fairly
meaty one with quite a few new features! I'll iterate through some of the major additions and changes below.
[h2]Re-write![/h2]
I rewrote a large portion of the core logic that handled display and movement of Tasks in MasterPlan; the end result is a nicer codebase to work with, and some optimizations. As an example, depending on how many Tasks you have on your plan, your GPU's VRAM usage may drop considerably (from ~5GB on some plans to 200mb!). In other words, I was doing some things
extremely wrong and I had no idea, haha.
As an aside, some other changes will cost a bit more VRAM than previously (particularly Note Tasks, as text rendering for Notes has been altered to be more optimized for less CPU usage, but a bit more VRAM usage in return). MasterPlan currently does not free VRAM, which makes this a memory leak. This can be solved given some time. In the meantime, though, restarting MasterPlan periodically if you notice your VRAM being consumed drastically would help alleviate this issue.
Another change that is
slightly noticeable is that Tasks now move and expand more fluidly, making their previous instantaneous movements seem stilted in comparison. It's a very minor change, but it's noticeable if you look closely.
[h2]Tables![/h2]
Tables have been added into v0.7.0 and were a suggestion of a user here on the Steam forum (thanks for the suggestion, @jim_hatama!). Since their inclusion, I can't really imagine going back to a time without them!

Tables are much more condensed (and immediately readable!) than a list of checkbox Tasks, but they serve a similar purpose. Tables are generally made for situations where you have to do one task multiple times for multiple events, like making the same set of animations for multiple characters in a video game.
There are three possible states for a cell in a Table - completed (a checkmark), not completed (an empty O), or skipped (an X). You can use a skip (which is placed with right-click) to indicate that a particular task is not to be done, and so it doesn't contribute to the total number of Tasks to complete. In the previous example, an NPC in a video game might not need all of the animations in a Table, and so you can Skip those animations for that specific NPC.
Each cell that is not skipped (whether completed or not) adds to the total number of Tasks to complete at the bottom-left of the window. While Tables aren't numbered, they do contribute as a sub-task just fine, allowing you to easily use a Table within a list of Tasks.
Please feel free to try out Tables, and see if they can help you plan more easily.
[h2]Multithreading![/h2]
The process of downloading sounds and images from the internet and loading GIFs is now multithreaded! Now you don't have to wait as MasterPlan will automatically do this in the background. This also extends to the process of loading your project, which can be quite a bit faster now, if you have images you download from the Internet on your plan.
Downloading time-out times can also be tweaked from the project preferences, in case you're dealing with a server that's a smidge slow on the download.
[h2]Timers, timers, timers![/h2]
Timers now have more options, enabling you to make Timers that are recurring, timers that count down until a specific date, timers that trigger daily or weekly, and even timers that are stopwatches.
Timers can now also trigger Tasks that they are connected to (either through neighboring, or through Lines). This can be useful if you have a series of Tasks that you have to do every day, for example, as a Timer can clear those Tasks for you regularly as long as you have MasterPlan open.
In the future, it would be good to allow Timers to trigger retroactively, even if MasterPlan isn't open, but that's a feature for another update.
[h2]Non-latin characters![/h2]
MasterPlan now supports non-latin character entry! It's not perfect, though; custom font display has a ways to go, and adding all non-latin characters makes general text entry slower. I've optimized some where I could to combat this, but there's still some more things I could do to simplify this even more-so. Also, custom fonts still look busted, haha - please be patient as I work on the font loading and text rendering aspect of things.
___
Thank you very much for sticking with me through this update! Please let me know if anything got wrecked here.
It would be wise to back up your projects prior to loading them in the new version of MasterPlan, just to ensure no data is lost. Also, there were some changes to keyboard shortcuts - please check them after loading MasterPlan up again.
(As an aside, this update is right in time for
7DRL 2021, so if you've been looking to try making something for it, why not try planning it with MasterPlan?)
Best regards, and good planning!
- SolarLune

___
[h2]Full Changelog[/h2]
- Added basic support for non-latin / foreign character entry. Note that you have to specify a font that has the characters you'll be entering (as the default one only has latin characters).
- Tasks now open, move, and expand more smoothly.
- Completely reworked the Undo system; should be slightly more optimized (and is simpler in the code-base, as well).
- Completely rewrote a large portion of the Task update and drawing system; may be more optimized, but it is now primarily simpler in the code-base.
- Tables have been added. A Table is a grid of checkboxes you can click to toggle them, with customizeable, reorderable headers on the left and top indicating names.
- Downloading images / sounds are now multithreaded.
- Modifiers (left ctrl, right ctrl) are now left / right agnostic.
- Now ONLY Check-box Tasks display Sub-Tasks as contributing to their own completion, not any other completable Tasks.
- Added a Daily mode for Timers (so a Timer can trigger every Monday, Friday, etc).
- Added a Date mode for Timers (so a Timer can trigger on a specific date).
- Added a Stopwatch mode for Timers.
- Added a repeatable option for certain Timer types.
- Timers now can trigger neighbor Tasks when they run out. The effect of the trigger differs depending on the Task type - Completable Tasks change their completion level, while Whiteboard Tasks change their colors. Timers start or stop when triggered, naturally.
- Timers who are neighbors to Lines can now trigger the Tasks those Lines are pointing to, and so on.
- Added a Rectangle tool for Map Tasks.
- Themes are now global instead of per-Project.
- Qutting MasterPlan by pressing the window's [X] now prompts for a quit.
- MasterPlan now always confirms when quitting, not just when the current project has been modified.
- Added a keyboard shortcut to quit MasterPlan (Ctrl+Q, by default).
- Added an optional border around the window (specifically for borderless mode if you want a bit more flavor).
- Added shadows for UI elements.
- Map Task type background has been slightly improved, is now a bit transparent.
- Various minor visual tweaks and smaller bug-fixes.
- Added shortcuts to teleport the camera to each end of a line, in sequence.
- The splash screen no longer takes nearly as long as it previously did to disappear. (~2.5 seconds -> ~0.75 seconds)
- Adding shortcuts for incrementing and decrementing Progression Tasks.
- Triggering Checkbox Tasks that have SubTasks will now trigger those SubTasks.
- Timers no longer pause when adjusting their values.
- Count-down timers can't be started if their value is 0.
- The grid dot background is now slightly transparent.
- Added rebindable shortcuts for previously hardcoded window-related functions (window size setting, fullscreen, showing FPS, taking a screenshot).
- Added rebindable Shortcuts for creating specific Task types.
- The "first / main" editable element in the Task Edit Panel for each Task type is now Focused by default.
- Project Volume spinner now goes from 0 to 100, rather than 0 to 10. The volume is also now more naturally distributed audibly.
- You can now hold Shift to select all Tasks between the currently selected one and the top or bottom of the stack with the corresponding shortcuts.
- Messages that display at the top-left last for a much shorter period of time (7 > 3 seconds).
- Timer triggering defaults to off now.
- Images now load in at their original aspect ratio, but the size depends on the zoom level. This means that images and GIFs should generally always be wholly visible onscreen when loaded.
- The option to reset images now is in the Task Edit panel.
- Errors in the message log at the top-left now show up as red.
- When Project resource auto-reloading is on, MasterPlan will now reload a file if the size OR modified time differs from what is cached in the project. (Previously, this was just based on the file being modified after the time when the resource was loaded.)
- Fixed up image and sound auto-reloading. It's no longer experimental, though it's still defaulted to being off.
- Sound Tasks now show the length of the sound and the current position of the playhead.
- Subtask bracketing tweaked to use different colors and is now slightly thicker.
- Adding some basic logging to the project loading process to help diagnose any issues with it.
- Map icon changed from a map to a thumbtack pin.
- Cloudy theme outline darkened to increase readability.
- Removing option to save sounds playing in the project settings; feels like a setting there wasn't really a use case for.
- FIX: Drawing on Whiteboards is no longer chunkier than intended (the resolution has been increased).
- FIX?: Incrementing a Progression Task's current value no longer increases the maximum if they're the same.
- FIX: It's no longer possible to undo a project that has just been loaded.
- FIX: Textboxes now don't take key input immediately after they're visible. This means you can now assign individual keys to shortcuts effectively (i.e. I to create an Image Task, and not type I immediately when the Task Edit dialog appears).
- FIX: Task swapping now is undo-able properly.
- FIX: Adding a new task or deleting Tasks now properly moves the entire stack below it. This works if Tasks are selected across multiple stacks.
- FIX: You can no longer paste characters into Textboxes that don't allow those characters.
- FIX: GIF Animation has been reviewed and fixed up. Animation frames should now be displayed more accurately (though not perfect in all cases, yet). The timing has also been tweaked to properly display GIFs that lack timing information and rely on default timings.
- FIX: Newlines are no longer sometimes overwritten in Textboxes.
- FIX: Slight basic improvements with regards to textbox usability.
- FIX: Whether timers are playing is now properly saved in the project plan.
- OPTIMIZATION: General rendering of Tasks.
- OPTIMIZATION: Cut down VRAM usage for Task editing considerably. This number can account for roughly 80% of the VRAM used for Tasks. (In testing, a plan that previously had 284 Tasks, most of which were Checkbox Tasks, used 1084mb of VRAM. Now it uses 204mb).
- OPTIMIZATION: Text rendering for Notes is now rendered to a texture, which is then rendered to the screen. This increases VRAM usage for Notes specifically, but is faster than rendering text directly to the screen. Work still remains to be done in this area, as there are still VRAM leaks in this regard.