Including os.getenv("USERPROFILE").
That means non-ASCII account usernames should now never cause problems
again. (Like http://ved.idea.informer.com/proj/ved?ia=110463, tested
and confirmed fixed)
Also, I eliminated the flashing command prompt when saving (and making
a backup of the previous version)
[pre09]

This means you can now load and save levels with Unicode filenames,
and possible problems with non-ASCII account usernames or directory
names should disappear.
More testing is always appreciated.
[pre08]

- Subfolders are now supported again.
- There are now no flashing command prompt windows in the levels list
anymore. There should still be one left when saving a level, I'll
see how to solve that one.
- Migrated to wide-character (UTF-16) functions. Converting between
UTF-8 and UTF-16 with a Windows function is millions of times better
than anything to do with code pages (and needing to convert anyway
to avoid crashes because LÖVE very rightfully expects UTF-8).
I just haven't changed loading and saving functions to FFI yet, so
those functions still only work well with ASCII.
[pre07]

Not sure if it's the root cause of #48, but the levels list would
display ALL levels in the current directory (even those offscreen)
and more importantly, filtered levels every frame. That's fine if
there are not many levels, but large amounts of levels will start to
cause the performance to worsen.
Now levels are only filtered once every time the input changes, and
offscreen levels are not displayed.
[pre06]

Previously, if you were to hold down both [ and ], it would just lock
the cursor in place, which wasn't very useful.
This commit makes it so that when you hold [ and ], you're entering a
mode where you're basically drawing in the plus-shape created by the two
lines. However you have to put your mouse in one of the two lines in
first, in order for Ved to know which line you want to move in, but then
afterwards you can move your mouse out and the cursor will stay locked
in to that line.
The rendering has also been changed so the area that isn't in the
plus-shape isn't darker than if only one of [ or ] had been held, and
the tile where the two lines intersect doesn't stick out.
This closes http://ved.idea.informer.com/proj/?ia=104672

If there's a spike right next to the border of the current room, in an
adjacent room, then that will show up on the side as a red line. If the
side is warping then the line will be yellow instead.
Also holy fuck that spike detection code is the ugliest hack I've ever
seen

The commands now supported are:
- loadscript
- ifskip
- ifcrewlost
- iflast
- ifexplored
ifwarp is not on here because I'm not actually sure how it works or even
what it's intended to do. And out of all the ones here ifexplored is
actually the most useful one.
Basically scriptcontext() now outputs an extra variable because
ifexplored takes 3 args instead of 2. And I added a crewmatescript and
positionscript script contexts. Instead of (entityuses, scriptuses),
findscriptreferences() now outputs (entityuses, loadscriptuses,
scriptuses), because I had to differentiate between a main-game script
loader referencing a script versus an actual proper internal script
loader because using the "custom_" trick actually breaks Ved Int.sc mode
scripts without an intervening proper load script.
Closes #39.

Quote from Dav:
"otherwise it attempts to load the custom font under 0.9.x, and ignores
the custom font setting. (There's also other stuff that's done when a
custom font is loaded like setting arrows to ^v<>, replacing non-ASCII
characters in language files and making sure prints are positioned
right, but that only needs to be done once - and `fontpng_works` indicates
that happened)"

FFI basically allows close interaction with, in this case, Windows'
own filesystem functions.
Some of the advantages of doing it this way are that I can get rid of
flashing command prompt windows, and the levels list can show more
info like last modification dates on files.
This is still work in progress, but this is a beginning. **You'll now
see last modification dates on level files if you're on Windows.**
Some drawbacks that'll get fixed:
- Viewing subfolders is temporarily gone
- Time format cannot be chosen yet (is now YYYY-MM-DD 24h)
- Non-ASCII characters will show up even worse than they already did
Testing is appreciated! Other OSes will follow later.
[pre03]

When a level that has a CR or LF in its filename and you open that
level (thus becoming a recently opened level in the settings file)
those newline characters are now correctly encoded.
Additionally, errors in the settings file are now caught and you can
choose to reset your settings if it happens. The contents of the
broken settings file are saved in a crash log.
Also, newlines in filenames will now be displayed as question marks
in the levels list because honestly, other options are probably worse.
That is, if newlines actually don't split filenames in parts (#45),
which I'll hopefully get around to soon.
Closes #44.
[pre02]

