ChronicleHub: a QBN engine like StoryNexus

Honestly, making a game is a lot of effort. I’m currently working on just getting the platform working correctly, and then hopefully fully porting the Black Crown project.

However, I did just push an update (where you may see I’m also working on a little project myself):

Love to join the beta test. I love StoryNexus (I never got to try it) and would love to play!

Welcome to the forums!

Hey, welcome to the forum!

The website is still very much in Alpha, and I keep finding bugs myself or have others point them out to me every day. If you can pm me the email you intend to register with, I’ll add it to the whitelist so you can register.

Little update on the Black Crown port.
This layout consumed my entire day

Okay, quick update:

My todo list is still very large and there are still a great many bugs in the system, but I got two important features working:

  1. Data exporting and importing (so you can protect your data) with proper input verification to protect the database from malicious injection.
  2. Email verification.

These two were my main requirements for opening up the website, as they relate to vital user and data security (you don’t play around with those). I have disabled the need to be whitelisted.

However, since this is still in alpha, I am very much still working on fixing bugs and improving the user experience, and you may see some layout elements and features change between days.

Just in case you don’t know, += on qualities is really buggy, and you can’t move between locations. Also map regions disappear even if you save them.

Ah, thanks for letting me know, I’ll need to give these a look.

What’s buggy about the += command?

Adds 2 not 1

On another note, figured people might have a desire to add music to their ChronicleHub games and have it be adaptive to qualities.

…So I made a parser language for that which pulls from a small sample library I’ve cobbled together and is ScribeScript compatible. Oops.

Anyway, here’s Bloody Tears from Castlevania written in Ligature.

You can copy paste it into the Ligature playground to hear it.

Note that I’m still working out all the functionality for editing here as well to make writing Ligature much easier for less musically inclined authors.

[CONFIG]
BPM: 118
Grid: 4
Time: 4/4
Scale: A Minor

[INSTRUMENTS]
drawbar_organ: drawbar_organ
string_ensemble_1: hq_violin
acoustic_bass: acoustic_bass
room_kit: standard_kit
ocarina: ocarina
timpani: timpani
synthstrings_1: synth_strings_1

[PATTERN: drawbar_organ_1]
drawbar_organ | 4, 1, 1 1,   7, 1, 6, 1,   5, 1, 6, 1,   5, 1, 4, 1, | 5, 1, 6, 1,   7, 1, 6, 1,   5, 1, 3 1,   5, 1, 4, 1, | 4, 1, 1 1,   7, 1, 6, 1,   5, 1, 6, 1,   5, 1, 4, 1, | 5, 1, 6, 1,   7, 1, 6, 1,   5, 1, 3 1,   5, 1, 4, 1, |

