So I dunno if you know what a (https://en.wikipedia.org/wiki/Vacuum_fluorescent_display) is but I’m a sucker for these – at least virtually.

Games like perfected the look and this is where I want to go with my HUD app for my / home cockpit too.

Screenshot from the game Rebel Galaxy Outlaw with it's very colourful cockpits full of VFD like displays.

The segment displays are heavily inspired by project (https://augmented-ui.com/) where I’ll borrow some more elements. Learned the neat fake scan lines from there too. And yes the 8 segment display works by shifting bits under the hood 🤓 This isn’t really needed for an app but I have plans to add some real segment displays eventually (I do have a whole box full with these!) so I wanted to know how to implement this anyway.

Video from an earlier stage in the development demos the scan line effect.

The bars are configured with parameters in size, count, percent, colours and thresholds 😁 I also added a random chance of 5% to shift the hue a little bit because just as in real life nothing is perfect.

A colourful button box surrounding a display that shows various data from the game running in the background stretched over several own displays for immersion.

And yes they are fully themed so switching the colour theme also affects the virtual VFDs.

I’m also going to replace the older horizontal bars, that look way too boring in comparison.

It’s still very early but I hope to get some rad animations going too. See https://www.hudsandguis.com/home/2022/retro-digital-dashboards to get an idea in which direction this is going 🤓

See the dedicated project page https://SimPit.dev for more details on this inspired panel.

I gave in and changed my event forwarding method in node-red for the Elite Dangerous Journal. This file is updated on various in-game events but in a way that makes it difficult to get new events only since last update. Another problem is that it’s not really a valid JSON file because it has one JSON per line but it’s not a valid JSON array. This is why it has to be parsed line by line and mashed together by event type (name) again to get the latest data for each event type per dump. Each event has it’s own timestamp by set by the game. The latest timestamp is now saved on the special flow const so node-red keeps the value in the “global” memory of the current flow:

msg.payload.event = "Journal";

let newJournalTimestamp = flow.lastJournalTimestamp;

Object.keys(msg.payload).forEach((key) => {
  if (msg.payload[key].timestamp) {
    const keyTimestamp = new Date(msg.payload[key].timestamp).getTime();

    if (!flow.lastJournalTimestamp || flow.lastJournalTimestamp < keyTimestamp) {
      // this entry is new - keep it. MULTIPLE events may have the
      //  same timestamp so wait with reassigning so we don't skip
      //  em or get the latest a 2nd time if nothing else changes.

      // update the next latest timestamp if this is newer
      if(!newJournalTimestamp || newJournalTimestamp < keyTimestamp) {
        newJournalTimestamp = keyTimestamp;
      }
    } else {
      // lastJournalTimestamp is newer, skip this
      msg.payload[key] = null;
    }
  }
});

// make sure this is a valid date for the next time
flow.lastJournalTimestamp = newJournalTimestamp || new Date().getTime();

// remove all nulled events from the payload
msg.payload = Object.fromEntries(
  Object.entries(msg.payload).filter(([_, p]) => p !== null)
);

msg.payload.timestamp = new Date(flow.lastJournalTimestamp);

return { payload: msg.payload };

So I do now keep track of the last read timestamp and reject every event that is older than the last read keeping the Journal dump smaller. This way I don’t have to try to keep track of the “latest” event to drag data from. Refuelling e.g. can happen from whopping 4 (or more) different events and it’s painful to compare all and check which one is the latest to keep track of the real current fuel levels for each tank.

Downside is I won’t get a full set of data for the current session any more if I have to reload my HUD app. This could be mitigated by using MQTT though where I could simply persist each event topic. That is already implemented and I can choose between SocketIO or MQTT in my app anyway.

This uses my X4-SimPit extension for X4: Foundations, that sends ship telemetry via a socket to my node-red plumbing pipeline, which in turn forwards data to Websockets, SocketIO and MQTT. Various subscriber listen on the new messages to run blinken lights and my HUD app. I’m using the well known message format also used by Elite Dangerous so it’s compatible with that game as well.

Pick your poison: https://makertube.net/w/nUoG2ZPeAW1QhT3A2BXRrM / https://www.youtube.com/watch?v=wp1PkVhH9cc

Oh yeah… and on Linux PC 🤓

Let me know what you think!

X4-SimPit code (pending changes) is here: https://github.com/bekopharm/x4-simpit
The cockpit panel has a dedicated project page here: https://simpit.dev/

So… this is news to me, because I don’t have a headset, but I can set my Pro glasses into (side by side) mode by pressing the small button longer. Some games, like , can do this as well without fiddling around with Reshade. I didn’t really expect it but it just works. This way I even get 3D on foot, which is not supported for VR in Elite Dangerous Odyssey at all! Side by side Crosseye mode (right eye left, left eye right) though? Add some head tracking to the mix, which is totally possible, and I get a very nice VR-like experience even on foot in Elite Dangerous – and on Linux PC!

This is the SBS version that does REQUIRE VR/XR glasses and mebbe something like xr-video-player: https://www.youtube.com/watch?v=KEtRijojBx8

This is the MONO version that does NOT require VR/XR glasses: https://www.youtube.com/watch?v=bYPTk1vygM4

The FOV is somewhat cramped. No idea if this can be tweaked any further but I’ll fiddle with the settings on my next test. Mebbe this can be tweaked (or I use Desktop to zoom in somewhat).

Update: I got the aspect ratio somewhat under control. It’s not perfect but much better and an odd combination of window mode and resolution and upscaling, that somehow affects the HUD only but make no sense to me at all. At this point I think it’s simply a bug of Elite. It’s like the HUD doesn’t get the memo to scale up after the intro played. I’m also not sure if this is a side effect of gamescope but I can totally live with this result (though it does start to stutter somewhat on foot but recording this at the same time somewhat overwhelms my rig anyway). These are my gamescope settings with Steam:

SDL_VIDEODRIVER=x11 obs-gamecapture gamescope -h 1080 -w 3840 -H 1080 -W 3840 --max-scale 2 -f -e -- %command%

Max-scale is probably not needed but it was started with this so I won’t omit it now. The ingame settings are 1280×960 and windowed with _NO BORDER_. Every other mode broke the aspect ratio even more! That is also true for 1920×1024, which would have made _some_ sense to me at least, but this did also NOT work FOR ME. This results in a pixelated HUD which is worked around with upscaler INTERNAL or AMD CAS cranked to x2 – AMD FSR did NOT WORK. If someone could enlighten me on this: Bring it! YMMV.

Update2: Haha it works! https://www.reddit.com/r/EliteDangerous/comments/2o5j30/using_google_cardboard_or_equivalent_kit_as_a_vr/ had a lead: It suggests to double the vertical resolution to get a proper aspect ratio with SBS and shrink the resulting window again.

That’s easy with gamescope:

> gamescope -h 2160 -w 3840 -H 1080 -W 3840 –scaler stretch

e voila, perfect aspect ratio. Wonder if my GPU manages to keep this up though. May have to throw FSR into the mix.

https://makertube.net/w/bufv9BJv2vcXDb3KUaksB7 / https://www.youtube.com/watch?v=CpP7KS1fbrY

`@ozoned` interviewed me on my home cockpit on a live stream via his instance at https://stream.ozoned.net/. This is a more condensed version of the stream that is still just 1h shy. We’re going over almost every feature of my Primary Buffer Panel and I explain how everything works. I also decided to add various photos, slideshows or video snippets during the talk only sections so things don’t get too boring. Sometimes that even complements the talks 😄

Ever wondered how to start your own DIY / on? It’s easy. Just watch this stream 🤓

Dedicated project website: https://SimPit.dev

Check out the original recording if you want to see more or the full stream with more [dirty] details: https://video.thepolarbear.co.uk/w/9zNcweVw2fxxpSrmBnaQJa

I totally missed the memo but apparently there is a Linux version of for a while now: https://support.gameglass.gg/en/articles/9351904-installing-gameglass-hub-on-linux

* Ubuntu 22.04+
* Linux Mint 21.2+
* Fedora 39+

Not a fan of GameGlass (I prefer my switches and dials, as you may know) but it’s probably of interest for other builders.

I held an online presentation and talk for 2h about some weeks ago **in German**. The presentation itself (20m) went live today with **English subtitles** on the channel of @Sciencekeeper@troet.cafe (Stellanebula project lead). I mention as example for native games but the main focus is, due to the audience: a huge German Elite Dangerous wing, focused on (and some for good measure). I’m going to release the talk that happened after this eventually but I have to cut this first, which is _a lot_ of work, so no promises yet. Mebbe this is of interest for someone else too: https://www.youtube.com/watch?v=wmaj-MyRkPs.

This presentation was made for absolute beginners as intro into the topic .

CC-SA versions on https://www.youtube.com/watch?v=o7Qj5NvrbWQ / https://tube.tchncs.de/w/tuQs2dBSDSTdUv5DYcA6Mv

Another night in the verse 🚀

Made some progress on the HUD (I think I need a name for that). It does provide me with some additional informations depending on what I’m doing. The Route Plan e.g. disappears automatically when the destination is reached (yeah yeah the Jump count is off, will fix that eventually).

Same for scan targets – that also reveal bounties (with rewards in Cr so I know if it’s worth the hassle :D).

Really like where this is going.