ChronicleHub: a QBN engine like StoryNexus

It was possible in SN to obviate the action economy - I believe you could set any card to have a “free” cost. I think in Final Girl I just set the player’s action pool to 1000 so they’d never run out.

There must have been locations in SN but I don’t remember it so clearly. In Final Girl I remember keeping track of x/y quality coordinates to determine where the player was, but that game was specifically designed to be slightly confusing to navigate, and there were cards the player could draw to “discover” a trail to the east that allowed movement that way, and if you were up against a wall of the map it disqualified drawing cards that would let you increase or decrease a coordinate beyond where you could go.

I beg you not to just blanket GeoBlock the UK from your site, as so many other IF sites have done.

2 Likes

Not to worry, it sucks for everyone. I’ll see what I can legally get away with

Also, it should be that there can be multiple decks in a location

1 Like

It already is, comma seperate them :+1:

1 Like

Thinking about it now (sorry if it has been mentioned already), what about writing stories in languages other than English?

In StoryNexus, you could, but all the UI remained in English.

Did you already think about that, and all the infrastructure is there, or would it be a lot of work to add it? (Not talking about the translations themselves, other people could do that.)

1 Like

Unlocking and locking doesn’t work

Quick heads up: I am currently caught up in a massive archival effort of StoryNexus, and unable to spend any time on CH or respond fully to messages here until the 28th when the website formally goes down and the archival efforts come to a conclusion.

5 Likes

Okay, before I try to bugfix, which storylet or opportunity do you have this issue with in which world? I can check the database to see if the data is correct. Or, you could send a screenshot.

That’s a good point. I did not actually think about that (despite not being a native English speaker). Do you have suggestions or recommendations?

Having the entire platform be translatable to a different UI language would be quite an undertaking, since all UI text is hardcoded right now. These could be replaced by a language variable map, but I would have to identify all the places it’s hardcoded. Alternatively, I could look into some type of translation package, but that might be a messy solution.

I may consider this, but I would need someone else to go through the entire program and point out any places where the UI text is hardcoded. It’s open source, so I am absolutely willing to accept pull requests that handle this for me, even if it’s just a // TRANSLATE comment in every spot, so I can use regex to find everything and replace it with a variable.

Someone has got to have had this problem before. I may need to research that.

SO!

With the archiving efforts now no longer taking so much of my time, I was free to update ChronicleHub again.

Here is a number of really cool updates (in my humble opinion at least). Aside from the bugfixes, like autofire storylets not triggering, and the Creator Studio UI being weird, or the character creation form sometimes being too big on mobile to click “back to dashboard”.

THE OPEN-SOURCE LICENSE
I had to check to make sure I was using packages with permissive licenses, but as it turns out, I was!

Now, I never planned to become a web-magnate using ChronicleHub. First and foremost, it’s a tool to hopefully encourage more people to try their hand at Quality Based Narrative stories, and to give StoryNexus stories a new home.

I looked at Strudel.cc licensing, and decided to use the same license as them. The AGPL-3.0
It’s the most pro-consumer, anti-monopoly license I think I can reasonably slap on there. In short, it means anyone and everyone is free to theoretically rebuild ChronicleHub in any way they want, given they also publish the source code under the same license.
Which I think is pretty cool

Of course, people’s creations are still squarely their copyright with a license to ChronicleHub to host and distribute it as specified in the ToS. I do hope people continue to use the main site as it helps keep the community together, despite now technically having a license to create their own instances of it.

WORLD MANAGEMENT
These are some features I had been chewing on for quite a while.

First, world deletion is now possible, with a 30-day timer to make sure you don’t accidentally delete your world in a fit of rage or get hacked or anything like that. But, it ensures you can clean up your test worlds, freeing up the namespace for other worlds, without them cluttering your “My Worlds” section.

Another thing I made sure to add is the ability to mark your world as being under Active Development, to signal to people that the world is accessible, but might well be broken at this point in time. A sort of Open Beta.

Lastly, and this is a feature I really wanted to include for all the stuff I’m building, you can mark your world as Open-Source. It gives everyone read-access to your world, so they can see what design choices you made, how you wrote the ScribeScript, etc.


