TUER: Truly Unusual Experience of Revolution, FPS using JOGL

Hi

Which version of Mac OS X do you use? jmaasing tested under OS X 10.11 and it worked. I don’t understand why you claim that the Mac version is an outdated app whereas it’s simply an OS X application bundle. I know that OS X 10.12 hides the “Anywhere” option in Gatekeeper but you should be able to run my game anyway. As far as I know, OS X 10.12 still allows to package a software as a disk image and as an application bundle. Maybe I’m missing something obvious as I haven’t tested it under OS X 10.12, how can I help you?

P.S: This might help under Sierra (OS X 10.12):

P.S 2: This solution is less scary:

http://tuer.sourceforge.net/en/play/

Is this the wrong site? And yes, I’m running 10.12.2

The application in Apple Mac OS X section of the Current pre-beta version brings up this error

Maybe it will work if you force the 64-bit mode:

If it’s the opposite problem, open the game in 32-bit mode:

2017/06/26: I’ll probably start moving the website into my low-energy server next month.
2017/07/18: I wrote this tutorial about self-hosting.

Hi

At first, some friends of mine have some laptops under OS X but they are too much recent to allow me to reproduce the previously mentioned bug and to test the suggested workarounds. Feel free to let me know your findings.

Secondly, I haven’t started to move the whole website yet but maybe I’ll move the downloadable files as a first step.

Thirdly, we’ll have to publish a new maintenance release of JOGL to fix a major bug affecting Mesa under GNU Linux.

Fourthly, I’m a bit discouraged and frustrated when I think about supporting some other platforms. Maybe Android will remain in my todo list but other platforms won’t. WebGL is neither fast enough nor stable enough for my project (it’s barely “ok” on lots of machines and catastrophic on others) and using software rendering would require to sacrifice the quality by reducing the resolution or the complexity of the geometry to obtain a decent result. Maybe I’ll revisit the very last option with WebAssembly. Anyway, there are tons of other things to improve.

2017/11/08: I tried to install my game on a recent Mac, it claimed that it’s a program for PowerPC, I’ll replace the custom builds of OpenJDK by OpenJDK 1.8 builds provided by AdoptOpenJDK.
2017/12/13: The support of 32-bit architecture is temporarily disabled, I now use AdoptOpenJDK 1.8.
2018/03/01: I have to update the downloadable files, I’d like to use my patched version of JOGL to work around a bug affecting end users under GNU Linux with AMD GPU and a recent version of Mesa.

Hi

At first, some friends of mine have some laptops under OS X but they are too much recent to allow me to reproduce the previously mentioned bug and to test the suggested workarounds. Feel free to let me know your findings.

Secondly, I haven’t started to move the whole website yet but maybe I’ll move the downloadable files as a first step.

Thirdly, we’ll have to publish a new maintenance release of JOGL to fix a major bug affecting Mesa under GNU Linux.

Fourthly, I’m a bit discouraged and frustrated when I think about supporting some other platforms. Maybe Android will remain in my todo list but other platforms won’t. WebGL is neither fast enough nor stable enough for my project (it’s barely “ok” on lots of machines and catastrophic on others) and using software rendering would require to sacrifice the quality by reducing the resolution or the complexity of the geometry to obtain a decent result. Maybe I’ll revisit the very last option with WebAssembly. Anyway, there are tons of other things to improve.

2017/11/08: I tried to install my game on a recent Mac, it claimed that it’s a program for PowerPC, I’ll replace the custom builds of OpenJDK by OpenJDK 1.8 builds provided by AdoptOpenJDK.
2017/12/13: The support of 32-bit architecture is temporarily disabled, I now use AdoptOpenJDK 1.8.
2018/03/01: I have to update the downloadable files, I’d like to use my patched version of JOGL to work around a bug affecting end users under GNU Linux with AMD GPU and a recent version of Mesa.

Hello

I plan to update the bundles at the beginning of May, sorry for the delay, the upload is extremely slow on Sourceforge and some files are very large.

Hello

I plan to update the bundles at the beginning of May, sorry for the delay, the upload is extremely slow on Sourceforge and some files are very large.

Hello

