Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refuses to work with new Ink versions (state is always Null). #68

Open
IAmTraffic opened this issue Dec 7, 2022 · 7 comments
Open

Refuses to work with new Ink versions (state is always Null). #68

IAmTraffic opened this issue Dec 7, 2022 · 7 comments

Comments

@IAmTraffic
Copy link

Describe the bug
I was trying to set up a super basic Ink scene to get started and I kept getting an error spiral. A lot of stuff under story.gd would randomly be Null.

To Reproduce
Here's the Ink JSON I was using:
{"inkVersion":21,"root":[["^Hello World!","\n",["done",{"#f":5,"#n":"g-0"}],null],"done",{"#f":1}],"listDefs":{}}

Expected behavior
I didn't change anything about the Ink handler script (besides adding the correct filepath), so I was expecting it to print
`Hello World!

The End
`

Solution
Turns out (to the best of my knowledge) that inkgd noticed that root_object["inkVersion"] was 21, while INK_VERSION_CURRENT was 20, so it would throw an error and crash. Since story generation is done in a separate thread, the error never showed up and the main thread continued as usual, but without an actual story to be working off of.

I ended up commenting out the return call on line 164 of story.gd so that it would be forced to continue with story creation even if the Ink version was higher than expected. I imagine there's more elegant solutions, but I wanted to drop this here in case some future soul has a similar experience.

Environment:

  • OS: Windows
  • Godot version: 3.5
  • Ink version: 21
  • inkgd version: 0.4.7, I believe
@drentsoft
Copy link

drentsoft commented Jan 28, 2023

Thanks for this, fixed the issue for me. I just updated INK_VERSION_CURRENT to 21 and it works now. I was going mad trying to work out why the demo files worked and mine didn't no matter how simple I made the story.
Edit: Ok it only seems to help with the preview, Story_player.gd still seems to be causing me problems even if I comment out the return.

@francoisdlt
Copy link
Contributor

I believe support for Ink 1.1.1 is a work in progress : #69

@mttkay
Copy link

mttkay commented May 1, 2023

I just ran into this problem myself. The odd thing is: I import stories written by Inky 0.14.1, which internally uses inkjs 2.1.0: https://github.com/inkle/inky/blob/0.14.1/app/package-lock.json#L1187-L1191

It is inkjs which writes this version field. But this version of inkjs should write v20 JSON: https://github.com/y-lohse/inkjs/blob/v2.1.0/src/engine/Story.ts#L53

Yet, suddenly Inky generates v21 JSON and I run into this crash. This has only happened recently, and I have no idea what changed.

Any ideas what's going on here?

@Mawdac
Copy link

Mawdac commented May 4, 2023

I just ran into this problem myself. The odd thing is: I import stories written by Inky 0.14.1, which internally uses inkjs 2.1.0: https://github.com/inkle/inky/blob/0.14.1/app/package-lock.json#L1187-L1191

It is inkjs which writes this version field. But this version of inkjs should write v20 JSON: https://github.com/y-lohse/inkjs/blob/v2.1.0/src/engine/Story.ts#L53

Yet, suddenly Inky generates v21 JSON and I run into this crash. This has only happened recently, and I have no idea what changed.

Any ideas what's going on here?

@mttkay Hey mate,

inkjs uses inklecate under the hood which is what's generating the version number when you compile https://github.com/y-lohse/inkjs/blob/b0b9e4d0308404f67a78aff7a8f70034826d326e/src/tests/compile.js#L56

It doesn't matter what version of Inky you wrote the stories in, it's all about what version of inklecate you used to compile it - the latest version of inkjs looks to be using v1.1.1 of inklecate which uses v21 of their json structure(?), so it sounds like that's what you've also used to compile your ink to json. Looks like inkjs also has a compatability table https://github.com/y-lohse/inkjs#compatibility-table for reference on which versions match together.

But remember, inkjs has nothing to do with this plugin (unless you're using it to compile, even then) - it's inklecate that compiles it. That's my understanding to the best of my knowledge!

@mttkay
Copy link

mttkay commented May 6, 2023

inkjs uses inklecate under the hood which is what's generating the version number when you compile https://github.com/y-lohse/inkjs/blob/b0b9e4d0308404f67a78aff7a8f70034826d326e/src/tests/compile.js#L56

Are you sure about that? The file you point to is just a test. And you can see here that it also supports a different compiler backend, inks-compiler: https://github.com/y-lohse/inkjs/blob/1a79adf99cbcd15f1da7e13ab2504ef7f4dcc7e6/src/tests/compile.js#L10

When searching for inklecate and inkjs, I found a discussion around inklecate going away at some point and being replaced by something called inkjs-compiler, IIUC. Inklecate seems to be dead too; its package was last updated 3 years ago: https://www.npmjs.com/package/inklecate

Plus, I don't have inklecate installed on my machine:

~ which inklecate
/usr/bin/which: no inklecate

so I am not sure how Inky would be able to shell out to it? 🤔

That all said, if Inky does not package its own copy of inklecate, and if it's not installed on my system, then where is it called from and how did it suddenly update to emit different file formats?

Pretty confusing ecosystem!

@mttkay
Copy link

mttkay commented May 6, 2023

Ah, I think I understand better now how these tools relate to each other.

So inklecate is actually part of the ink project itself, and it's written in C#: https://github.com/inkle/ink/tree/master/inklecate

Meaning, you can't use it directly in JavaScript and Inky is an Electron app so is written in JS. So that NPM module is just a JS wrapper that shells out to the inklecate binary.

That leaves the question: where is this inklecate binary installed, and by which process did this suddenly update without my intervention? Again, the version of Inky I use hasn't been updated in a while but the difference in file formats emitted started only happening a few weeks ago. So there must be some moving parts here that I fail to understand.

Or maybe Inky doesn't actually shell out to inklecate at all, and uses the native JS compiler instead, inkjs-compiler. But then again, that one is bundled with Inky and locked in package.json, so I am not sure either how that could suddenly start writing out v21 JSON.

@mttkay
Copy link

mttkay commented May 6, 2023

This is where Inky invokes inklecate: https://github.com/inkle/inky/blob/master/app/main-process/inklecate.js

I am not familiar with Electron, but it looks like it packages binaries for Mac, Windows and Linux? 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants