The Inner World

The Inner World

Not enough ratings
Fixing Cutscene Playback on Linux
By apocalyptech
Cutscene playback on the Linux port is broken for many cutscenes. This is a guide to fix cutscene playback for all but two minor cutscenes, in the absence of an official patch from the developers.
   
Award
Favorite
Favorited
Unfavorite
Intro
Cutscene playback on the Linux port of The Inner World is often problematic, at least as of early October, 2017. There are two primary failure modes for cutscenes, one of which you will definitely run into regardless of your system:
  1. Cutscenes may not play at all (including, for instance, the opening cutscene)
  2. If the opening cutscene works, you'll still find that many other cutscenes don't.
This guide primarily just deals with the second problem, since I don't have much advice to give with the first.
Jan 2020 Update: Potential Easy Fix
TheLimeyDragon has created an unofficial patch which should fix most (or all?) of the issues detailed in this post. I can't vouch for it myself, but it's worth checking out, and is probably the easiest way to get the native Linux version of this game running properly. The link as of Jan 2, 2020 is: https://www.dropbox.com/s/ox6sa4mxwjoca94/TIW_LUP-0.9a.zip?dl=0

Though you might want to check the comments below to make sure that there's not an updated version, in case that happens and I don't get around to updating this guide.
Problem 1: If cutscene playback doesn't work at all (including opening cutscene)
This was a problem I had a few years ago, and at the time I ended up giving up and letting the game sit unplayed. Just recently I'd tried again, on a different distro and with a few years of software updates inbetween, and this seems to have fixed itself for me, in the meantime. I don't have any actual advice on this one, really, except that if you're on Arch, perhaps you'd want to check to make sure you have at least these packages installed (though I bet that many of these aren't necessary) -

  • ffmpeg
  • ffmpeg2.8
  • gst-libav
  • gst-plugins-bad
  • gst-plugins-base
  • gst-plugins-base-libs
  • gst-plugins-good
  • gst-plugins-ugly
  • gstreamer
  • gstreamer-vaapi
  • gstreamer0.10
  • gstreamer0.10-base
  • lib32-gst-plugins-base
  • lib32-gst-plugins-base-libs
  • lib32-gst-plugins-good
  • lib32-gstreamer

I do not have any ffmpeg-compat* packages installed, which you may see recommended elsewhere. Also, the Arch-provided openjdk works just as well as the Oracle JDK, so there's probably no need to look into alternate JVMs.

Another user on the forums has mentioned that on *buntu 16.04 LTS, the cutscenes require the following packages:

  • openjfx
  • libopenjfx-java
  • libopenjfx-jni
Problem 2: Some cutscenes work, others do not
If the opening cutscene works, you'll probably soon notice that other cutscenes seem to not be playing, and you'd be right. If you ever get a one-or-two second gap where both the video and the audio stops, that's probably an attempted cutscene failing to play. You'll get that somewhat frequently while solving puzzles -- there are often short little cutscenes as you find solutions, or attempt partial solutions. Some of these include information more-or-less necessary to solve the puzzles, so you'll want to fix that.

Three files must be present in the game's "media" directory - the video itself, the audio file, and the subtitle file. When a cutscene doesn't play, it's because either an audio file or subtitle file is missing.
Problem 2a: Missing subtitle files
This accounts for the vast majority of non-playing cutscenes. Creating an empty subtitle file with the correct filename, in the "media/Data/Subtitles" directory will fix these, though in many cases we have to guess at the correct filename. I wrote a script which will generate all possibilities, which seems to do the trick (or at least, I finished the game and never had another cutscene failure due to missing subtitle files). It generates far more files than are actually necessary, but it saves having to figure out the exact filename for every case. That script is here: https://gist.github.com/apocalyptech/3f9c3cc1b13ef8a400d2604d1c1da4b9

Alternatively, if you want to just create 'em by hand, or make your own simpler loop, this is the list of empty files that I created in the Subtitles directory:

  • MOV_020.srt
  • MOV_020_EN.srt
  • MOV_021.srt
  • MOV_021_EN.srt
  • MOV_025.srt
  • MOV_025_EN.srt
  • MOV_026.srt
  • MOV_026_EN.srt
  • MOV_035.srt
  • MOV_035_EN.srt
  • MOV_040.srt
  • MOV_040_EN.srt
  • MOV_050.srt
  • MOV_050_EN.srt
  • MOV_070.srt
  • MOV_070_EN.srt
  • MOV_080.srt
  • MOV_080_EN.srt
  • MOV_090.srt
  • MOV_090_EN.srt
  • MOV_105.srt
  • MOV_105_EN.srt
  • MOV_112.srt
  • MOV_112_EN.srt
  • MOV_120.srt
  • MOV_120_EN.srt
  • MOV_125.srt
  • MOV_125_EN.srt
  • MOV_130.srt
  • MOV_130_EN.srt
  • MOV_140.srt
  • MOV_140_EN.srt
  • MOV_150A.srt
  • MOV_150A_EN.srt
  • MOV_150B.srt
  • MOV_150B_EN.srt
  • MOV_150C.srt
  • MOV_150C_EN.srt
  • MOV_150a.srt
  • MOV_150a_EN.srt
  • MOV_150b.srt
  • MOV_150b_EN.srt
  • MOV_150c.srt
  • MOV_150c_EN.srt
  • MOV_160.srt
  • MOV_160_EN.srt
  • MOV_180.srt
  • MOV_180_EN.srt
  • MOV_185.srt
  • MOV_185_EN.srt
  • MOV_190A.srt
  • MOV_190A_EN.srt
  • MOV_190B.srt
  • MOV_190B_EN.srt
  • MOV_190C.srt
  • MOV_190C_EN.srt
  • MOV_190a.srt
  • MOV_190a_EN.srt
  • MOV_190b.srt
  • MOV_190b_EN.srt
  • MOV_190c.srt
  • MOV_190c_EN.srt
  • MOV_195A.srt
  • MOV_195A_EN.srt
  • MOV_195B.srt
  • MOV_195B_EN.srt
  • MOV_195a.srt
  • MOV_195a_EN.srt
  • MOV_195b.srt
  • MOV_195b_EN.srt
  • MOV_196A.srt
  • MOV_196A_EN.srt
  • MOV_196B.srt
  • MOV_196B_EN.srt
  • MOV_196b.srt
  • MOV_196b_EN.srt
  • MOV_197_1.srt
  • MOV_197_1_EN.srt
  • MOV_197_2A.srt
  • MOV_197_2A_EN.srt
  • MOV_197_2B.srt
  • MOV_197_2B_EN.srt
  • MOV_197_2a.srt
  • MOV_197_2a_EN.srt
  • MOV_197_2b.srt
  • MOV_197_2b_EN.srt
  • MOV_200A.srt
  • MOV_200A_EN.srt
  • MOV_200B.srt
  • MOV_200B_EN.srt
  • MOV_200C.srt
  • MOV_200C_EN.srt
  • MOV_200a.srt
  • MOV_200a_EN.srt
  • MOV_200b.srt
  • MOV_200b_EN.srt
  • MOV_200c.srt
  • MOV_200c_EN.srt
  • MOV_205.srt
  • MOV_205_EN.srt
  • MOV_207.srt
  • MOV_207_EN.srt
  • MOV_208.srt
  • MOV_208_EN.srt
  • MOV_210.srt
  • MOV_210_EN.srt
  • MOV_220.srt
  • MOV_220_EN.srt
  • MOV_250.srt
  • MOV_250_EN.srt
  • MOV_265.srt
  • MOV_265_EN.srt
  • MOV_300A.srt
  • MOV_300A_EN.srt
  • MOV_300B.srt
  • MOV_300B_EN.srt
  • MOV_300C.srt
  • MOV_300C_EN.srt
  • MOV_300D.srt
  • MOV_300D_EN.srt
  • MOV_300a.srt
  • MOV_300a_EN.srt
  • MOV_300b.srt
  • MOV_300b_EN.srt
  • MOV_300c.srt
  • MOV_300c_EN.srt
  • MOV_300d.srt
  • MOV_300d_EN.srt
  • MOV_305.srt
  • MOV_305_EN.srt
  • MOV_310.srt
  • MOV_310_EN.srt
  • MOV_315A.srt
  • MOV_315A_EN.srt
  • MOV_315B.srt
  • MOV_315B_EN.srt
  • MOV_315C.srt
  • MOV_315C_EN.srt
  • MOV_315a.srt
  • MOV_315a_EN.srt
  • MOV_315b.srt
  • MOV_315b_EN.srt
  • MOV_315c.srt
  • MOV_315c_EN.srt
  • MOV_320.srt
  • MOV_320_EN.srt
  • MOV_321.srt
  • MOV_321_EN.srt
  • MOV_322.srt
  • MOV_322_EN.srt
  • MOV_323.srt
  • MOV_323_EN.srt
  • MOV_325.srt
  • MOV_325_EN.srt
  • MOV_330.srt
  • MOV_330_EN.srt
  • MOV_331.srt
  • MOV_331_EN.srt
  • MOV_332.srt
  • MOV_332_EN.srt
  • MOV_333.srt
  • MOV_333_EN.srt
  • MOV_334.srt
  • MOV_334_EN.srt
  • MOV_335.srt
  • MOV_335_EN.srt
  • MOV_336.srt
  • MOV_336_EN.srt
  • MOV_337.srt
  • MOV_337_EN.srt
  • MOV_338.srt
  • MOV_338_EN.srt
  • MOV_340.srt
  • MOV_340_EN.srt
  • MOV_350.srt
  • MOV_350_EN.srt
  • MOV_360.srt
  • MOV_360_EN.srt
  • MOV_370.srt
  • MOV_370_EN.srt
  • MOV_410.srt
  • MOV_410_EN.srt
  • MOV_420.srt
  • MOV_420_EN.srt
  • MOV_450.srt
  • MOV_450_EN.srt
  • MOV_455.srt
  • MOV_455_EN.srt
  • MOV_460.srt
  • MOV_460_EN.srt
  • MOV_510A.srt
  • MOV_510A_EN.srt
  • MOV_510B.srt
  • MOV_510B_EN.srt
  • MOV_520.srt
  • MOV_520_EN.srt
  • MOV_530.srt
  • MOV_530_EN.srt
  • MOV_535.srt
  • MOV_535_EN.srt
  • MOV_536.srt
  • MOV_536_EN.srt
  • MOV_540.srt
  • MOV_540_EN.srt
  • MOV_700.srt
  • MOV_700_EN.srt
  • MOV_770.srt
  • MOV_770_EN.srt
  • MOV_775.srt
  • MOV_775_EN.srt
  • MOV_780.srt
  • MOV_780_EN.srt
  • MOV_790.srt
  • MOV_790_EN.srt
  • MOV_802A.srt
  • MOV_802A_EN.srt
  • MOV_802B.srt
  • MOV_802B_EN.srt
  • MOV_804A.srt
  • MOV_804A_EN.srt
  • MOV_804B.srt
  • MOV_804B_EN.srt
  • MOV_804b.srt
  • MOV_804b_EN.srt
  • MOV_810.srt
  • MOV_810_EN.srt
  • MOV_815.srt
  • MOV_815_EN.srt
  • MOV_820.srt
  • MOV_820_EN.srt
  • MOV_840.srt
  • MOV_840_EN.srt
  • MOV_850.srt
  • MOV_850_EN.srt
  • MOV_860.srt
  • MOV_860_EN.srt
  • MOV_870.srt
  • MOV_870_EN.srt
  • MOV_880.srt
  • MOV_880_EN.srt
  • MOV_890.srt
  • MOV_890_EN.srt
  • MOV_895.srt
  • MOV_895_EN.srt
  • MOV_899.srt
  • MOV_899_EN.srt
  • MOV_900.srt
  • MOV_900_EN.srt
  • MOV_905.srt
  • MOV_905_EN.srt
  • MOV_910.srt
  • MOV_910_EN.srt
  • MOV_915.srt
  • MOV_915_EN.srt
  • MOV_917C.srt
  • MOV_917C_EN.srt
  • MOV_917c.srt
  • MOV_917c_EN.srt
  • MOV_918A.srt
  • MOV_918A_EN.srt
  • MOV_918B.srt
  • MOV_918B_EN.srt
  • MOV_918C.srt
  • MOV_918C_EN.srt
  • MOV_918D.srt
  • MOV_918D_EN.srt
  • MOV_918a.srt
  • MOV_918a_EN.srt
  • MOV_918b.srt
  • MOV_918b_EN.srt
  • MOV_918c.srt
  • MOV_918c_EN.srt
  • MOV_918d.srt
  • MOV_918d_EN.srt
  • MOV_919C.srt
  • MOV_919C_EN.srt
  • MOV_919c.srt
  • MOV_919c_EN.srt
  • MOV_920C.srt
  • MOV_920C_EN.srt
  • MOV_920c.srt
  • MOV_920c_EN.srt
  • MOV_925.srt
  • MOV_925_EN.srt
  • MOV_935.srt
  • MOV_935_EN.srt
  • MOV_940.srt
  • MOV_940_EN.srt
  • MOV_945.srt
  • MOV_945_EN.srt
  • MOV_952.srt
  • MOV_952_EN.srt
  • MOV_953.srt
  • MOV_953_EN.srt
  • MOV_970.srt
  • MOV_970_EN.srt
  • MOV_971.srt
  • MOV_971_EN.srt
  • MOV_972.srt
  • MOV_972_EN.srt
  • MOV_974.srt
  • MOV_974_EN.srt
  • MOV_976.srt
  • MOV_976_EN.srt
  • MOV_978.srt
  • MOV_978_EN.srt
  • MOV_982.srt
  • MOV_982_EN.srt
  • MOV_984.srt
  • MOV_984_EN.srt
  • MOV_986.srt
  • MOV_986_EN.srt
Problem 2b: Missing Audio Files (possibly unfixable)
The first two cutscenes with missing audio files are because the audio files are completely missing from the media/Audio/MOV directory. The cutscenes in question are pretty minor and I didn't bother trying to find out if just putting a blank mp3 in place would fix these. If you want to know which two those are: They're just Pete/Steve looking at himself in the reflective surfaces of the Courtyard, and the Wind Chapel, once you get those in place. Not a big deal, really.
Problem 2c: Missing Audio Files (fixable)
There's at least two more "missing" audio files, but it turns out that it's because of case-sensitivity issues. Linux filesystems are case-sensitive and the engine is looking for the wrong one. I put together a script to symlink all case possibilities for all audio files. As with my subtitle script, this creates more files than it needs to, but it does at least provide all the necessary symlinks. That script is at: https://gist.github.com/apocalyptech/41293f21758312481237c1dc1429043f

Alternatively, if you wanted to just make the links yourself, or script it some other way, here's a list of all the symlinks which that script creates:

  • Linking MOV_150a.mp3 -> MOV_150A.mp3
  • Linking MOV_150b.mp3 -> MOV_150B.mp3
  • Linking MOV_150c.mp3 -> MOV_150C.mp3
  • Linking MOV_190a.mp3 -> MOV_190A.mp3
  • Linking MOV_190b.mp3 -> MOV_190B.mp3
  • Linking MOV_190c.mp3 -> MOV_190C.mp3
  • Linking MOV_195a.mp3 -> MOV_195A.mp3
  • Linking MOV_195b.mp3 -> MOV_195B.mp3
  • Linking MOV_196a.mp3 -> MOV_196A.mp3
  • Linking MOV_196a_EN.mp3 -> MOV_196A_EN.mp3
  • Linking MOV_196b.mp3 -> MOV_196B.mp3
  • Linking MOV_197_2a.mp3 -> MOV_197_2A.mp3
  • Linking MOV_197_2b.mp3 -> MOV_197_2B.mp3
  • Linking MOV_200a.mp3 -> MOV_200A.mp3
  • Linking MOV_200a_EN.mp3 -> MOV_200A_EN.mp3
  • Linking MOV_200b.mp3 -> MOV_200B.mp3
  • Linking MOV_200c.mp3 -> MOV_200C.mp3
  • Linking MOV_200c_EN.mp3 -> MOV_200C_EN.mp3
  • Linking MOV_300a.mp3 -> MOV_300A.mp3
  • Linking MOV_300b.mp3 -> MOV_300B.mp3
  • Linking MOV_300c.mp3 -> MOV_300C.mp3
  • Linking MOV_300d.mp3 -> MOV_300D.mp3
  • Linking MOV_315a.mp3 -> MOV_315A.mp3
  • Linking MOV_315b.mp3 -> MOV_315B.mp3
  • Linking MOV_315c.mp3 -> MOV_315C.mp3
  • Linking MOV_510a.mp3 -> MOV_510A.mp3
  • Linking MOV_510a_EN.mp3 -> MOV_510A_EN.mp3
  • Linking MOV_510b.mp3 -> MOV_510B.mp3
  • Linking MOV_510b_EN.mp3 -> MOV_510B_EN.mp3
  • Linking MOV_802a.mp3 -> MOV_802A.mp3
  • Linking MOV_802a_EN.mp3 -> MOV_802A_EN.mp3
  • Linking MOV_802b.mp3 -> MOV_802B.mp3
  • Linking MOV_802b_EN.mp3 -> MOV_802B_EN.mp3
  • Linking MOV_804a.mp3 -> MOV_804A.mp3
  • Linking MOV_804a_EN.mp3 -> MOV_804A_EN.mp3
  • Linking MOV_804b.mp3 -> MOV_804B.mp3
  • Linking MOV_804b_EN.mp3 -> MOV_804B_EN.mp3
  • Linking MOV_917C.mp3 -> MOV_917c.mp3
  • Linking MOV_918A.mp3 -> MOV_918a.mp3
  • Linking MOV_918B.mp3 -> MOV_918b.mp3
  • Linking MOV_918C.mp3 -> MOV_918c.mp3
  • Linking MOV_918D.mp3 -> MOV_918d.mp3
  • Linking MOV_919c.mp3 -> MOV_919C.mp3
  • Linking MOV_920c.mp3 -> MOV_920C.mp3
Conclusion
So yeah, with all that, you should be able to see all the cutscenes in the game except for two minor ones near the middle. Not too shabby, really. It would be really nice if we got an official patch which fixed all this stuff properly (including the two outliers), but this should make the game at least playable. Which is a good thing, because it's a quite charming game otherwise!

Anyway, enjoy!
6 Comments
apocalyptech  [author] 4 Jan, 2020 @ 3:20pm 
Yeah, I hear that re: wishing the devs would fix it. The game as-is gives the distinct impression that it was literally never even playtested on Linux. Gave the sequel a miss 'cause of the mess that this port was in.

('fraid I don't remember if the Flute Nose thing affected me or not)
TheLimeyDragon 3 Jan, 2020 @ 7:56am 
You're welcome. Just wish the devs would have patched it themselves.

Only thing I'd like to know and I've been trying to work out but it's probably beyond my ability is what causes this weird game freeze when Flute Nose is on the stage (and also on the music mini game which also happens on the stage so it's probably caused by the same problem.) The freeze occurs when trying to load the game via steam or just double clicking the executable out of steam. However just running the same executable via the command line and it doesn't freeze at all. It's not reading any different library files. So I'm extremely confused. But maybe it's just my computer and it doesn't happen to anyone else.