I’ve just spent 3 hours in uploading the new bundles, you can find them here, they should fix the bug affecting Mesa under GNU Linux and the Mac OS version should work anew. I plan to adopt a Google-free diet for my projects, stay tuned :wink:

By the way, AdoptOpenJDK rocks.

2019/01/16: I’ll try to support Java 11 soon. I have less and less spare time to work on this project but I don’t want my source code to become obsolete and impossible to reuse.
2019/01/18: The game works very well with Java 11 now but JNDT requires some minor changes to support Java 11.
2019/08/12: Java >= 11 is now required to build the project but it still runs with Java 8. I still have to update JNDT.
2020/03/25: JNDT no longer converts the icon file, you’ll have to do it yourself because I don’t want to go on using a customized version of Apache Commons Imaging containing publicly unavailable changes. I’ve just updated the documentation.
2020/05/10: T.U.E.R now uses Java 14 and JNDT now requires Java 9 or higher (keeping backward compatibility with Java 8 would have been very cumbersome).

Hello

I’ve just spent 3 hours in uploading the new bundles, you can find them here, they should fix the bug affecting Mesa under GNU Linux and the Mac OS version should work anew. I plan to adopt a Google-free diet for my projects, stay tuned :wink:

By the way, AdoptOpenJDK rocks.

2019/01/16: I’ll try to support Java 11 soon. I have less and less spare time to work on this project but I don’t want my source code to become obsolete and impossible to reuse.
2019/01/18: The game works very well with Java 11 now but JNDT requires some minor changes to support Java 11.
2019/08/12: Java >= 11 is now required to build the project but it still runs with Java 8. I still have to update JNDT.
2020/03/25: JNDT no longer converts the icon file, you’ll have to do it yourself because I don’t want to go on using a customized version of Apache Commons Imaging containing publicly unavailable changes. I’ve just updated the documentation.
2020/05/10: T.U.E.R now uses Java 14 and JNDT now requires Java 9 or higher (keeping backward compatibility with Java 8 would have been very cumbersome).

Hello

I’ve just moved from Subversion to Git today (I’m still on Sourceforge), I have to update the links to my source code. Some links in this thread are probably broken but I can’t edit them :frowning:

The switch to Git allows me to drop Subclipse. Eclipse was becoming very slow on my machine, I had to reinstall it from scratch and I had to delete its metadata (.metadata in my workspace). Now, it no longer often has to update SVN cache, it’s more comfortable for me.

My mesh optimizer works. I started working in November 2012 and I rewrote it this month. Better late than never :slight_smile: It allows to merge adjacent right-angled triangles using canonical texture coordinates ([0, 0], [0, 1], [1, 0] and [1, 1]) in the same planes, it uses coordinates greater than 1 to tell OpenGL to repeat the texture. I tested it on the very first level on the mesh containing the walls (not on the floor), I looked at the result by pressing the key “T” to toggle the wireframe mode, the frame rate is a bit better but it isn’t impressive yet because most triangles are on the floor and in the ceiling. I used a lot the Java streams when rewriting this mesh optimizer, I find the final result a lot more readable and the source code is almost twice smaller than my first attempt:
https://sourceforge.net/p/tuer/git/ci/master/tree/pre_beta/src/main/java/jfpsm/CoplanarAdjacentRightTrianglesWithCanonical2DTextureCoordinatesMerger.java

I’m going to update JFPSM in order to allow to use several textures in the same texture unit with a single tile so that I’ll be able to use a different texture for the ceiling and a different texture for the floor with canonical texture coordinates which will lead my mesh optimizer to drastically reduce the number of triangles.

There seems to be something wrong with the near plane of the frustum, it’s a bit too far, some vertices seem to “appear” from the center of the screen, I’ll fix it soon.

I started creating this game about 14 years ago, I don’t give up :smiley:

4 Likes

Hello,

I want to play to T.U.E.R., but I am stuck in the “Bagnolet” level, impossible to get out of this town :frowning:

Can you give a hint in order to go on ?

1 Like

Hello

Thank you for giving it a try. There is no mean to get out Bagnolet yet, I haven’t finished working on this level, there are no enemies, it’s very boring. I’d like to improve it, it will need months of work as it’s a huge level with tons of buildings and my computer is so old that the latest version of Blender doesn’t work on it. Sorry for the frustrating “end”.

