f-log

just another web log

31 Aug 2025:
a quest for the resident evil

Resident Evil 4 VR

Another sale special, in fact if you look at just about any of my VR reviews they are for games that I got on sale. Because the standard prices are too high and waiting for a sale can be as little as 3-6 months.

The game play

Point and shoot. But of course there is much more to it than that. There is the multiple weapons, treasure hunting, inventory management, numerous puzzles and varying enemies requiring different strategies.

resident evil 4 shotgun

The experience

The opening scene felt a bit lack lustre, low poly and drab. But then just standing there and using the knife. Getting crisp high frame rates and high resolution textures. You could almost taste how good the game was going to be.

The weapons are incredibly detailed and satisfying to use. I was very surprised with the impact inventory management has to play as well as how preserving your ammo is critical.

You start by fighting peasants with pitchforks, but this rapidly ramps up to chainsaw wielding hooded figures, giant trolls, wolfs, snakes, armed monks, crazed soldiers and that is excluding the numerous boss enemies!

I really enjoyed the treasure hunting and upgrading your weapons. It gave the game a lot of gravitas with your choices.

There is lots of dialog and variances in the basic game play. Including, heart attack inducing Quick-Time events.

The problems

Mostly this game is perfect. There were two areas that caught me out.

I was able to solve all the puzzles without help from the internet, but there was one that I brute forced and then tried to find the details on line, only to find no one seems to know how you are supposed to know the answer. Which is strange, all the other puzzles either were self explanatory or clues could be found.

The other was this fellow resident evil 4 boss

He is confusing as an enemy and can be strategically avoided or killed. What was really odd, was that leading up to the encounter were a number of liquid nitrogen canisters that the game brings to your attention. They looked like a basic bomb mechanic, where you shoot to blow them up as the enemy passes. But that is not how they work and as you cannot interact with any of them before the encounter I did not believe they could be activated. Only after completing this section and wasting a ton of ammo did I learn that you could (if you had the nerve to stand around with that thing hunting you) open a valve and jump out of the way.

There is a set of shooting ranges to encourage you to improve your aim and I completed nearly all of them, unlocking the basic and advanced prizes. Unfortunately, one of the guns is a blunderbuss style shotgun and it is purely luck if the shots hit the enemy, bonus or friendlies, making a perfect score almost impossible. While another seemed to work perfectly and I hit head shots on all the enemies, got all the bonuses and avoided hitting friendlies, but did not get a high enough score for the extra unlockable.

Conclusion

resident evil 4 completion stats 20 hours plus to complete! That has now unlocked numerous replay options including the Merc wave shooter challenges.

An amazing and memorable experience. Well worth it!

31 Aug 2025:
going on the quest to be ironman

Ironman VR

It was a while back that I saw this on sale and bought it on Meta's store.

Well worth the money!

Ironman VR title screen

Before we start, the Flying did NOT make me sick , but read the Problems section to see what DID make me sick .

The game play

The basic game play is; lock-on missile - fire, shoot, shoot, shoot, recharge, repeat.

But there is so much more to it than that. Flying around, strong story, puzzles, chases, customisation, races and a star rating per mission.

ironman vr custom suit

The experience

The graphics are very nice, little low poly on missions, but overall very good for the Quest 2. The first time (and all further times) you deploy for a mission and the face-plate comes down, sealing to your face is breath taking.

There is a lot of unskippable dialog with NPC actors, all with immersive voice overs. These scenes are what makes this a AAA gaming experience. It also drives the story. I did believe it was Robert Downy Jr. talking, but in the end credits it clearly wasn't.

The missions are nicely sized, offering approximately 45 minute excursion. Nothing is overly difficult and things are varied just enough to keep you hooked. You will feel compelled to complete the game.

ironman vr flying with HUD

The problems

I was very worried when starting out that the flying would make me motion sick. It did not, was very enjoyable and easy to control.