Some people pull directly from the git repo and get all changes right
away before they're released. Which is cool, but the version number
system didn't really accomodate for it, so I'm adding a part to the
version number for unreleased versions.
The first change after a release already increases the version number,
which is a holding name and can still change before release (for
example, 1.4.6-pre might suddenly become 1.5.0-pre if I think new
features are big enough)
Version numbers for pre-release versions will look like 1.4.6-pre01.
Each push by me increases the number by one using a git hook.
I've also changed the update checking system so that it **no longer
says your version is outdated if you're using a version that has not
yet been released.** You can now see if there's a newer intermediate
version available than the one you have.
In short, a possible sequence of version numbers is as follows:
1.4.5
1.4.6-pre01
1.4.6-pre02
1.4.6-pre03
1.4.6
1.4.7-pre01
1.5.0-pre02
1.5.0-pre03
1.5.0
I'm also experimenting with a hook that adds the prerelease version
number to commit messages, like you can see below.
Other people who want to contribute to the code and make a merge
request don't need to worry much about the version number, increase
the number in the file `commitversion` if you want but it's far from
vital that it's always correct. As for branching, I'll see what
happens there.
[pre01]

It turns out Ved has been mostly unusable on 0.9.0 for 6.5 months now,
due to a bug in LÖVE itself that was fixed in 0.9.1 ("Fixed
love.graphics.setCanvas() to restore the proper viewport and scissor
rectangles.")
I don't think there's much reason left to keep 0.9.0 supported (except
for me to brag about the wide amount of versions supported). Nobody
depends on it as far as I know (0.9.1 and 0.9.2 have the same system
requirements), and nobody is using it anymore either judging by the
fact I don't remember anybody reporting this for all this time:
https://cdn.discordapp.com/attachments/403718283855134720/555111580250013696/unknown.png
Plus I can now make the code a little cleaner with a few other changes
that were made in 0.9.1.

Being able to open level files anywhere in your filesystem may be added
later, but from now on it's possible to specify the full path of a
level file as a CLI argument, as long as it's inside your levels
folder.

- **You can now scroll and thus see all the search results**
- Exiting the script editor will now go back to the search results page
if you came from there
- Column headers now show the types of search results and the amounts
- Removed taking input leak and fixed returning to the search results
from a level note after editing it (which already worked, but changed
the search term)
((if you're making a plugin and want to know how to make something
scrollable, this commit may be good to look at. Though I should add
hooks for the scrolling functions in func.lua))

If you modified a room, then switch to a different room, and the first
thing you did in that room is auto-expand spikes, that time (that
click) it would look at the previous room when determining how to
expand spikes.

So from this version onwards, you can now see changes to the changelog
or see whether a new version has been released without having to
restart Ved.
Scrolling text can now also be displayed under the version info via
the update checking system, which could be used in case it turns out
there's a major issue in a certain version of Ved and I need to warn
users of that version not to save with it, or something. So in
principle, I don't plan on using it much if at all.

Well, I guess you could say the way VVVVVV interprets the level is
always correct. You have 400 rooms, always, even in smaller levels,
and those rooms come with their according properties.
Except for platv, where VVVVVV technically thinks there's only as many
edLevelClasses as there are rooms in the current map size, and will
look at platv attributes for other rooms.
So now Ved takes this into account when loading and saving: platv is
loaded according to how VVVVVV interprets them (and out-of-bounds rooms
are considered speed 4), set correctly in Ved's data structures (to the
correct rooms), and when saving it once again lays out all the platform
speeds according to current map width.
I thought I needed to implement a warning because platform speeds only
seemed to work properly in 20x20 levels, but with this, platform speeds
work well in levels of all sizes.
Have a little visualisation I used: https://i.imgur.com/4ExHsTp.png

This means using font.png won't drop accents (fentre) but will replace
them with ASCII (fenetre)
TODO: Make some sort of automatic check (whenever I download language
files or so) that warns when new non-ASCII characters are used so they
can be added to fontpng_ascii. I just added the characters that are
actually used in the language file right now, but of course another
may be used anytime.

SpriteBatches are now used to draw tiles which should be a lot more
efficient and are _the_ way to even do this kind of thing, which I
wasn't really aware of. That means quads for 1200 tiles now are no
longer individually drawn, but added to a spritebatch and then the
spritebatch is drawn. This means higher performance.

I want the button to be more descriptive of what's behind it (a
changelog and anything else I can update at any time, maybe a news
page at some point?) and "More info" seems boring and doesn't really
seem inviting to click on.
I've been considering "Live info" but "Latest info" seems better, also
if I were to make any reference to "online info" or anything like that
it'd seem like the button would immediately open your browser which it
does not.
Also "CTRL" and "SHIFT" in certain labels can now be translated.