2 Likes

Hello

I’ve just uploaded a new version, it fixes the soldier’s rotation that was becoming wrong after several attempts of aiming the player.

2 Likes

Hello

I’m currently trying to switch to Gradle in order to simplify a bit the whole build process but it’s not trivial as I have heavily relied on Apache Ant for more than a decade.

I’ve just removed any dependency on Java Sound. There was no emergency but it will help to depend on fewer modules. Before this change, I was hypothetically depending on javax.sound.sampled.AudioFormat and javax.sound.sampled.AudioSystem.NOT_SPECIFIED. The drawback is the need to copy into my source code a lot of classes from JOgg, JVorbis and Paul Lamb’s Sound System but those classes are very mature, the most recently modified class was edited in April 2013 and they contained some deprecated calls before my changes.

My game now works with Java 17, I’ve just fixed an illegal native access.

As I don’t like the graphical user interface of JFPSM, I’ll remove it from the project, I’ll write a tiny command line interface in order to expose the features without GUI. As I have only a very little spare time to work on my projects, I prefer keeping only the necessary classes. Maybe a web application would make much more sense than an ugly Swing GUI. My current GUI is cumbersome, especially the rudimentary image editor, The Gimp does a far better job and I won’t reinvent the wheel.

The mouse management is still very buggy, it drives me very sad. I’d like to spend some time in improving relative mouse movement management in JOGL itself but I know that such a task would require a lot of time and I would need to modify JogAmp’s Ardor3D Continuation too.

I am curious about a couple things.

Did you consider going from Ant to Maven instead of to Gradle? Why did you choose Gradle?
(I found Gradle to be more difficult to learn, and Maven to be a much easier pickup and adequate to my tasks. But none of my projects are as large and involved as TUER.)

What is behind your goal of eliminating javax.sound.sampled? You mention having fewer modules. javax.sound.sampled is contained within the java.desktop module. Is it because you use JOGL and thus don’t require other java.desktop components from AWT or Swing? But you do mention using “an ugly Swing GUI” so it seems you are likely still using the java.desktop module.

My recollection is that Pauls audio library is based on OpenAL, not javax.sound.sampled. I once rewrote a couple classes from JOgg, JVorbis to allow compressed sound assets using the ogg format with my simpler javax.sound.sampled-based sound library (it can simulate 3D but not without a fair bit of additional code). I could see recasting some of JOgga and JVorbis to make a customized version of Pauls system. Congratulations on accomplishing that! I’m sure it was no mean feat, especially with deprecated code being rewritten.

The mouse issues sound annoying. I am wondering if you have implemented touchscreen controls, or if that just adds more headaches.

1 Like

Hello

I spent many months waiting for fixes in Maven several years ago. As far as I remember, maven-javadoc-plugin had been broken twice, I remained unable to generate the Java API documentation for a lot of time. Maven is a great tool but it’s the right tool only when you can strictly follow its conventions and it’s convenient as long as you don’t want to use libraries not coming from Maven repositories. I had to use dirtily patched (yes I edited the bytecode) versions of JOGL several times in TUER but I was forced to stick to versions of JOGL already available in Maven Central in JogAmp’s Ardor3D Continuation which means that developers using the JARs from Maven Central didn’t benefit of my fixes. To be honest, some problems could have been mitigated by publishing snapshots of JOGL into the Maven JogAmp development repository more often but unfixed bugs in Maven itself wouldn’t have magically disappeared. By the way, I consider that I have some experience with Maven, I still use it in JogAmp’s Ardor3D Continuation… for now. Actually, dropping Apache Ant completely isn’t quickly doable as JNDT is written with Ant and heavily relies on Ant Contrib, there is no equivalent of JNDT in Maven, the closest solutions based on Maven are totally unable to build native Windows installers under GNU Linux for example. You can call Maven from Ant (which is what Apache Ant does when you use fetch.xml to install optional dependencies) and you can call Ant from Maven but Gradle seems to be a better tool to play with Ant. Moreover, Ant Contrib hasn’t been updated for almost about a decade, Ant wasn’t designed to write loops, JNDT relies on an unmaintained unofficial extension of Ant which might become broken soon with changes in Java whereas the core of Gradle is designed from the very beginning to do the kind of things I do in JNDT. Using Gradle seems to be a wise choice on the long term, it supports both Ivy and Maven repositories which is a good piece of news as I’ll go on retrieving some dependencies from Maven Central. I just hope that I won’t run into too many problems as I rely more and more on “preview” or incubated APIs. There are so many things I would like to achieve but not enough time to try:

  • build an alternative to Java Chromium Embedded Framework based on Mozilla Firefox in order to embed Firefox in Java to render web UIs in JOGL (and avoid using anything coming from Google, which is what I already do by using Mobian Linux on my smartphone :slight_smile: )
  • replace GlueGen by Panama JExtract + Foreign-Memory Access API + Foreign Linker API (Martin Pernollet has already tried, promising job)
  • improve NEWT mouse management
  • support Wayland in JOGL
  • use WebGPU instead of OpenGL
  • give another chance to TUER in a web browser by automatically translating Java into Javascript and WebAssembly

