Adding an extra channel to glk, inform and quixe

The eco-system and knowledge-base is the down side to using furevm-web for sure. When developing a story, you have to have design in mind as you write your story and code. And if you’re just building a standard sort of design, fyrevm-web doesn’t really offer anything of value.

It would only offer great value if you were building a completely new web interface or if you wanted to take advantage of the history tracking of every turn data. One of the things I’d love to see is Liza Daly’s Harmonia interface (ReactJS) re-implemented as a template in fyrevm-web.

My overly ambitious idea was to develop a template builder system, similar to wordpress, but for IF stories. Never going to happen without a UI person/front-end dev to help lead the charge.

But Glulx can switch between I/O systems, isn’t it? You don’t need to have only one. You can switch back to Glk once you are finished with the extra data. If the interpreter does not know the extra I/O system, it will ignore it. Sending output to Glulx’s “null” output stream is no longer pointless.

I think the IO system is global per story.

Ahh. I get what you mean now. Use a new IO system instead of a new type of Glk stream. I’d have to think through the pros/cons of that approach, but it could well end up simpler! Depends on how often I7 uses Glk functions to print instead of the Glulx printing opcodes.

David, no you should be able to have a terp and story with multiple IO systems, they just wouldn’t be able to react well together.

I also have had thoughts about bringing the FyreVM extensions into a normal Glk terp. It wouldn’t be impossible.

Both of these statements make me ill. The level of effort is not trivial.

I think it would be much less trivial to get a front-end dev to enable a rock solid “standard template” then make one or two more non-standard templates and push the whole thing into Inform 7 as a “release with” mechanism.

I really believe that if the breadcrumbs were put in place, authors might start getting very creative with parser-based web interfaces. But they need the breadcrumbs first.

@DavidC

Do you have a list of tasks that need to be completed for FyreVM? If it were broken down, it might be easier to finish each task. I’m by no means an expert, but there might be one or two things I could do.

I created two projects at: github.com/ChicagoDave/fyrevm-web/projects

I was thinking about this old project of mine last night (because I plan on entering a version of it into seedcomp).

Now that inform 7 is open source, will that make it any easier to do any of this? I woke up with this in my mind and saw this post:

This seems like the kind of thing open source Inform was meant to make easy, adding new output streams and altering the publishing-to-a-website portion.

I’m still intending to add something like a JavaScript stream to Glk, but it’s slow work. Inform being open source is good for other reasons, but has less of an effect in this regard.

1 Like

As the original discussion said, the hard part is in the interpreter, not the compiler.

Okay, that sounds good. I already have this working (I made this a few years ago but never uploaded):

by just using the right status line as my stream, but I’d like to make my own stream. It sounds like I only need to mess around with the javascript files and not Inform, so thanks for your help!

1 Like

I got this to work the way you guys were telling me to!

Just for fun, I tried adding a new glk thing with the number 311 that just opens a box.

So in glkote.min.js, I added:

function glk_do_awesome_stuff(){alert("We're in!");}

and added

glk_do_awesome_stuff:glk_do_awesome_stuff,

in the big return thing at the end.

To quixe.min.js I added:

311:new FuncSpec(311,"do_awesome_stuff",new Prototype([],null)),

I then wrote this program:

"Audiovisual" by Mathbrush

Test is a room.

Release along with an interpreter.

Every turn:
	hit the button;
	
To hit the button:
	(-glk($0137);-)

And it works!

My only issue is, it doesn’t degrade nicely:

image

What do I need to add to make it ‘degrade’ correctly?

Add a gestalt so you can check if it’s running in a supported interpreter.

And rather than using 311, it would be better to use something like $2000 so that you know it won’t be introduced in a future Glk update. Even better, ask Zarf for a range of codes to be assigned to you.

1 Like

What does it mean to add a gestalt? I do nut understand what that means, and have had difficulty searching for such things.

And I will definitely request opcodes if I come up with an idea good enough to use and implement this!

Add a case to the switch statement in glk_gestalt. Then call glk_gestalt from your game.

That worked!

My final inform code:

"Audiovisual" by Mathbrush

Test is a room.


Release along with an interpreter.

Every turn:
	hit the button;
	
To hit the button:
	(-
    if(glk_gestalt(311, 0)){
	glk($0137);
	}
-)

and my addition to the end of the switch statement:
case 311:return 1;

This is great; I now have a nice degradation-free way to handle things, and I don’t have to rely on updating the status bar like I used to. And it will run locally!

If I want to save the changes I make to an interpreter, can I do that in a nice built-in way like templates (Release along with a ‘weirdmathbrush interpreter’) or do I need to mamanually copy over/change the javascript files each time?

In any case, I’m glad I figured this out after 5.75 years! I’m excited to try it on some project only to figure out why Vorple moved away from opcodes…

Yes, you can put the custom interpreter in the project’s .Materials folder and Inform will use it each time you make a release.

1 Like

@zarf Could I have a block of 10 codes/selectors for Glulx? I have some ideas that I’ve been wanting to put into action, and I’ve just been using spare stuff like code 311. I wasn’t going to be super serious about this, but I’ve been thinking of a way to make Glulx styling more accessible and I’ll need to reserve something to make it happen. Any block of 10 would work!

Tried to DM but it didn’t work.
(edit: I can make it work with less than 10 but 10 from my design viewpoint is reasonable. If they’re precious I can do less!)

1 Like

(Email gets my attention fastest.)

The examples above are Glk calls, not Glulx opcodes. Is that right? Do you want both?

I’m putting you down for Glk calls and Glk gestalt values 0x1500 to 0x150F. (The ranges are in hex, so you get 16.)

1 Like

I’m only using the stuff listed above for now. I don’t understand the difference between Glk calls and Glulx opcodes yet, but I’ve been able to get arbitrary CSS changes in-game with the Glk calls above.

So I’ll stick to those, unless you think I’ll eventually ask for Glulx opcodes (from your experience with people in similar paths).

I’ll take those! Thanks so much! And I appreciate all your extensive documentation, it’s been incredibly helpful. I’m reading up on your hyperlink code in Bigger Than You Think right now.