fso-scripts/SpeedrunTimer/data/tables/speedrun-timer-sct.tbm at master · FSO-Scripters/fso-scripts by FSO-Scripters (GitHub)
The primary collection of Lua scripts, custom SEXPs, and custom AI for FSO - FSO-Scripters/fso-scripts

🔖 https://github.com/FSO-Scripters/fso-scripts/blob/master/SpeedrunTimer/data/tables/speedrun-timer-sct.tbm

Going to investigate – apparently FSO can use fifo pipes too and this example may help me get ship telemetry going for my .

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.

Gna gna. Found out why my Ace Combat started to crash. The culprit is dwmapi.dll, which is needed for the UE4SS mod (Cheat Engine), so I can adjust the FOV – because the devs kinda “forgot” to add a gorram FOV slider to the game that I NEED and absolutely REQUIRE.

Turns out something in there results in an Access Violation on Start with Proton Experimental (and 9). It works fine with Proton 8. I do not remember switching that but that was the solution in the end 😩

This is after I carefully tried lots of stuff like resetting savegame, disable and remove other mods, fiddle with ini files, read miles of debug logs and whatnot.

Remember my proof concept to read IMU data of my glasses to ?

hodasemi wrote a connector based on the idea that works without : https://github.com/hodasemi/xr_to_opentrack_rs – comes with a systemd service file so it can run in the background.

Once installed the only step left to do is fire up OpenTrack 🤘😄🤘

My got an awesome upgrade today. It’s a pressure activated heating mat for the seat usually used in cars (12V are 12V 🤷). For the record: I have to heat full power to get my cave to 18C during the wintertime wasting a lot of energy. This doesn’t make much sense so I’m really happy with my solution that I also have in use for my office chair for years now 👌

Steam Deck with various controllers

Today we player all together on the 50″ TV in the living room from the [Linux powered] Steam Deck. We used the Viture USB-C adapter, so the Steam Deck didn’t discharge, attached an OTG cable and an ancient USB hub so we could connect our zoo of accumulated controllers. This way we could all play together the Windows game GoGo Town in early access 😁

Whole family playing together over one Steam Deck
Whole family playing together over one Steam Deck

What a time to be alive.

🔥 Hell Yes! added UDP support for native under and I can finally talk about it 🤓 Yes! Yes! 🚀

🎥 I was to happy about it that I even did a recording while I had a bad cold and was hoarse just to show it off: https://makertube.net/w/wo4zAJiTFLeg8t2o93MLpL or https://www.youtube.com/watch?v=rgOkGwMShT0

✍ Took a while but it’s now in the open beta for 7.50 https://steamcommunity.com/games/392160/announcements/detail/4485117301459255318

It’s great to see another company embracing open standards and care for their niche gamers too ❤️