evelynsubarrow / stormrunner Goto Github PK
View Code? Open in Web Editor NEWA set of modifications to run Lego Mindstorms' Stormrunner as a standalone application
A set of modifications to run Lego Mindstorms' Stormrunner as a standalone application
Resizing is done with every single resize event the componentadapter gets, this causes resizes to stack up and various glitches
I don't know how to fix this issue on building graddle.
Build file '\Stormrunner-master\build.gradle' line: 2
A problem occurred evaluating root project 'Stormrunner-master'.
com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: org/gradle/api/internal/java/JavaLibrary
It should be possible to stop datalogs when they're playing in game. Subtitles would also be nice to have.
no modifications
gradle 4.1
Stormrunner-master\build.gradle' line: 42
* What went wrong:
A problem occurred evaluating root project 'Stormrunner-master'.
> repository not found
I also had issue #10 once with gradle 7.2 but with updated dependencies it gives same "line 42 repository not found"-failure.
build.gradle
I can't get it fixed.
I haven't tried running it yet.
I had made my own patches some years ago to get around some rendering bugs and a hang IIRC, but I have no idea where those files are or if I still have them at all. :(
(Honestly I'm baffled that I was able to figure out how to fix graphical glitches or the hang at the time. I don't remember having any sort of reproducible setup.)
Have you been able to gather the missing html and other media files from anywhere or just the jars?
Edit: I see there is a zip file linked; does this contain everything?
I wonder where the archivers managed to get it from.
Will shortly be forcing the audio device to null when sun audio is absent, but sun audio is absent on JREs above 9 I believe. There's a javax API which seems similar enough in capability that it might be possible to convert to that instead. It's been largely present since Java 1.3, so compatibility shouldn't be a worry.
There's also been some breaking changes to AWT. It's not clear how far reaching that is, it may be possible to adapt and make it compatible.
Exception in thread "main" java.lang.NoClassDefFoundError: sun/audio/AudioDataStream
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at com.templar.games.stormrunner.templarutil.audio.SunAudioDevice.getSound(SunAudioDevice.java:91)
at com.templar.games.stormrunner.templarutil.audio.AudioManager.getSound(AudioManager.java:52)
at com.templar.games.stormrunner.templarutil.audio.AudioManager.<init>(AudioManager.java:36)
at com.templar.games.stormrunner.GameApplet.init(GameApplet.java:207)
at moe.evelyn.games.stormrunner.Main.main(Main.java:47)
Caused by: java.lang.ClassNotFoundException: sun.audio.AudioDataStream
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
AWT:
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: 'java.awt.peer.ComponentPeer java.awt.Component.getPeer()'
at com.templar.games.stormrunner.templarutil.gui.SimpleContainer.paint(SimpleContainer.java:190)
at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at java.desktop/sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.desktop/java.awt.Container.paint(Unknown Source)
at com.templar.games.stormrunner.GameApplet.paint(GameApplet.java:682)
at java.desktop/sun.awt.RepaintArea.paintComponent(Unknown Source)
at java.desktop/sun.awt.X11.XRepaintArea.paintComponent(Unknown Source)
at java.desktop/sun.awt.RepaintArea.paint(Unknown Source)
at java.desktop/sun.awt.X11.XComponentPeer.handleEvent(Unknown Source)
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Not sure exactly what form this should take but there's a few things where it'd be helpful to offer the user some feedback at least on loading, letting them know e.g. if they have broken sound or what's been done for the flash player etc
stormrunner-1.3.1-all.jar
"START NEW GAME" hangs at 94% on Windows 10 if window is moved. It works perfectly if window is in original start position.
Java 1.8.0_301 installed
Reported by David, and successfully replicated with OpenJDK JRE (ver 1.8.0_282-8u282-b08-0ubuntu1~20.04-b08 not that it probably matters).
When starting a new game, in the RCX bay, when generating a new RCX, the arm from below unlocks, sinks down one step, then freezes in place. The sound for it sinking never plays. The UI appears responsive, and the game will be rerendered if the window is minimised, but attempting to click on anything in the UI will kill the rendering.
This is one of the earlier examples of looped audio in Stormrunner, and sound is an obviously potentially flaky area of difference between Open and Oracle JREs. A debugger may shed some light.
From openjre
"AWT-EventQueue-1" #14 prio=6 os_prio=0 tid=0x00007f92d045b000 nid=0x1b22e9 waiting for monitor entry [0x00007f929d8b6000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.templar.games.stormrunner.GameApplet.paint(GameApplet.java:664)
- waiting to lock <0x0000000706fc01b0> (a java.lang.Object)
at com.templar.games.stormrunner.GameApplet.update(GameApplet.java:659)
at sun.awt.RepaintArea.updateComponent(RepaintArea.java:255)
at sun.awt.X11.XRepaintArea.updateComponent(XRepaintArea.java:51)
at sun.awt.RepaintArea.paint(RepaintArea.java:232)
at sun.awt.X11.XComponentPeer.handleEvent(XComponentPeer.java:584)
at java.awt.Component.dispatchEventImpl(Component.java:4965)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Same place it halts in Oracle, likely this is caused by something in state:
"StateThread" #29 prio=6 os_prio=0 tid=0x00007ff170539800 nid=0x1b26ff in Object.wait() [0x00007ff1c442d000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1343)
- locked <0x0000000708b31018> (a java.awt.EventQueue$1AWTInvocationLock)
at java.awt.Window.doDispose(Window.java:1210)
at java.awt.Window.dispose(Window.java:1147)
at com.templar.games.stormrunner.GameState.stop(GameState.java:343)
at com.templar.games.stormrunner.GameApplet.toggleScreen(GameApplet.java:395)
at com.templar.games.stormrunner.GameApplet.internalSetState(GameApplet.java:361)
at com.templar.games.stormrunner.OpsPanel.setState(OpsPanel.java:96)
at com.templar.games.stormrunner.GameApplet.setState(GameApplet.java:352)
at com.templar.games.stormrunner.GameState.deactivateRobot(GameState.java:638)
at com.templar.games.stormrunner.GameState.tick(GameState.java:321)
- locked <0x0000000706ba6b18> (a java.lang.Object)
at com.templar.games.stormrunner.GameState.run(GameState.java:287)
at java.lang.Thread.run(Thread.java:748)
Losing (and presumably winning) the game causes a whitescreen. Initial hunch is that this is just caused by the game trying to pass focus back to a full screen flash animation, which wouldn't be picked up as if it were a datalog because it's done in the main frame.
Ideally the game should return to the main menu. You already know if you won (launched successfully) or lost (RCX flatlined and can't put any others out) so not much point in trying to do some fancy UI thing (yet)
There's no viable Flash players usable from within Java, but the quality and number of standalone players is increasing, and there's no reason these programs couldn't be invoked when Stormrunner requests SWF files to be played.
Hey, after years of trying to get this to run, I finally figured out the correct order of steps to make it work.
Only to discover that the RCX control panel is too low to access, and thus all my efforts were for nothing.
Is there a way to resize the game screen in the Java Runtime Environment 8 window by even the slightest bit so that I can play?
This is what I get for testing mostly on Linux. On Windows, at least under openjdk, there's some issues where resizing the window. The contents aren't redrawn as they would be on Linux, although if the window isn't resized, it mostly works. Unfortunately, the status panel sits very slightly too low, so it's not actually possible to play the game even if the game isn't resized.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.