The Longest Journey on Raspberry Pi

General chat related to ScummVM, adventure gaming, and so on.

Moderator: ScummVM Team

Post Reply
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

The Longest Journey on Raspberry Pi

Post by scarmona »

Hi all,
I've been trying to get The Longest Journey (using my copy from GOG) with the HD mod using the latest source build of ResidualVM for RetroPie (https://github.com/retropie/retropie-se ... ResidualVM) without much luck. I cannot make it past the main menu screen, as soon as I start the game, ResidualVM exits to the RetroPie graphical frontend (EmulationStation in this case).
I know it's not officially supported yet, but the daily build works in my Windows 10 setup, so I thought I would give this a try on the Pi.

The latest ResidualVM built from source I used is 0.4.0git (Nov 12, 2019), see the script below:

Code: Select all

rp_module_id="residualvm"
rp_module_desc="ResidualVM - A 3D Game Interpreter"
rp_module_help="Copy your ResidualVM games to $romdir/residualvm"
rp_module_licence="GPL2 https://raw.githubusercontent.com/residualvm/residualvm/master/COPYING"
rp_module_section="exp"
rp_module_flags="dispmanx !mali !kms"

function depends_residualvm() {
    local depends=(
        libsdl2-dev libmpeg2-4-dev libogg-dev libvorbis-dev libflac-dev libmad0-dev
        libpng-dev libtheora-dev libfaad-dev libfluidsynth-dev libfreetype6-dev
        zlib1g-dev libjpeg-dev
    )
    isPlatform "x11" && depends+=(libglew-dev)
    isPlatform "rpi" && depends+=(libraspberrypi-dev)
    getDepends "${depends[@]}"
}

function sources_residualvm() {
    gitPullOrClone "$md_build" https://github.com/ResidualVM/ResidualVM.git
}

function build_residualvm() {
    local params=(
        --enable-opengl-shaders
        --enable-vkeybd
        --enable-release
        --disable-debug
        --enable-keymapper
        --prefix="$md_inst"
    )
    ! isPlatform "x11" && params+=(--force-opengles2)
    if isPlatform "rpi"; then
        CXXFLAGS+=" -I/opt/vc/include" LDFLAGS+=" -L/opt/vc/lib" ./configure "${params[@]}"
    else
        ./configure "${params[@]}"
    fi

    make clean
    make
    strip "$md_build/residualvm"
    md_ret_require="$md_build/residualvm"
}

function install_residualvm() {
    make install
    mkdir -p "$md_inst/extra"
    cp -v backends/vkeybd/packs/vkeybd_*.zip "$md_inst/extra"
}