TUER has used JOGL NEWT for many years, it doesn’t require AWT and Swing. I intentionally stopped using any JOGL canvas relying on AWT and Swing in JOGL but they still exist, GLCanvas and GLJPanel work. The game itself doesn’t require AWT and Swing but the editor, JFPSM, still does :frowning:

(Unchanged) Paul Lamb’s Sound System uses javax.sound for its build-in MIDI support in the class named MidiChannel, I had to remove it. It uses javax.sound.sampled.AudioFormat in some of its core classes. You can’t use it as is without Java Sound even when you don’t use its plugin for Java Sound which is my case as I use its plugin for JOAL. However, I modified my own source code a few hours ago so that it’s still possible to use a codec not based on Java Sound to reintroduce MIDI support without Java Sound. I’m not sure that I can totally remove any reference to AudioFormat without breaking completely my modified stuff. To be honest, the deprecated code was easy to edit, it took me only about ten minutes, it involved the constructors of the Integer class used in Info.java and I had to call getDeclaredConstructor().newInstance() somewhere, not that hard :slight_smile: I’ll have to look at the source code more carefully, maybe a few deprecated calls are still there. For now, it can be compiled with Java 17 and probably Java 19 too.

Touchscreen support is implemented in JOGL itself. As far as I remember, Sven took care of Android and another contributor added GNU Linux support later. However, I have done nothing particular in TUER to handle touchscreen controls, NEWT is able to tell me that a pointer event doesn’t come from a mouse but I don’t do anything special in this case. TUER isn’t designed to be pleasant to play with such controls, it would be cumbersome to play with it on a tablet, you would need a virtual keyboard to walk.

Yes the mouse issues are annoying. I know which native APIs to call but I’ll need to modify the Java and C source code of NEWT to do that. It would be easier if I could stick to my guns by using Java only. JNI isn’t famous for being pleasant to use. I’ll probably have to look at Renanse’s source code to modify the way I handle relative mouse movements in JogAmp’s Ardor3D Continuation, keeping the mouse pointer in the center of the screen because of the lack of relative mouse movement support in NEWT will no longer be necessary. I just hope that my problem really comes from that, debugging while moving the mouse to reproduce the bug is very tricky. Investing a lot of time in such big changes without being confident about the root cause(s) doesn’t reassure me.

1 Like

Hello

I started to create my own tool to convert Java into a combination of HTML5, Javascript, CSS and WebAssembly yesterday. As I didn’t want to reinvent the wheel and as I wasn’t not contaminated by the Not invented here syndrome, I spent some time during the 5 last years to evaluate many existing solutions including JSweet, GWT, J2CL, Google Closure, Bck2brwsr, Dukescript, TeaVM, etc. However, the generated source code was so ugly that I couldn’t imagine putting it into production, my biggest concern was the (ab)use of global variables, especially in solutions provided by current or former Google employees. I’ll test my tool on very simple enums as a first step. For now, it uses the standard Java APIs, the compiler API has existed since Java 1.6 released in 2006.

Feel free to have a look at my rudimentary example showing how to parse a single Java source file to print the names of the methods.

1 Like