Spent a good half a day messing around just messing around with things but I'm just as clueless as when I started for that specific issue.
apocalyptech  [author] 3 Jan, 2020 @ 7:06am 
Awesome, thanks for the patch! I've created a new section up there and linked to it (crediting you, of course), def. let me know if that (or anything else) needs some tweaks.

Thanks again!
TheLimeyDragon 2 Jan, 2020 @ 6:34am 
Finally got round to making an unofficial patch file to fix the broken cutscenes and also add in the missing audio dialogue that never got fixed in our version of the game:

https://www.dropbox.com/s/ox6sa4mxwjoca94/TIW_LUP-0.9a.zip?dl=0

This patch simply adds files to the game, it does not remove/rename/alter anything.

I did a quick run through of the game I couldn't find anything I missed. But any feed back would be nice.

It's probably also possible to fix other small things like missing lipsync data that happens a couple of times.

Someone with programming knowledge could probably hack/fix some of the other issues. But in the end it's probably easier to use the proton version of the game. As the windows version also has high res graphics.
Zyro 25 Jan, 2018 @ 12:17pm 
Thanks!
On Debian Stretch, installing openjfx (which pulls in the other two) helped for the videos.
orivej 9 Jan, 2018 @ 10:01am 
Thanks for the info and the scripts!

I have figured out the first problem in more detail. The game does not directly depend on any shared libraries for media playback. However, it expects that java can decode media files. For example, it runs java -jar mplay.jar media/movies/MOV_000.m4v media/Audio/MOV/MOV_000_EN.mp3 media/Data/Subtitles/MOV_000_EN.srt in the game folder. You may run this command to test if it can. An installation of Oracle JDK 8 should work. Alternatively you may replace java with mpv using this script: https://gist.github.com/orivej/1557694fa39ef16c2dc7e207b9c16f9b