What did make me sick was the steps in the walking sections. These areas were in the story portions and simply required me to climb a flight of stairs or even a few steps to reach a platform. When I say made-me-sick , I mean three steps and I had to close my eyes and then take a break. It was insanely nausea inducing and there was a lot of it in Tony's lab.

One other problem was the different ways to activate weapons and the lack of a instruction set to refer to. For instance, you get access to the classic chest blaster and the game explains how to use it. But then you do not need it for few missions. Then all of a sudden the enemy can only be defeated with the chest cannon and the NPC is telling you to activate it and you cannot for the life of you work out how!

Conclusion

In balance and with the sale price I highly recommend this to any Marvel fan that wants to be Ironman.

ironman vr ghost corrupting display

31 Aug 2025:
blender vr in wivrn

Blender VR in WiVRn

Just a quick note that, yes Blender does work with WiVRn.

Add the built-in add-on for VR scene view and Start VR Session

Blender VR settings

30 Aug 2025:
doh i did it again

Quick intermission.

doh! missed a bit

30 Aug 2025:
oops i did it again

Quick intermission.

Well, that mostly worked.

... until next time :D

30 Aug 2025:
quick intermission to reencode

Quick intermission.

Well, it mostly worked. The ordering of the encoding was unhappy with the characters

& g t ;

and did not convert it into

& g t ;

but think that was by design and I can live with it... until next time :D

30 Aug 2025:
who is encoding what highlights

Quick intermission.

The flog service was not double encoding html entities, but the highlighting service was sometimes reformatting them.

Lets see it handle me talking about handling it :D

Input

>=

I encode this for html

>=

The highlight service converts it to

&<span class="hljs-keyword">gt</span>;

Which breaks it from an html entity to plain characters.

30 Aug 2025:
why wirvn

WiVRn

I really want to do VR development. With my main requirements being;

WebXR appeared to be the obvious route, but that was not the case as I found a myriad of problems with it.

The first two are nicely covered by the openness of Godot. The next two are actually covered by something I had installed a while ago and promptly forgotten about.

WiVRn is a streaming client/server model for VR headsets. By that I mean that instead of streaming a movie it streams the headset and controllers actions to the server and in turn the server streams back the 3D rendered world.

It was not quite turnkey to install on Gentoo and set up, but here are my notes.

Install the WiVRn client from the Meta Quest store. Easy!

Set up the Guru overlay repository and emerge it from there.

emerge --ask app-eselect/eselect-repository
mkdir -p /etc/portage/repos.conf
eselect repository enable guru
eselect repository list -i
emerge --sync
emerge -av wivrn

I also had to add a few bits to /etc/portage/package.accept_keywords and use ufed to enable the extra flag (that really is the name).

# 2025 WiVRn from Guru overlay
>=media-libs/wivrn-25.8 ~amd64
>=media-libs/openxr-loader-1.1.45-r1 ~amd64

Avahi was already installed and working but it should have needed

emerge --ask net-dns/avahi
rc-update add avahi-daemon default
rc-service avahi-daemon start

Now as a non root user

wivrn-dashboard

Follow the wizard and start the app on the headset with the PIN shown in the UI.

The wizard wants to know what executable to run when you connect, but you can just leave it blank and test it when Godot is running. Which reminds me, I must try Blender's VR mode...

23 Aug 2025:
webxr is dumb

WebXR is dumb!

Back in 2021 I tried some basic VR development using Godot on Windows 10 (yuck!)

It did work, but my circumstances changed and I forgot all about it.

The process was easy.

  1. Develop in the free and open source Godot game engine
  2. Export as a WebXR page (and adding the secret sauce)
  3. Open a browser on the Quest
  4. Navigate to that page
  5. ...
  6. Prophet!

The caveat is that for browsers to allow WebXR content the page MUST be hosted on HTTPS. Which is a pain, because normally local development is all HTTP, easy to set up.

