adventuregamestudio / ags

AGS editor and engine source code
Other
698 stars 160 forks source link

Whispers of a Machine fails on startup with "unresolved import 'Label::get_TextAlignment'" #751

Closed i30817 closed 5 years ago

i30817 commented 5 years ago

In the ags3 branch.

No placeholder functions for the plugin 'agsspritefont' found. The game might fail to load.
No placeholder functions for the plugin 'agsteam' found. The game might fail to load.
Placeholder functions for the plugin 'agswadjetutil' found.
Loading game failed with error:
Script link failed.
Runtime error: unresolved import 'Label::get_TextAlignment'.

The game files may be incomplete, corrupt or from unsupported version of AGS.

Which i would think would be here https://github.com/adventuregamestudio/ags/blob/50f84a3eb6487e5d167a93b4d2038b10bcffced1/Engine/ac/label.cpp#L153

It's possible this is a ags4 game though (it's recent), and i'm not able to compile it atm (it fails linking with plugins) so i dunno. It would probably fail on the rest of the missing plugins anyway.

ghost commented 5 years ago

It's possible this is a ags4 game though (it's recent),

The version it was compiled with should be reported in the beginning of the log.

ags4 was never released as a stable build, and it does not have any new script commands yet compared to ags3.

But it may be easier to ask the authors of the game if they have used custom engine.

i30817 commented 5 years ago

Ok

Game data version: 43
Compiled with: 3.3.0.1150

edit: stealth edit because i was being dumb and placed the executable version instead of the game version.

ghost commented 5 years ago

Ok, don't know about "Whispers", 3.3.0 did not have that function yet (I emailed its author with a question), but apparently there's a bug in 3.5.0 because the property is called Label.TextAlignment in the script, yet registered as Label.Alignment in the engine. I will have to fix this of course.

rofl0r commented 5 years ago

I will have to fix this of course.

indeed, because the other contributors to this repo are just interested in their "use moar C++ features" crusade

morganwillcock commented 5 years ago

@rofl0r is this issue related to C++ feature changes?

i30817 commented 5 years ago

@ivan-mogilko that fixed that import but this game has further problems because in AGSSpriteFont plugin.

Script link failed.
Runtime error: unresolved import 'SetVariableSpriteFont'.

I don't really understand how that is supposed to work. Some other plugins register without the macro this uses and use the format engine->register("NameofClass::NameofFunc^numberofargs", (void*) NameofFunc); but the macro apparently ignores both NameofClass and numberofargs.

When i tried to replace the macro by the style above it didn't work to fix it. Indeed, trying it on another cpp plugin (AGSBlend) introduced other runtime failures, so i don't even. I was thinking it was a conversion from c to c++ that was bad, but these facts say it isn't and i should let the debugging to pros.

Also found out that the Lion's Song a beautiful new adventure game had a AGS prototype before they switched to molecular. I think lack of switch/other consoles support is hurting AGS for those devs trying to make the jump to commercial.

edit: the string SetVariableSpriteFont isn't inn the executable so the .so must not be ending up linked or statically built somehow.

i30817 commented 5 years ago

Ok I got it. That plugin is not built in, i'm supposed to build the .so and place it on the game dir.

Now to yet another plugin error, after placing the new dll on the game dir:

Game GUI version: 116
Plugin 'agsspritefont' loading succeeded, resolving imports...
No placeholder functions for the plugin 'agsteam' found. The game might fail to load.
Placeholder functions for the plugin 'agswadjetutil' found.
[PLUGIN] AGSSpriteFont: Init fixed width renderer
[PLUGIN] AGSSpriteFont: Init vari width renderer
[PLUGIN] AGSSpriteFont: Register functions
Loading game failed with error:
Script link failed.
Runtime error: unresolved import 'SetLineHeightAdjust'.

The game files may be incomplete, corrupt or from unsupported version of AGS.

The required function appears nowhere on the on the repo, but this location seems to indicate it's a expected part of AGSSpriteFont (for their fork maybe?)

$ strings Whispers.exe | grep "SetLineHeightAdjust" -C 2
SetVariableSpriteFont
SetGlyph
SetLineHeightAdjust
SetSpacing
ags_shell
--
SetGlyph
SetSpacing
SetLineHeightAdjust
NoTranslate
g_lFontGlyphs

so basically SetLineHeightAdjust is not there. I may try a no-op to see if it runs.