[PATTERN: string_ensemble_1_1]
string_ensemble_1 | 4,,, - - -   - - - -   - - - -   - - - - | 1,, - - -   - - - -   - - - -   - - - - | 3, - - -   - - - -   - - - -   - - - - | - - - -   - - - -   - - - -   (4,, 4,,,) -   -    - |
room_kit          | .    . . .   . . . .   . . . .   . . . . | .   . . .   . . . .   . . . .   . . . . | .  . . .   . . . .   . . . .   . . . . | . . . .   . . . .   . . . .   (3, 1#,,)  1,, 6,,, - |

[PATTERN: string_ensemble_1_2]
string_ensemble_1 | (5 7 5,, 7,,) - (3'' 3) (1' 6 1, 6,,)   - -     -    -   -     - -    .     (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (7 5 7,, 5,,) - -    (3'' 7 3 7,,)   - -     (1' 6 1, 6,,) -    -     - -    -      (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (4 7 4,, 7,,) - (3'' 3) (1' 6 1, 6,,)   - -     -    -   -     - -    .      (7 3#' 7,, 3#,) -     (1' 4 1, 4,,) - | (7 1#' 7,, 1#,) - -    (3'' 7 3 7,,)   - -     -    .      (4 1' 4,, 1,) - -    (3#' 1#' 3#, 1#,)   -     -             -    .    | (5 7 5,, 7,,) - (3'' 3) (1' 6 1, 6,,)   - -     -    -   -     - -    .     (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (7 5 7,, 5,,) - -    (3'' 7 3 7,,)   - -     (1' 6 1, 6,,) -    -     - -    -      (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (4 7 4,, 7,,) - (3'' 3) (1' 4 1, 4,,)   - -     -    -      -     - -    .      (7 5 7,, 5,,) -     (1' 6 1, 6,,) - | (4 1#' 4,, 1#,) - -    (3'' 4 3 4,,)   - -     -    .      (1, 5,, 1' 5) -    (1#, 4,, 1#' 4) -      (1,, 3# 1 3#'') -    (5, 3#, 5' 3#') -    |
acoustic_bass     | 4,,,          - -       1,,             - 4,,   .    .   4,,,  - -    1,,   -             -     4,,           - | 3,,           - -    7,,,            - -     3,,           3,   -     - -    7,,,   -             -     3,,           - | 1#,,,         - -       6,,,            - 1#,,, 1#,, -   -     - -    6,,,   1#,,,           1#,,, 1#,,          - | 1,,             - -    5,,,            - 4#,,, 5,,, 7,,,   1,,           - -    1,,                 -     -             3#,, -    | 4,,,          - -       1,,             - 4,,   .    .   4,,,  - -    1,,   -             -     4,,           - | 3,,           - -    7,,,            - -     3,,           3,   -     - -    7,,,   -             -     1#,,          - | 1#,,,         - -       4,,,            - -     6,,, 1#,,   -     - -    4,,,   6,,,          4,,,  1#,,          - | 7,,,            - -    7,,,            - 4,,,  6,,, 7,,,   1,,           -    -               1,,    -               -    1,,             -    |
room_kit          | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -   1#,,, . 4,,, -     1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,, 1#,,,           . 1#,,, 4,,,          -    1#,,, . 4,,, -      1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -   1#,,, . 4,,, -      1#,,,           1#,,, 4,,,          - | 1#,,,           - 4,,, 1#,,,           . 1#,,, 4,,, -      1#,,,         . 4,,, -                   1#,,, (1#,,, 1#,,,) 4,,, 4,,, | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -   1#,,, . 4,,, -     1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,, 1#,,,           . 1#,,, 4,,,          -    1#,,, . 4,,, -      1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -      1#,,, . 4,,, -      1#,,,         1#,,, 4,,,          - | 1#,,,           - 4,,, 1#,,,           . 1#,,, 4,,, -      4,,,          4,,, (4,,, 4,,,)     4,,,   4,,,            4,,, 1#,,,           4,,, |

[PATTERN: string_ensemble_1_3]
string_ensemble_1 | (4, 4,,) - -     -       - -     -    -   (3 3,) - -     -      -     -     -    - | (6, 6,,) - -      -       - -     -    -   (7, 7,,) - -     -      -     -     -    -    | (1 1,) - -     -       - -     -    -   (7, 7,,) - -     -      -             -     -    - | (6, 6,,) - -      -       - -     -    -      (3' 3) -    -     -      - -     -           -    |
acoustic_bass     | 4,,,     - 7,,,, 1,,     - 4,,,  4,,  -   3,,    - 6,,,, 7,,,   -     3,,   3,   - | 1#,,,    - 4#,,,, 6,,,    - 1#,,, 1#,, -   3,,      - 6,,,, 7,,,   -     3,,   3,   -    | 4,,,   - 7,,,, 1,,     - 4,,,  4,,  -   3,,      - 6,,,, 7,,,   -             3,,   3,   - | 1#,,,    - 4#,,,, 6,,,    - 1#,,, 1#,, -      3,,    -    6,,,, 7,,,   - 3,,   3,          -    |
room_kit          | 1#,,,    - 4,,,  1#,,,   . 1#,,, 4,,, -   1#,,,  . 4,,,  -      1#,,, 1#,,, 4,,, - | 1#,,,    - 4,,,   1#,,,   . 1#,,, 4,,, -   1#,,,    . 4,,,  -      1#,,, 1#,,, 4,,, 4,,, | 1#,,,  - 4,,,  1#,,,   . 1#,,, 4,,, -   1#,,,    . 4,,,  -      (1#,,, 1#,,,) 1#,,, 4,,, - | 1#,,,    - 4,,,   1#,,,   . 1#,,, 4,,, 4,,,   1#,,,  4,,, 4,,,  .      . 1#,,, (4,,, 4,,,) 4,,, |

[PATTERN: string_ensemble_1_4]
string_ensemble_1 | (5 7 5,, 7,,) - (3'' 3) (1' 6 1, 6,,)   - -     -    -   -     - -    .     (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (7 5 7,, 5,,) - -    (3'' 7 3 7,,)   - -     (1' 6 1, 6,,) -    -     - -    -      (7 5 7,, 5,,) - (6 4 6,, 4,,) -    | (4 7 4,, 7,,) - (3'' 3) (1' 6 1, 6,,)   - -     -    -   -     - -    .      (7 3#' 7,, 3#,) -     (1' 4 1, 4,,) - | (7 1#' 7,, 1#,) - -    (3'' 7 3 7,,)   - -     -    .      (4 1' 4,, 1,) -    -    (3#' 1#' 3#, 1#,)   - - -           .    |
acoustic_bass     | 4,,,          - -       1,,             - 4,,   .    .   4,,,  - -    1,,   -             -     4,,           - | 3,,           - -    7,,,            - -     3,,           3,   -     - -    7,,,   -             - 3,,           -    | 1#,,,         - -       6,,,            - 1#,,, 1#,, -   -     - -    6,,,   1#,,,           1#,,, 1#,,          - | 1,,             - -    5,,,            - 4#,,, 5,,, 7,,,   1,,           -    -    1,,                 - - 3#,,        -    |
room_kit          | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -   1#,,, . 4,,, -     1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,, 1#,,,           . 1#,,, 4,,,          -    1#,,, . 4,,, -      1#,,,         . 4,,,          4,,, | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -   1#,,, . 4,,, -      1#,,,           1#,,, 4,,,          - | 1#,,,           - 4,,, 1#,,,           . 1#,,, 4,,, -      1#,,,         4,,, 4,,, 1#,,,               . . (4,,, 4,,,) 4,,, |

[PATTERN: string_ensemble_1_5]
string_ensemble_1 | (5 7 5,, 7,,) - (3'' 3) (1' 6 1, 6,,)   - -     -    -    -     - -    .     (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (7 5 7,, 5,,) - -    (3'' 7 3 7,,)   - -     (1' 6 1, 6,,) -    -     - -    -      (7 5 7,, 5,,) -     (6 4 6,, 4,,) - | (4 7 4,, 7,,) - (3'' 3) (1' 4 1, 4,,)   - -     -    -      -     - -    .      (7 5 7,, 5,,) -     (1' 6 1, 6,,) - | (4 1#' 4,, 1#,) -    - (3'' 4 3 4,,)   -    -     -    .               (1, 5,, 1' 5) - (1#, 4,, 1#' 4) -     (1,, 3# 3#'' 1) -    (5, 3#, 5' 3#') -    |
acoustic_bass     | 4,,,          - -       1,,             - 4,,   .    .    4,,,  - -    1,,   -             -     4,,           - | 3,,           - -    7,,,            - -     3,,           3,   -     - -    7,,,   -             -     1#,,          - | 1#,,,         - -       4,,,            - -     6,,, 1#,,   -     - -    4,,,   6,,,          4,,,  1#,,          - | 7,,,            -    - 7,,,            -    4,,,  6,,, 7,,,            1,,           - -               1,,   -               -    1,,             -    |
room_kit          | (1#,,, 4,,,)  - 4,,,    1#,,,           . 1#,,, 4,,, -    1#,,, . 4,,, -     1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,, 1#,,,           . 1#,,, 4,,,          -    1#,,, . 4,,, -      1#,,,         1#,,, 4,,,          - | 1#,,,         - 4,,,    1#,,,           . 1#,,, 4,,, -      1#,,, . 4,,, -      1#,,,         1#,,, 4,,,          - | 1#,,,           4,,, . 1#,,,           4,,, 1#,,, .    (1#,,, 1#,,,)   4,,,          . (3, 3,)         3,    (1#,, 1#,,)     1#,, 7,,,            7,,, |
ocarina           | .             . .       .               . .     4,   5,   6,    - -    -     -             -     -             - | -             - -    -               - -     -             -    4     - 5    -      6             -     1'            - | 4'            - -       -               - -     -    -      -     - -    5'     -             -     6'            - | 5'              -    - -               -    -     -    -               -             - -               -     -               -    -               -    |

[PATTERN: string_ensemble_1_6]
string_ensemble_1 | (4,,, 4,,)        -    -     -                   -    -    (4 4' 4 4')   (4 4')   (3,, 3,)      -    -     -               -    -    (4 4' 4 4')   (4 4') | (1#,,, 1#,,)          -    -      -                       -    -     (4 4' 4 4')   (4 4')   (3,, 3,)      -             -             -               -             -             -             -                            | (4,,, 4,,)        -    -     -                   -    -    (4 4' 4 4')   (4 4')   (3,, 3,)      -    -     -               -    -    (4 4' 4 4')   (4 4') | (1#,,, 1#,,)  -    -             -               -    -     (4 4' 4 4')   (4 4')   (3,, 3,)          -                     -                 -   -                     -                 - -                     | - -                 - -   - -                     - -   - . . .   . . . . |
acoustic_bass     | 4,,,              -    7,,,, 1,,                 -    4,,, 4,,           -        3,,           -    6,,,, 7,,,            -    3,,  3,            -      | 1#,,,                 -    4#,,,, 6,,,                    -    1#,,, 1#,,          -        3,,           -             6,,,,         7,,,            -             3,,           3,            -                            | 4,,,              -    7,,,, 1,,                 -    4,,, 4,,           -        3,,           -    6,,,, 7,,,            -    3,,  3,            -      | 1#,,,         -    4#,,,,        6,,,            -    1#,,, 1#,,          -        3,,               -                     6,,,,             .   7,,,                  -                 - 3,,                   | . 3,                - -   - -                     - -   . . . .   . . . . |
room_kit          | 4,,,              4,,, 4,,,  4,,,                4,,, 4,,, (1#,, 1#,,)   3,       4,,,          4,,, 4,,,  4,,,            4,,, 4,,, (1#,, 1#,,)   3,     | 4,,,                  4,,, 4,,,   4,,,                    4,,, 4,,,  (1#,, 1#,,)   3,       4,,,          4,,,          4,,,          4,,,            4,,,          4,,,          4,,,          4,,,                         | 4,,,              4,,, 4,,,  4,,,                4,,, 4,,, (1#,, 1#,,)   3,       4,,,          4,,, 4,,,  4,,,            4,,, 4,,, (1#,, 1#,,)   3,     | 4,,,          4,,, 4,,,          4,,,            4,,, 4,,,  (1#,, 1#,,)   3,       4,,,              4,,,                  4,,,              .   4,,,                  4,,,              - 4,,,                  | - 4,,,              - -   . 4,,,                  - -   - . . .   . . . . |
timpani           | (4,, 4,, 4,, 4,,) .    .     (4,, 4,, 4,, 4,,)   .    .    (1, 1, 1, 1,) .        (3, 3, 3, 3,) .    .     (3, 3, 3, 3,)   .    .    (1, 1, 1, 1,) .      | (1#,, 1#,, 1#,, 1#,,) .    .      (1#,, 1#,, 1#,, 1#,,)   .    .     (1, 1, 1, 1,) .        (3, 3, 3, 3,) (3, 3, 3, 3,) (3, 3, 3, 3,) (3, 3, 3, 3,)   (3, 3, 3, 3,) (3, 3, 3, 3,) (3, 3, 3, 3,) (3, 3, 3, 3, 3, 3, 3, 3, 3,) | (4,, 4,, 4,, 4,,) -    -     (4,, 4,, 4,, 4,,)   -    -    (1, 1, 1, 1,) -        (3, 3, 3, 3,) -    -     (3, 3, 3, 3,)   -    -    (1, 1, 1, 1,) -      | (1, 1, 1, 1,) -    (3, 3, 3, 3,) (3, 3,)         .    .     (1, 1, 1, 1,) .        (1,, 1,, 1,, 1,,) (5,,, 5,,, 5,,, 5,,,) (1,, 1,, 1,, 1,,) .   (5,,, 5,,, 5,,, 5,,,) (1,, 1,, 1,, 1,,) . (5,,, 5,,, 5,,, 5,,,) | . (1,, 1,, 1,, 1,,) - .   . (5,,, 5,,, 5,,, 5,,,) - -   . . . .   . . . . |
synthstrings_1    | (5,,, 5, 5,,)     -    .     (4,,, 4, 4,,)       -    -    -             .        (5,,, 5, 5,,) -    .     (4,,, 4, 4,,)   -    -    -             .      | (5,,, 5, 5,,)         -    .      (4,,, 4, 4,,)           -    -     -             .        (6,, 6, 6,,,) .             (5,, 5, 5,,,) .               (4,, 4, 4,,,) .             (3, 3 3,,)    .                            | (5,,, 5,, 5,)     -    .     (4,,, 4,, 4,)       -    -    -             .        (5,,, 5,, 5,) -    .     (4,,, 4,, 4,)   -    -    -             .      | (5,,, 5,, 5,) -    .             (4,,, 4,, 4,)   -    -     -             .        (6,,, 6,, 6,)     .                     (7,,, 7,, 7,)     -   .                     (5,,, 5,, 5,)     . (6,,, 6,, 6,)         | - -                 - -   - .                     . .   . . . .   . . . . |

[PLAYLIST]
drawbar_organ_1, string_ensemble_1_1
string_ensemble_1_2
drawbar_organ_1, string_ensemble_1_3
string_ensemble_1_4
string_ensemble_1_5
string_ensemble_1_6

Dracula! I am backula, to lay the Smackula…

Oh, never mind. Can I get whitelisted? I’d like to test the system for any accessibility issues, WCAG compliance, Etc. Also, not to be finicky, but can you describe what’s in your screenshots next time, so that the blind and visually impaired like myself can understand what you’re trying to show off?

I can’t promise anything regarding the images, but I am willing to try at least.

Also, I am pretty sure I commented out the line about needing to be whitelisted, so you should be able to just register, now that email verification actually works. If you can’t, please let me know!

Not sure what you mean here, but it’s not too hard. Here’s a guide to add alt text (out of many out there). To add alt text on the forum, write it in the brackets that show up when you upload a picture like this: ![alt text here](picture link) Some examples from the first two images of your first post:

Thank you, this is very helpful! I’ll try to remember doing this on posted images for accessibility.

As a musician and an IF author, I would not want to use Ligature at all in its current form. General MIDI has been outmoded since the 90s and this sounds even worse than that. The mixing is really bad (for example, the instruments have inconsistent volume levels and the master limiter is way too aggressive) and there’s apparently no user control over it. I don’t even see any way to add per-note velocity.

If you really wanted some kind of limited space-saving format, why don’t you look at implementing .MOD playback support instead of trying to make your own custom system? Even so, web speeds are high enough now that it’s common for online games to have normal PCM audio, and I would want to have that option.

(Are the examples and presets in the Ligature Playground AI-generated? The copious tautological comments in the examples and the bland descriptions for the preset patterns really make me wonder. “Works great for trailers”?)

Agreed, though if you still wanted a language for creating music a la ligature, you could always use one of the more standard musical languages, AKA MML. But, @flacrabbit is right. Using wav or MP3 files shouldn’t be too much of a hassle for modern browsers.

This music creation is a really interesting idea! In the interest of building off of existing platforms, I wonder if using Strudel may be easier (and more powerful for users) in creating compelling music? It can be embedded which simplifies integration. For folks that haven’t seen it before, this is what it looks like to use it (it’s awesome).

Yeah, the inconsistent velocities is currently a big one I’m trying to figure out. It’s mostly the result of having assembled a rag tag library of sample instruments which I haven’t cleaned up yet, and the UI doesn’t show the defaults for velocity, attack, sustain and decay for each instrument.

I was currently working on introducing some better controls like those used in old tracker music, which does seem to take the sound of it at least a step further. But I definitely get your point, this system is currently heavily under construction, and seriously lacks some important features.

I did add per note velocity today, but didn’t push that version yet. I might need to actually add explicit control to the master limiter, yes. I put that in when an earlier iteration was blowing out my eardrums.

A number of the presets in the sidebar were, yes, just to see if I could get some quick examples as a proof of concept. I keep changing syntax and little things left and right to update the system, so I did not want to commit to hand crafting too many assets yet.

Since I’m mostly developing what tools I might find useful as a musician myself, I might be blind for others’ needs, so please tell me what you would appreciate in terms of tools and sounds.

Beyond the tracker-like commands, I’m currently trying to get the piano roll working, and also show the defaults better for preset instruments, as I’ve noticed it’s hard to guess otherwise. However, this is valuable feedback, thank you

So, this was partially inspired by MML, but I did not like using it as much, and also didn’t want to be limited to midi.

In addition, it’s not so much the hassle of file parsing for modern browsers as it is storing any and all audio files people might upload. It’s still very much a hobby project with no real commercial intent, so unless I figure out how to pay for more storage, I need to be somewhat memory conscious

Also, I did some basic testing of making the system adaptive to the narrative, which also worked here. Though most likely, I could make that work with any typed music language.

I did not know Strudel could be embedded! And I did consider Strudel, and maybe I really still should consider it. I noticed the syntax just didn’t mesh entirely well with my brain, so I figured I could write a parser language that could generate music. Admittedly, I might just be doing this for the sport of it more than actual practicality? Or because, if I’m missing features, or people mention they are missing features, I can just modify my own code.

Also, interestingly I had been playing around with a conversation tool for such music. Maybe the problem is genuinely with trying to reinvent a DAW, but for the sake of convenience I’d like to at least make sure people have a solid toolset on the website itself. So, again, anything you can recommend me in terms of quality of life or convenience I would appreciate. In its current state I also struggle to write what I want in the system, so it’s already a sampler under the hood, and I’m currently building in the syntax and visualiser(s) to give better insight into what the music actually looks like.

Though admittedly, aside from improving the language, I am very much considering seeing whether I can match the embedding requirements for Strudel (needing to be open source) so I can put that in. I’m also considering offsetting database and storage costs with a cheap supporter tier, allowing a user to upload images, music and samples directly to the website and sharing those in a community hub while helping pay for upkeep (I really do wish to emphasize I have no commercial aim with this).

Alternatively, I could look into functionality for using links to other online resources that just fetch the music on the fly, kind of like how you can put in links to external images. This might actually work with .MP3 files.

But, to get back to one of your points. I think you might be right. Ligature in its current state is a mess. I’m working on improving it, but I’m turning it into what is almost a combination between a regular modern DAW, a Tracker and a code editing interface. This is bound to introduce headaches for me in the future.

As such, what I think I will do is follow your advice, and allow for directly uploading .it, .xm and .mod files and find a way to integrate that directly as an additional option with good documentation on what these files are, where to find them, so it continues to be convenient to use.

So, quick update again.

I upgraded the midi-converter I had built to now also parse .it data. I haven’t stress tested the .umx integration as much yet, and was succesful in getting the UNATCO theme from Deus Ex imported as Ligature code with some cleanup in the importer dashboard.

I do still intend to allow direct imports of tracker files however, because I do realise Ligature might just be my little obsession, but it’s a fun project nonetheless. Converting UNATCO did make it painfully obvious I am still missing some important features, like better looping capabilities, or the ability to cut off a track to kill some organ or string sample sustain early. However, there is progress!

Anyway, here is a small tech demo of that conversion. It’s a fun little exercise, but maybe just a straight import would be cleaner.

Edit:
Since the samples aren’t very pretty, and I have yet to go through the preset database to clean them up manually or write a normaliser, I made sure to add a little instrument editor menu to modify the sample-based instruments. This latest version should be online now.