f-log

just another web log

19 Jun 2026:
I took a SideQuest for Unlooped vr and lost

I took a SideQuest for Unlooped vr and lost

Unlooped is an interesting VR game that I bought a while ago on the Quest 2.

The premise is that there is a time loop in each puzzle level and that when it runs out a new version of "you" the player are spawned. So there is lots of preparing areas for future "you's". It is reasonable fun if you like that style of puzzle game.

I found it a bit grinding, while at the same time I just wanted to complete all the levels. The problem was I kept getting sick. VR sick, I couldn't be sure, but it felt like low frame rates.

I had been chiselling at the levels, but quite often only being able to play for 10 minutes before feeling unwell and unable to continue. So doing something about it has been in the back of my mind for sometime.

SideQuest is the third party app store that is sort-of endorsed by Meta and additionally it allows you to control a number of the headset parameters that are normally hidden.

Download the AppImage, expect it is not an AppImage file, try and uncompress it and it is a full tarball. After a little messing about I have the executable for Linux.

and it will not run because ... drum roll please ...

the PRINTER subsystem is not set up!

Yes, without CUPS installed (I hate CUPS with a vengeance and go out of my way to remove any single part of it) the Electron based SideQuest app will not run.

I tried a number of work arounds that I will not bore you with. The final solution was to rename the libcups.so.2 file that is bundled with SideQuest and then build my own fake one (fake.c).

void cupsGetOption() {}
void cupsFreeDests() {}
void cupsGetDests() {}
void cupsGetNamedDest() {}
void cupsPrintFile() {}
void cupsLastError() {}
void cupsLastErrorString() {}
void cupsGetPPD() {}
void cupsFreeOptions() {}
void cupsAddOption() {}
void cupsEnumDests() {}
void cupsGetDest() {}
void httpConnectEncrypt() {}
void httpBlocking() {}
void httpClose() {}
void httpError() {}
void ppdOpenFd() {}
void ppdLastError() {}
void ppdErrorString() {}
void ppdMarkDefaults() {}
void cupsMarkOptions() {}
void ppdFindOption() {}
void ppdFindChoice() {}
void ppdClose() {}
void ppdFindAttr() {}
void ppdFindMarkedChoice() {}
void cupsGetDests2() {}
void cupsGetPPD2() {}
void cupsRemoveDest() {}
void cupsCopyDest() {}

Those are all empty stubs and were only discovered by running the SideQuest app each time I new one was added. Took a while, there are better ways but "sunk cost fallacy" etc.

gcc -shared -o libcups.so.2 fake.c
LD_LIBRARY_PATH=$PWD ./sidequest

and it is running!

Device settings and Frame rate, click 120 and it reports set successfully!

But the game is still horrible.

I am going to cut the details out here, but just know that there are multiple settings you can muck around with.

Checking the actual frame rate of the headset

adb shell dumpsys SurfaceFlinger --latency

says

8333333

which is 120hz (number of milliseconds per frame

but checking the frame rate of the game

adb shell logcat | grep -i fps

was averaging 50 FPS!

No wonder it was making me want to puke.

FFR ( Fixed Foveated Rendering ) level to OFF

Boosting the CPU to Level 4 and setting the default texture size to "Quest 1" got me to 60FPS

but toggling the power killed all visuals and restarting the app gives 30FPS

This is unplayable.

Mucking about with all the settings and restarting the game, shows 120 when starting that drops to 60 as you enter the game and 30-38 when the world is in play.

I noticed the sickness issues the more I played through the game, so maybe detailed and larger levels are causing the issues. There certainly are more complex prop devices.

Hold the press! I set the texture size to 512 (the lowest) and restarted the game, I now get 80FPS, but you cannot read anything and one of your jobs in Unlooped is to keep an eye on the various readouts.

This is unplayable.

I wonder if it was really aimed at the Quest 3 device...

The game is well reviewed, so either no one is getting into the later levels, or they are but not using a Quest 2. (or they do not get VR sick)

loading results, please wait loading animateloading animateloading animate
[More tags]
rss feed

email

root

flog archives


Disclaimer: This page is by me for me, if you are not me then please be aware of the following
I am not responsible for anything that works or does not work including files and pages made available at www.jumpstation.co.uk I am also not responsible for any information(or what you or others do with it) available at www.jumpstation.co.uk In fact I'm not responsible for anything ever, so there!