function configure_residualvm() {
    mkRomDir "residualvm"

    moveConfigDir "$home/.config/residualvm" "$md_conf_root/residualvm"

    # Create startup script
    cat > "$romdir/residualvm/+Start ResidualVM.sh" << _EOF_
#!/bin/bash
renderer="\$1"
[[ -z "\$renderer" ]] && renderer="software"
game="\$2"
[[ "\$game" =~ ^\+ ]] && game=""
pushd "$romdir/residualvm" >/dev/null
$md_inst/bin/residualvm --renderer=\$renderer --fullscreen --joystick=0 --extrapath="$md_inst/extra" \$game
while read id desc; do
    echo "\$desc" > "$romdir/residualvm/\$id.rvm"
done < <($md_inst/bin/residualvm --list-targets | tail -n +3)
popd >/dev/null
_EOF_
    chown $user:$user "$romdir/residualvm/+Start ResidualVM.sh"
    chmod u+x "$romdir/residualvm/+Start ResidualVM.sh"

    addEmulator 0 "$md_id" "residualvm" "bash $romdir/residualvm/+Start\ ResidualVM.sh opengl_shaders %BASENAME%"
    addEmulator 1 "$md_id-software" "residualvm" "bash $romdir/residualvm/+Start\ ResidualVM.sh software %BASENAME%"
    addSystem "residualvm" "ResidualVM" ".sh .rvm"
Does anyone have any tips on what things to try to make this work?

Thanks
Botje
Posts: 207
Joined: Thu Feb 28, 2013 5:48 pm

Re: The Longest Journey on Raspberry Pi

Post by Botje »

This issue was already reported previously but we cannot debug it without access to a Raspberry Pi. If you are able to do either of the following, we might make progress on this front:
  • run ResidualVM in a debugger and capture a stack trace, or
  • let it generate a core dump and provide us with said core dump + the executable (with debug symbols)
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

Re: The Longest Journey on Raspberry Pi

Post by scarmona »

Unfortunately, the debug process ends up with an empty stack. When looking at the error logs from EmulationStation, this is what I see:

Code: Select all

Parameters: 
Executing: bash "/home/pi/RetroPie/roms/residualvm/+Start ResidualVM.sh"
WARNING: Invalid joystick: 0!
Virtual keyboard pack 'vkeybd_default' loaded successfully
WARNING: No hardware input were defined, using defaults!
User picked target 'tlj-win' (gameid 'stark')...
  Looking for a plugin supporting this gameid... Stark Engine
  Starting 'Stark Game'
INFO: OpenGL Vendor: Broadcom
INFO: OpenGL Renderer: VideoCore IV HW
INFO: OpenGL Version: OpenGL ES 2.0
INFO: OpenGL Red bits: 8
INFO: OpenGL Green bits: 8
INFO: OpenGL Blue bits: 8
INFO: OpenGL Alpha bits: 8
INFO: OpenGL Z buffer depth bits: 24
INFO: OpenGL Double Buffer: 1
INFO: OpenGL Stencil buffer bits: 8
INFO: GLSL version: OpenGL ES GLSL ES 1.00
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
WARNING: Stem darkening is not available with this version of FreeType!
ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred
WARNING: Stark::XARC Member: "map inv.xmg" has unknown=2 with unknown meaning!
WARNING: Stark::XARC Member: "map cursor.xmg" has unknown=2 with unknown meaning!
WARNING: Stark::XARC Member: "april_crouch_pickup.ani" has unknown=2 with unknown meaning!
WARNING: Stark::XARC Member: "april_run.ani" has unknown=2 with unknown meaning!
WARNING: Stark::XARC Member: "april_swimming_idle.ani" has unknown=2 with unknown meaning!
WARNING: Stark::XARC Member: "april.xmg" has unknown=3 with unknown meaning!
WARNING: Stark::XARC Member: "arkadianmale_sitting.ani" has unknown=2 with unknown meaning!
WARNING: Stark::XARC Member: "arkadiafemale_sitting.ani" has unknown=2 with unknown meaning!
No uniform named 'boneRotation'!
No uniform named 'boneRotation'!
Does this help in any way?
I'll continue to work on the debug/core dump, will post my progress here.
Botje
Posts: 207
Joined: Thu Feb 28, 2013 5:48 pm

Re: The Longest Journey on Raspberry Pi

Post by Botje »

It shows that some shader failed to compile properly but not much more.
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

Re: The Longest Journey on Raspberry Pi

Post by scarmona »

Maybe that's all I need to fix?
I also had to disable the HD Mod as they didn't display at all, I would see a black screen and the mouse pointer, only the descriptions of the main menu options would show when I hovered over them.

If you tell me how to modify the script in the original post above I can compile from source and test again.
Botje
Posts: 207
Joined: Thu Feb 28, 2013 5:48 pm

Re: The Longest Journey on Raspberry Pi

Post by Botje »

At a guess: first, change

Code: Select all

--disable-debug
to

Code: Select all

--enable-debug
in the

Code: Select all

build_residualvm
function, recompile ResidualVM. Then, modify the "+Start ResidualVM.sh" script to call

Code: Select all

ulimit -c unlimited
so that it produces a core dump on crash.
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

Re: The Longest Journey on Raspberry Pi

Post by scarmona »

Hi @botje,
I tried running ResidualVM from the debugger, still no stack and this is the output:
Image

UPDATE: I just noticed you left some instructions above, I'll commit the changes, recompile and let you know how it goes.
Thank you
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

Re: The Longest Journey on Raspberry Pi

Post by scarmona »

Hi @botje, the recompiled from source version is still not giving any dump or stack.

I've checked with the RetroPie dev team and they say the app is not crashing, just exiting, is that possible?
Any hints on what's the component that may not be functioning?

Thanks
Botje
Posts: 207
Joined: Thu Feb 28, 2013 5:48 pm

Re: The Longest Journey on Raspberry Pi

Post by Botje »

From a bit of googling, I found that this can be caused by too many uniform slots used in the shader.
The Raspberry PI GPU has a max of GL_MAX_VERTEX_UNIFORM_VECTORS = 136.
The vertex shader for actors blows through that budget with just the bone uniforms (140 vec4 uniforms).

As a quick test, can you try editing the stark_actor.vertex file and lowering the number to 30 in the line

Code: Select all

const int maxBones = 70;
If that works, it will very probably glitch some actors pretty badly but the game should play.
You can try ramping that number back up, but the real solution is to rework the bone uniform passing, I'm afraid.
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

Re: The Longest Journey on Raspberry Pi

Post by scarmona »

Thanks Botje, but that didn't work.
Any other suggestions or tips?
User avatar
scarmona
Posts: 39
Joined: Sun Jun 03, 2012 11:09 pm
Location: Toronto, Canada

Re: The Longest Journey on Raspberry Pi

Post by scarmona »

Hi, I tried again today as I see there have been new commits to the 0.4.0git version, unfortunately now The Longest Journey doesn't start at all...
Post Reply