edit: or maybe it's a alias for SetSpacinghmm.

edit: eh, even if i do that, it just goes on to the next unlinked function Mouse::set_ControlEnabled - i'm afraid this is too broken to hack. Eh, one more no-op.

edit2: Game::SimulateKeyPress^1. Yeah i give up. This engine is super forked.

ghost commented 5 years ago

Hmm, some of these could be useful additions to general engine.

Mouse::set_ControlEnabled -- we have only get_ControlEnabled (that's a readonly property based of user settings in config); Game::SimulateKeyPress -- this was users request for some time now.

PS. Still waiting for author's reply, hopefully their programmer(s) will agree to shed some light on this.

BTW, is not Artistic License require noting changes to the engine? Or is it only in case of open source distribution?

i30817 commented 5 years ago

I lied, i built some more no-ops.

Namely (i think, but i'm blocked on AGSteam.so not being recognized), the engine needs these new functions:

SetLineHeightAdjust <-probably in AGSSpriteFont, probably with a int (font) and (float or int) arg and void return Mouse::set_ControlEnabled <- probably in Engine/ac/mouse.cpp, probably with a bool arg and void return Game::SimulateKeyPress^1 <- probably in Engine/ac/game.cpp, probably with a int argument (SDL key event or something) and a void return MobileShowAchievements <- 'somewhere' i stuffed it on game.cpp but it probably should be part of ags2clientstub or something. Void return and void args (maybe). MobileGetAchievement <- somewhere, no freaking idea of the return type but it's hopefully not called on the desktop.

Many maybes because i haven't run it yet to see the crashes. If i can even debug them.

Anyway: Anyone knows the reason why https://github.com/monkey0506/ags2clientstub/commits/master doesn't get recognized as a valid external (.so) plugin in the game dir while libagsspritefont.so is? It's blocking my hackery. I tried naming it agssteam.so, agsteam.so, libags2clientstub.so etc.

ghost commented 5 years ago

Anyone knows the reason why https://github.com/monkey0506/ags2clientstub/commits/master doesn't get recognized as a valid external (.so) plugin in the game dir while libagsspritefont.so is? It's blocking my hackery. I tried naming it agssteam.so, agsteam.so, libags2clientstub.so etc.

Ah, of course, on linux engine wants "libXXX.so". Sorry, I completely forgot about this. So it has to be libagsteam.so, perhaps, or similar. Other than that, I don't remember trying linking that stub myself before, so my knowledge is limited.

PS. Which also means that ags does not report wanted library name correctly in the log.

i30817 commented 5 years ago

Guh, that was stupid. It was 'libagsteam.so'. Onwards to the next error 'fixed' badly for me.

edit: started and crashed. What joy. Probably because of the SetLineHeightAdjust hack.

i30817 commented 5 years ago

So i got it to start... with the font completely fucked.

After i did my hackery i noticed it was crashing on Commons/font/fonts.cpp

After i put in fake functions for the plugin functions missing; this was crashing:

bool is_bitmap_font(size_t fontNumber)
{
    if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
        return false;
    return fonts[fontNumber].Renderer2->IsBitmapFont();
}

I turned it into this:

bool is_bitmap_font(size_t fontNumber)
{
    if (fontNumber >= fonts.size() || !fonts[fontNumber].Renderer)
        return false;
    IAGSFontRenderer2 * a = fonts[fontNumber].Renderer2;
    if(!a)
         return false;
    return a->IsBitmapFont();
}

The font looks awful for some reason; probably SetLineHeightAdjust was supposed to make a shadow? Who knows.

ghost commented 5 years ago

I think there's actually a bug in is_bitmap_font (and maybe some other nearby functions) which does not comply with font renderer plugun api so your fix will make sense. I will look closer into this.

ghost commented 5 years ago

I did this: bbbfe375431d025db22b795e868dad5c27437105

i30817 commented 5 years ago

I'm just curious because i'm not working on code to make the game function better now that i have it booting (i have no clue how anyway), is a function pointer in C/C++ ie( NameofFunction standalone) the same as &NameofFunction? Because both kinds get passed to the function registering the plugin functions in different plugins and it's wigging me out. Reference to reference is just a transitive reference to the final destination kind of rule?

onitake commented 5 years ago

Oh, I didn't notice somebody was already working on this!

I patched out AGS, AGSSpriteFont myself and added stubs for the new agswadjetutil symbols, but I'm getting a blank screen on startup. Looks like you were more successful.

About function pointers: Yes, a bare function name is a valid rvalue for a function pointer. You don't have reference it explicitly. NameOfFunction and &NameOfFunction are equivalent.

onitake commented 5 years ago

I can post the (trivial) modifications I made to support the additional script functions, if you're interested.

i30817 commented 5 years ago

Blank screen is probably because you didn't force opengl on start (on the cfg) and didn't update to the latest ags3 branch here (that does that). That or you hit the same bug explained above with is_bitmap_font and it outright crashed?

I'd think the project would be very interested in the mods (and i'd be very interested in not having a fork for no reason that supports a game badly).

Before you do though, check how it looks. In here, the main dialog font looks like this: image

This is probably because the SetLineHeightAdjust function actually does something useful to them and my stub doesn't (most likely some kind of offset and colorization to create a 'shadow').

If you actually spent more than a nanosecond verifying your assumptions about the new functions returns and arguments, you're already doing a better job than me, even if you implemented nothing, because i just went with 'what felt right', which is 99% surely wrong (mostly because i'm not a gdb wizard that can figure out that my 'assumptions' are dead wrong). Hell, you already figured out that some of the functions are in agswadjetutil and not elsewhere.