Of course, everything is still protected, despite the buttons technically being usable. Yes, I should disable button access to not give people a scare, but the server validates every save request against your authorisation as the user.

I’m still refining a bunch of stuff on the platform, especially with permissiong to revive some old StoryNexus games. I really hope this platform can help put this model of interactive fiction out there.

3 Likes

Awesome! I don’t think anyone is champing at the bit to launch a competing version, but knowing that we can if your servers get hit by a meteor is a great reassurance.

3 Likes

I do hope I can continue to develop it into some people’s authoring tool of choice, and any reassurance I can give to its viability long term is a welcome one. I don’t intend to stop supporting it any time soon at any rate, though if it continues to grow I might need to consider a legal entity to back it up.

But, that’s stuff for the future. For now, I’m happy people continue to test it and there being the possibility of porting some old works over to it.

1 Like

Yeah, getting some old StoryNexus worlds on here would be a fantastic way to draw attention. The interface looks cool, but I’ve been waiting to see a really big, fleshed-out world as proof of what this platform can really do, and something from SN would be a perfect demonstration of that.

1 Like

Here’s hoping many of the authors can still reach out to FBG for their data. Otherwise it will be up to Project Lazarus to do its job

1 Like

There we go, I noticed some people, myself included, weren’t 100% confident about whether open source mode was safe. And I built the backend, so I should be reassured! Anyway, I got the UI to help reassure me.

1 Like

Another quick updated. I just put an info page online:

2 Likes

Update:

Over the weekend I have spent an inordinate amount of time wrangling the guts of the parser. The cause was the monstrosity that is Concrete Requiem.

Concrete Requiem is pretty much an extreme example of applied ScribeScript. It tests what I can accomplish with my own parser and has already warranted several bugfixes. Now, I normally hate bugfixing my parser, because it hangs together from regular expressions which, while I vaguely understand them, I am still a novice at. So debugging the parser requires reading the Regex over and over and over again.

I managed to fix the issues, but surprisingly, actually discovered a feature of my parser as a solution to a different problem.


For the longest time, I couldn’t get macro filters that targeted nested qualities working, but what I did not realise was that I accidentally built my parser to support property chaining. I originally implemented the property chain so it could handle assignments like $person.name.upper, where it would spit back the .name property in capital letters.

What I did not realise fully is that the way I implemented it, it actually allows for a chain of variable lookups. The example above is a fascinating application of that.

So, without realising it at first, I had the solution to my filter problem already.


In the macro {%pick[involved; 1, $.secret.implicated != 1 ]}, it effectively firs takes a quality from the category involved, which is a ‘suspect’ in this game. It then accesses the .secret property of the suspect, which as shown before is ScribeScript evaluated, and builds the .id of the secret_role belonging to the suspect, but the way I built the parser is where this gets magical (and I genuinely did not realise this up until about two hours ago at time of writing).

The .secret property gets resolved, let’s say into forger, and then the parser performs a variable look-up for $forger, which it will find. It then accesses the .implicated property of $forger which returns as “1”.

So, that’s cool. And I am also a little embarassed. I should have realised the parser worked this way, but I must have been too focused on what I designed it to do, to realise what else it could do. Oops.

Also, @alias assignments are now fixed. There were some massive problems with those as well.

11 posts were split to a new topic: As a side-note regex based parsers

Another minor update:
Working hard at building Concrete Requiem. It’s actually quite a mechanically complex game as it turns out, but I like how the ScribeScript is keeping up. Should anyone be curious, the “world” is actually open source, so you can look at how it’s put together at the creation link: Concrete Requiem — Creator Studio Open Access

For now; screenshots!



3 Likes

Quick PSA:
I have been receiving bug reports from people individually, but to my great appreciation some have already found the way to the GitHub issues page. @Hanon has provided a fantastic list of bugs he has identified, and I am currently putting those on the issues page. But, should you come across anything (and own a GitHub account), please post the bug here. It helps centralise the project with people offering to help out.

3 Likes