I cannot remember how I got Windows 10 to host the pages in HTTPS but it might have had something to do with WSL and sudo.

Fast forward to this week almost four years later and I can see that people drop the term WebXR casually in compatibility chats for VR. So it must be a mature and well supported/used technology then?

No!

Here are my notes for trying to get anything to work sensibly, even before using the Quest.

Godot works in Gentoo

This one did surprise me. But a simple

emerge -av godot

I need to let that sink in ... nothing off the beaten path ever works out-of-the-box like that for me on Gentoo. There is always a way to get things to work but the amount of fiddling/finessing is the trade off.

It was also a very recent release 4.4.1 and it just worked!

I had a fully working and ready to go game development environment!

Hosting HTTPS

Before I remembered that WebXR HAD to be HTTPS I did try the classic http route

python -m http.server 8000

Which just fails without a fanfare.

As I already had lighttpd running a number of local sites, I added HTTPS support.

This involved adding a server binding

$SERVER["socket"] == "0.0.0.0:443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/lighttpd/certs/lighttpd_https.pem"
  server.document-root = "/var/www/webxr_https/"
  server.errorlog = "/var/log/lighttpd/error_webxr_https.log"
  accesslog.filename = "/var/log/lighttpd/access_webxr_https"
}

Not sure if this next bit was actually necessary, but it did stop the server whining.

server.modules = (
    ....
    "mod_openssl"
    ....
)

The pem file was originally created with

openssl req -new -x509 -keyout lighttpd_https.pem -out lighttpd_https.pem -days 365 -nodes
chmod 400 lighttpd_https.pem

and then recreated with

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout lighttpd_https.key -out lighttpd_https.crt -subj "/CN=192.168.0.32" -addext "subjectAltName=IP:192.168.0.32"
cat lighttpd_https.crt lighttpd_https.key >; lighttpd_https.pem
chmod 400 lighttpd_https.pem

Where 192.168.0.32 was my local machines IP.

Not sure the recreated IP specific pem was needed, the problem was that I had not bound the socket to "0.0.0.0:443" originally.

Diagnosed the issue with

/etc/init.d/lighttpd restart
netstat -tulpn | grep ':443'

The three way Godot shuffle

I found a YouTube video Getting Started With XR in Godot 4.3 Tutorial! . It went through the process of creating a world, camera, controllers, basic set pieces and interactive objects. Not bad for 20 minutes.

I had not really thought about it but these instructions were for OpenXR not WebXR. It would have been nice to just set the export to WebXR and it would have magically worked...

So I had a non functional non WebXR game, not very useful.

The Official Godot WebXR documentation references a tutorial Snopekgames.com . Which I read and realised that the WebXR specifics were a few lines of code.

Events

Because it all ends up as Javascript in the browser the VR initialisation is all asynchronous. Which simply means you ask for it rather than demand and then you wait for a reply.

The browser triggers an event announcing that the VR/XR is ready and you listen for it and then you can connect to it and display VR.

Firefox

Back in 2021 I used Firefox to test Godot WebXR before trying to on the headset. This worked, mostly. the Godot XR support was ropy and simple but it did work for the most basic stuff.

WebXR API emulator

To do this magic, Firefox developers had created an add-on/extension called "WebXR API Emulator". It does exactly what the name suggests, it emulates the input from the headset and controllers and passes them through to any WebXR page that is listening. Then the WebXR page shows the headset/camera and controllers moving about. There is a 3D interface in the developer tools screen that allows manipulation of a virtual headset and controllers.

But what ever I did I could not get any Godot based WebXR experiences to work in Firefox and the WebXR API Emulator. Though non Godot experiences worked just fine.

The issue appears to be constant spamming error messages slowing the emulation down to 0. It is unclear if this due to the way Firefox is supporting WebXR or the add-on is emulating the WebXR or that Godot is doing something bad.

Googling and checking forums shows that no one cares. Which is really sad, as my belief was that this was the easy entry point that everyone was using to get started, test and distribute demos etc.