onitake commented 5 years ago

Haha, somebody went ahead and fixed the new TextAlignment properties already: cec93fe47595db71875c3b9a590ba88ffaf6e029 That wasn't there on Sunday. :smile:

Here's my changes so far: https://github.com/onitake/ags/tree/compat/whispers-of-a-machine

I haven't figured out what SetLineHeightAdjust does yet, only that it takes 3 arguments. At least that's what disassembling Whisper.exe with r2 tells me. I can look further into that, your screenshot indicates it's important.

ghost commented 5 years ago

Before you go all the way into disassembling, I got in touch with programmer who did "Kathy Rain" and "Whispers" and he agreed to share the custom engine source but wants to clean it up first :).

Haha, somebody went ahead and fixed the new TextAlignment properties already: cec93fe That wasn't there on Sunday. smile

Ah, yes, we had this property added not long ago but apparently it was incorrectly linked in the engine and no one noticed until now. Problem is, I still do not know if it uses same constant values as "Whispers".

UPD: he also told me that SimulateKeyPress is coming from WadjetEyeUtils plugin. Maybe they have it in their repository, or we could ask Janet Gilbert about source. (Well, in theory we could implement our own under same name, it sounds like a good idea for a new API)

ghost commented 5 years ago

Following is the "Kathy Rain" engine source, which may or may not be useful to learn something: https://github.com/josthas/KrusAGS

i30817 commented 5 years ago

I haven't figured out what SetLineHeightAdjust does yet, only that it takes 3 arguments. At least that's what disassembling Whisper.exe with r2 tells me. I can look further into that, your screenshot indicates it's important.

Are you still not making it run? Your fork repo makes it run for me (well, as long as i place the libagsgalaxy.so - stub from here, requires subproject init and update - and libagsspritefont.so dlls in the game dir).

If you have the steam version instead of gog, name the stub libagsteam.so instead etc. The engine will tell you the names of the dlls it expects now.

edit: the kathy rain game has the same font defect and building the plugin from the kathy rain repo above actually fixes the font there. Sort of, there is a segfault if i use your extra commits and there isn't if i just use my hacked-in crap. Whispers on a machine too, only it manifests as a invisible main menu (but the dialog font is fixed, go figure). It may be instructive to do a diff of AGSSpriteFont plugin and the Engine dir.

edit: one obvious difference is that bool SpriteFontRenderer::SupportsExtendedCharacters(int fontNumber) returns true instead of false. As well as some destructor cleanup but let's assume that leaks don't create visual artifacts.

edit2: Ok apparently the colour passed in VariableWidthSpriteFontRenderer::RenderText was a nop and it used a color directly sampled from the font, and this version happens to use it. Dunno how to make this compatible with all the other games that presumably felt free to pass in trash in that arg - if the previous calls to this made sure that that field was (color.Black from the maths probably), that can be used as a guard for the new color behavior. If not...

Though, in the end we might not need that since this is a plugin. It might simply be made incompatible in general and tell the users to use your repo instead of the upstream one to build it. A bit sad that it's not out of the box, but it wasn't already as a non-builtin plugin.

i30817 commented 5 years ago

