New Lemur, Zay-ES, SimEthereal, and SiO2 releases available

Many of these were a long time coming and it’s nice to finally get some updates out.

To those of you who have contributed patches and bug reports: thank you very much!

To those of you who submitted bugs or feature requests that I didn’t get to, I apologize. On the one hand, I got more into these releases than I thought I’d be able. On the other, I spent twice as long doing it as I’d planned.

Now for the good stuff.

Lemur version 1.11.0 is up and ready.

For those who don’t know yet, Lemur is a light-weight modular GUI library for JME. It’s built directly as JME scene graph elements and so integrates seamlessly.

This release has a bunch of bug fixes and enhancements. Highlights too numerous to mention. Click through to the release links below to see the full change log for this release.

Can be found in bintray as a maven/gradle-style dependency as well as on github:

There is a new LemurProto release to go with it (1.10.0) but it’s a minor one. You can find the links parallel to the above.

Zay-ES 1.3.0 and Zay-ES-Net 1.3.1

Zay-ES is a Java Entity Component System that integrates nicely with JME. It also has a networking extension based on JME’s SpiderMonkey networking library.

This release sees mostly bug fixes on the Zay-ES-Net side.

Can be found in bintray as a maven/gradle-style dependency as well as on github:

SimMath 1.2.0

This is a double-based Math library similar to the float-based math classes built into JME. It has a few additions over and above what JME provides (and misses a few others).

This is mostly a maintenance release that shores up the API a little making many of the methods more consistent, etc…

Can be found in bintray as a maven/gradle-style dependency as well as on github:

SimEthereal 1.3.0

A high performance object synching library for games. Based on concepts in several online articles from Valve, etc. this also enhances those ideas with delta compression to cram as much object update goodness into as small a network packet as possible.

This release is mostly a bug fix release.

Can be found in bintray as a maven/gradle-style dependency as well as on github:

SiO2 1.2.0

SiO2 (silicon dioxide) is a general gaming utility package that builds on top of Zay-ES, SimMath, Lemur, etc. to provide some nice built in features boot-strapping a game.

This release includes a few new goodies like command consoles, decay systems, camera management, etc…

Can be found in bintray as a maven/gradle-style dependency as well as on github:

So go forth and update. Let me know about any new issues that you might find.

Also, I feel compelled to leave this link here just in case anyone new wants to buy me a donut:

Edit: meant to mention, for those using SimEthereal and SiO2 together, you will need to add this snippet of code to your server setup:

 ethereal.setTimeSource(new TimeSource() {
                public long getTime() {
                    return systems.getStepTime().getUnlockedTime(System.nanoTime());

…where ‘ethereal’ is your EtherealHost setup. Without this, the simulation time and network time will be different and will now cause issues where it was silently lurking before.


Well done :slightly_smiling_face:
Thanks so much for fixing reported bugs and adding requested features and answering to our questions with patience.

Best regards

1 Like

Thanks for the kinds words. :slight_smile:

Also note: I now enter the phase of “developing my own stuff”… specifically more foundational stuff for Mythruna. Invariably this will be using Lemur, SiO2, etc…

Consequently, there is a better than average chance that I might be ready to push now minor releases on Sunday night.

Bottom line: if anyone finds bugs this week then please report them right away as they might actually make it into Sunday’s patch (if there is sufficient reason to have one).

Sunday night I will likely be depressed about having to go back to “real work” and so will be doing anything I can to drag my feet getting started catching up on what I missed while I was gone…

1 Like

Same here, thx for the effort.
I hope I will have time to check the differences before the next version will be released :slight_smile:

1 Like

A couple of questions for TimeSource. I will ask one question here since it directly applies to this thread.

How does this apply to your sim-eth-es code since it uses EtherealClient.class for the time source?

From your sim-eth-es examples code:

Both of the game server classes (for sim-eth-basic and sim-eth-es) need to be updated with the fix.

I thought I’d done it already but I guess I only fixed my space bugs game.

But for example, if someone wanted to post a patch, they could add these lines:

ethereal.setTimeSource(new TimeSource() {
                public long getTime() {
                    return systems.getStepTime().getUnlockedTime(System.nanoTime());

After this one:

…and the similar location in sim-eth-es.

Edit: I mean before line 103… hopefully that’s clear enough.

1 Like

You can see my game here:

I didn’t - but i’ll take your word for it and move it :smiley:

That fixed it.

I was stuck trying to figure out how EtherealClient could know there was a change if the change was made from GameServer like that when EtherealClient gets its TimeSource from StateReceiver.

I found that you added this in 1.2.1

•Added TimeSource.set/getOffset() to make it easier for clients to configure
how far in history they’d like time to represent. Defaults to -100 ms.

but then in 1.3.0

•Refactored the TimeSource interface to be just a time provider and added
a SynchedTimeSource interface to provide the extra drift/offset methods
that it previously had. RemoteTimeSource now implements SynchedTimeSource.

This line was broken after,

is this the proper fix?

delta = (-((SynchedTimeSource) timeState.getTimeSource()).getOffset() / 1000000) / 3;

Yes. The functionality was just moved to a different interface so that basic non-offset timesources could be created.

Sorry I didn’t update/test these apps.

I appreciate the help. Its not something that would likely show up unless someone was learning by using the examples.

If it’s any consolation, I would have hit this soon myself as I’m trying to make some changes to SimEthereal or Zay-es-net that are risky enough that I would have tested these apps again.

In the mean time, if someone wants to submit a patch then I will be happy to accept it.

I am going to go ahead and try to install firefox tomorrow. If that goes well I should be able to do it. Theres another minor change to a deprecated method I will submit also.

1 Like

Hey Paul,

I just ran into this delta issue again because I am implementing simethereal for real rather than study now and the PR was never approved.

Also fixes this,

        ethereal.setTimeSource(new TimeSource() {
            public long getTime() {
                return systems.getStepTime().getUnlockedTime(System.nanoTime());

Sorry about that. Not sure how I missed it. :blush:

You have so many killer apps it would be astounding not to miss something.

1 Like

I think in this case it’s also not something I “release”… so there isn’t the normal “check the PRs” to-do list item on the release check-list.