just the snokep

I did try the Snopekgames.com tutorial again. This time from scratch and being highly pedantic about following every single step to nth degree. Matching screen shots of the Godot UI. No change in Firefox.

just the no-code

Found an even older YouTube video Godot 4.0.1 Web-XR Tutorial that is created by one of the main Godot XR/VR developers. It has no code only drag and drop components. It also did not work.

just give up

I tried all these combinations on the Quest 2 headset in both the Meta browser and Wolvic browser and only one worked. It was the bastardised original with the extra event code. Which is weird because it had multiple cameras and controllers... it also only showed the controllers not the world.

Posted on the forum and got crickets. Admittedly I only left it few days ...

the new hope

So is that the end of my dream?

Not quite.

I had installed WiVRn on the Quest headset a while ago and forgotten about it...

more on that next time ...

but finally

The errors I saw in the Firefox dev console using WebXR API Emulator were

ERROR: Condition "p_right <= p_left" is true. index.js:474:18
               at: set_frustum (core/math/projection.cpp:365) index.js:474:18

repeated infinitely or

ERROR: The axis Vector3 (0.0, 0.0, 0.0) must be normalized.

repeated infinitely.

Also tried all the Itch.io Godot XR Jam entries that had WebXR pages in the Meta browser on the Quest 2. None worked correctly. The best I got was a world loading and being able to look around. No movement no, controllers, no interaction.

06 Aug 2025:
dewonking the portal sentry gun

Wonky sentry turret

One of my first Funko Pop characters was the Sentry Turret from Portal. When I removed it from the box (I know, I know!) one leg was bent slightly, meaning it would not stand up on its own.

Over the years I tried over bending it and forcing cardboard in between the legs to fix it, but nothing worked. Then I managed to knock it on the floor where the back leg fell off.

Could have binned it but instead I decided to try and build a stepped platform for it. Took a few iterations to get the holes right, but now it sits happily on my PC case.

photo of a Portal gun Funko wonky

photo of Portal gun Funko on 3d printed platform

Photo of 3D printed Portal gun Funko platform iterations

Although I liked the full size platform it used up a lot of filament and time to keep printing. Also thought of painting it, but looks fine.

05 Aug 2025:
project shelves

3D printed shelf parts

Sometimes I go a little overboard with trying to save money, but then you see the price of shelving kits and ...

Well I have some shelves built into the wall that are very small and I thought it would be "so easy" to print some connectors and extend them with some ply board.

The theory was easy, measure the thickness of the shelves and the thickness of the ply board, cut the ply board and connect. Technically that is all that I did. It fitted first time, it just didn't look great, mainly from the non straight cut of the ply board.

Photo of a custom 3D printed shelf connector

That connected to a standard freestanding shelving unit in the middle of the wall. On the other side there were no in-built shelves to connect to, so I designed and printed some brackets.

A photo of a custom 3D printed shelf bracket on the wall

This was mainly attached with Gorilla glue tape that mostly held. The shelves do not hold anything particularly heavy and some of them were screwed into the free standing shelving unit.

As you might have guessed, I currently have Orange filament in my printer. I think it looks kind of funky (good).

05 Aug 2025:
not quite all my dice

Not quite all my dice

I remember starting D&D and borrowing a set of dice, then buying my own set and thinking I will never need any more than a single set ...

Then I kept finding dice sets that had interesting attributes. Like, containing pandas or octopuses or were metal or a different size.

Then people would gift me dice for my birthday and Xmas.

This is almost all my current dice.

photo of a large number of dice sets

There is also a tiny set of metal dice that fit in a key-ring and a hand made large D20 containing Totoro from Studio Ghibli's My Neighbour Totoro.

and I am sure there will be more in the future.

Oh, that funny disk in the middle is a metal spinner with 20 edges. Surprisingly hard to read which one it has landed on.

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!