Kathy Rain has the same font problem so the source should be helpful.

i30817 commented 5 years ago

Kathy Rain has the same font problem so the source above should be helpful, though i'm starting to think it's a hack of agsspritefont considering the differences between these methods: https://github.com/josthas/KrusAGS/blob/master/Plugins/AGSSpriteFont/AGSSpriteFont/VariableWidthSpriteFont.cpp#L38

https://github.com/adventuregamestudio/ags/blob/ags3/Plugins/AGSSpriteFont/AGSSpriteFont/VariableWidthSpriteFont.cpp#L36

I'm going to try to build the AGSSpriteFont dll on the kathy rain repo above and place it on both games dirs to see if it fixes stuff.

i30817 commented 5 years ago

Anyway i managed to fix the font by following what the KathyRain repo did in your repo for VariableWidthSpriteFontRenderer::RenderText and VariableWidthSpriteFontRenderer::Draw, but since it's a hack not sure about pushing it upstream. I don't even understand what's happening there. I suspect it's drawing text in black, then creating a new font glyph with a shrunken width and height and drawing again in color for a black outline. Since the color was ignored before it just made a mess. Or something.

onitake commented 5 years ago

We should definitely figure out what was changed in AGSSpriteFont and maybe merge this back into the AGS core. This seems to be too useful to ignore. Or remove AGSSpriteFont and instead reference what https://github.com/josthas/KrusAGS does?

As for agsteam: I used my own stub implementation, which was written before monkey0506 released the vendor-neutral version: https://github.com/onitake/agsteamstub But it's better to go the "official" way instead, of course.

ghost commented 5 years ago

AGS engine does not care where the functions are coming from, so if functions are not good for general use one could still create a plugin with extra functions specifically for these games.

E: Hmm, of course if plugin API allows implementing them. If not, then things are more complicated.

i30817 commented 5 years ago

We should definitely figure out what was changed in AGSSpriteFont and maybe merge this back into the AGS core. This seems to be too useful to ignore. Or remove AGSSpriteFont and instead reference what https://github.com/josthas/KrusAGS does?

The problem here is that this appears to be a hack. If you look at code differences like this:

https://github.com/josthas/KrusAGS/blob/master/Plugins/AGSSpriteFont/AGSSpriteFont/VariableWidthSpriteFont.cpp#L38 to this: https://github.com/adventuregamestudio/ags/blob/ags3/Plugins/AGSSpriteFont/AGSSpriteFont/VariableWidthSpriteFont.cpp#L36

or

https://github.com/josthas/KrusAGS/blob/master/Plugins/AGSSpriteFont/AGSSpriteFont/VariableWidthSpriteFont.cpp#L169 (and those 'if(false)' later on the function)

compared to:

https://github.com/adventuregamestudio/ags/blob/ags3/Plugins/AGSSpriteFont/AGSSpriteFont/VariableWidthSpriteFont.cpp#L142

There is also something weird in https://github.com/josthas/KrusAGS/blob/master/Plugins/AGSSpriteFont/AGSSpriteFont/SpriteFontRenderer.cpp#L174 that i think might not be used. Or at least i see little sense in assigning the red component of RGB 3 times there.

AGS engine does not care where the functions are coming from, so if functions are not good for general use one could still create a plugin with extra functions specifically for these games.

I think that may be needed. I was thinking that we could distinguish the behavior based on the colour argument to Draw (it's not used on the original function for some reason), but i doubt people were consistent with it if it is a public function.

josthas commented 5 years ago

Hi all, here's the WoaM engine source:

Cleaned it up as best I could, but there may be some junk in there still: https://github.com/josthas/WoaMAGS

This WoaM engine source was essentially added on top of the KR engine source linked further up (but they had to be kept separate for savegame compatibility reasons). The original source was was branched off some Wadjet Eye fork of 3.3.x that happened to be the most stable engine build on Mac and iOS at the time (2014 I believe). So, yeah, we're dealing with quite old AGS code.

I wouldn't encourage merging anything from either of these sources into the main branch. The few useful changes I put in has been implemented in later engine versions anyway (like resolution auto-detection, dynamic/unlimited object properties) etc. What is left are just a bunch of really horrible project specific hacks accumulated over time, most of which are completely undocumented and quickly whipped together mid-crunch to solve one problem or another.

So yeah, to conclude, I'd only suggest using these sources to get KR and/or WoaM up and running on Linux natively.

i30817 commented 5 years ago

Thanks for the source. I'll just build the plugins for each game and place it on their dirs myself, but i'd like it if opensource-latest AGS could have compatibility for the games through a replacement hack without that for those people that have no clue.

I'd suggest also opening issues for those features you felt you needed a hack for, even if they're on plugins and you end up with the hack in production. Hammering out a design for papercuts is nice for everyone.

i30817 commented 5 years ago

Eh, actually the built from source plugin is actually crashing for the open source ags engine if built directly (some things changed meanwhile) but i can build a replacement just by copying some stuff.

ghost commented 5 years ago

but i'd like it if opensource-latest AGS could have compatibility for the games through a replacement hack

I would like to notice that I would NOT like to put hacks directly into the ags engine only to comply with the custom engine changes others made, unless these additions are truly generally useful and have good API. My opinion is that this engine is not meant to be universal runner, this is what tools like ScummVM are for. We had enough problems in the past with AGS-own backwards compatibility alone.

The alternative solution for these could be a module specifically meant to run that range of games. It could be either plugin (if plugin's API is enough for this), or engine module that has to be statically linked to the common runtime somehow.

onitake commented 5 years ago

SimulateKeypress is something that could go into core, IMHO. Allegro already offers the functionality and it may be generally useful.

As for agswadjetutil: I don't know about all the functionality this plugin has, but the platform integrations may be good to have in core. Implementations can be stubbed when inapplicable, and picked up by a platform plugin where useful. So, like a generic API for achievements and the like. When running in vanilla AGS, achievements could simply be stored to/loaded from disk, like my stub implementation of AGSteam does, for example.

ghost commented 5 years ago

Yes, that may make sense; it could also be reasonable to have generic achievement API inside AGS itself and only use plugins to connect to the actual service like Steam. Although I would consult with game developers regarding achivement fallback behavior to learn what they'd prefer.

Anyways, it looks like this issue is becoming overloaded, maybe open separate issues per problem then (like one for SimulateKeyPress and so on)? Some of them could be easy to implement right away.

ghost commented 5 years ago

I just made 3 additions which let you run "Kathy Rain" and "Whispers of a Machine":

Please note that at least "Kathy Rain" still does not work 100% as with original exe even if you have built spritefont plugin from our repository: the text's color is mismatched for some reason.

It's curious that the original game itself does not have this plugin along. And the provided custom engine sources only have spritefont stubs in it (at least that's what I found so far). Not sure what's the deal with this, maybe they embedded plugin in the engine for this game, or maybe WoaM sources contain more answers but I haven't researched them through yet.

It's still possible to play KR and WoaM without spritefont plugin in theory, they will use default stock font instead.

PS. Custom engine repositories, for reference: https://github.com/josthas/KrusAGS https://github.com/josthas/WoaMAGS

i30817 commented 5 years ago

The font can be corrected, (and i did it) by modifying libagsspritefont to do this: https://github.com/onitake/ags/pull/1 (imports a minimal part of the KrusAGS changes).

Although that commit doesn't handle the 'line offsets' hack that kathy rain has on libagssprite font, i suppose it could be done (both for it and that color modification) by using a define and compile time flag. It's only used in two places i recall in the game (a postcard near the end and computer screen (in the hospital i think).

The font appears to be drawn twice in the scripts, with a different color, to do a outline/shadow.

i30817 commented 5 years ago

Here is a save where you can see the line adjustment being used https://github.com/onitake/ags/pull/1#issuecomment-491530409

Click on the postcard. And spoilers.

i30817 commented 5 years ago

Lol, with the compile from ags release-3.5.0 and my altered plugin the colors for the outline and the font are inverted (white outline outside black 'font'). Weird.

edit: no wonder.

Plugin 'agsspritefont' could not be loaded (expected 'libagsspritefont.so'), trying built-in plugins...
Placeholder functions for the plugin 'agsspritefont' found.

The plugin is there with the right name though. So i don't know what's happening.

That said, this shows that your libags plugin modifications are very near to not needing a change at all?

i30817 commented 5 years ago

Ok, i think the plugins can't be loaded for some reason on a read-only environment? I copied the game out of the squash filesystem and it worked to load the plugin(s) (i also had the galaxy stub from before it was built in).

edit: doh, i probably have to mount the squash filesystem with the executable bit in order to load dlls.

edit2: turns out that i screwed up during squash mounting in fstab and overrode the 'exec' bit with the 'users' option.

Whispers of a machine still needs other things " 'MobileShowAchievements' and 'MobileGetAchievement'."

rofl0r commented 5 years ago

fwiw when i played kathy rain i got the font issues fixed by simply unpacking the game files and scripts, reassemble a single file (e.g. globalscript.s), injecting it again into game28.dta and repacking it, then using that pack to play (while temporarily removing the original .exe due to #811). what i did to get it running is documented in the agsutils wiki.

i30817 commented 5 years ago

Here is a save where you can see the line adjustment being used onitake#1 (comment)

Click on the postcard. And spoilers.

Actually this doesn't happen in the stubs, only in the 'real' plugin. So basically, real plugin has the font problem + this line height problem, but shows the fridge puzzle (enter door, look at red fridge in the save); current stubs show a better font, but with the colors of of the outline reversed, and with the fridge puzzle broken, but with correct height, my current pr on the link above has (probably) correct dialog and main menu font, the fridge puzzle showing but broken line height on the postcard.

i30817 commented 5 years ago

BTW @rofl0r , you can avoid the Kathy Rain bug in the parallax scroller bug by changing acsetup.cfg to add:

[override]
os=win

This disables the version of the module doing nothing in the 'not windows' branch. I think a new updated version of the module fixes this, FWIW if you want to show/plan how to fix this 'the right way'.

Are you planning to create a runtime patcher like scummvm? That would be great to fix these 'extra feature' incompatibilities without making the plugin code a mess.

ghost commented 5 years ago

Sorry, there's too much information on various issues here, and I am not sure which refers to me and this particular ticket.

Can we define on what is required for this ticket to be closed as fixed?

For example, I suggest creating a separate ticket for spritefont plugin's differences.

Whispers of a machine still needs other things " 'MobileShowAchievements' and 'MobileGetAchievement'."

Ugh, I was considering adjusting script loading to not fail at first link error but gather them all from all modules and displaying in a list, although that would not work if they are in rooms (because engine does not want to load all existing room scripts at startup). Then I thought, maybe it's not needed immediately, because it's a rare problem...

onitake commented 5 years ago

Please have a look at this branch: https://github.com/onitake/ags/pull/3

I'm still trying to wrap my head around all the changes that KrusAGS introduced, but please give this version of AGSSpriteFont a try. I fixed a few bugs that were in the KrusAGS version. It's possible the the fixes make the plugin behave differently, but I will not submit a pull request to AGS that contains obvious bugs.

i30817 commented 5 years ago

My fear with those changes is: won't that make the plugin code incompatible with other games that haven't forked it?

Granted without the actual built plugin in the dir, AGS currently is just replacing all the functions by stubs, so the code would (probably) be broken anyway (if running), but if, for instance, that color change is merged, people building AGSSpritefont dll for game compatibility will end up with the fork.

Is the plan here a define? Patch the game at runtime to get rid of the incompatible stuff (like i think r0flor is exploring with his script decompiler and assembler)?

onitake commented 5 years ago

I don't think a #define is the right way, because it will cause further confusion on which fork of the plugin was used.

onitake commented 5 years ago

If you can, please try the modified plugin on several games and report how it goes. I will do what I can to make it as backwards compatible as possible. If that requires removing the colour blending code, so be it.

ghost commented 5 years ago

For example, I suggest creating a separate ticket for spritefont plugin's differences.

Please?

I think having one problem per ticket (or group of directly relevant problems) is a way to go. TBH I had to skip many comments above, because whole thread was hard to follow and I wanted to focus at one problem at a time.

i30817 commented 5 years ago

Right. If you want to, feel free to close this and open a ticket for the functional differences. I'm satifisfied with the stubs (if those two for WoaM are added) because they allow to start the games and get them functional with the plugin prs on the onitake fork (dumping a compiled .so on the game dir).

I don't think it's likely the fork will be merged to the upstream plugin (because of the incompatibility hazard), but that issue should be the place to sort it out.

ghost commented 5 years ago

So basically, real plugin has the font problem + this line height problem, but shows the fridge puzzle (enter door, look at red fridge in the save); current stubs show a better font, but with the colors of of the outline reversed, and with the fridge puzzle broken

What is this "fridge puzzle", is this something logical that is broken? If it's a different thing, could you also open a new ticket for it?