Izalys World (Java 2D run and jump game)

Hi dear Java developpers :slight_smile:

I finished Izalys World, the 2D run and jump game I started in 2011. I made the code, graphics and musics. For graphics I used some dry pastels and a Wacom Tablet. Musics are recorded with a synth and an electric guitar using Cubase.

I hope you’ll enjoy it. Every feedback (good and bad) is welcome :slight_smile:

Features :
-HD graphics
-OpenGL support
-gamepad support
-game configuration and score per level stored in the user directory
-easy installer for Windows
-6 levels, 1 boss

For more information and downloads you can check http://izalysworld.olympe.in and the Facebook page if you like it : https://www.facebook.com/izalysworld .

http://izalysworld.olympe.in/wp-content/uploads/2015/05/screenshot11-1024x533.jpg

http://izalysworld.olympe.in/wp-content/uploads/2015/05/screenshot3-1024x533.jpg

biUYBZ45Urk

Looks nice! You spent 4 years on a single game, that’s amazing, I usually get bored within 3 - 4 months…

Really nice artwork!
However, I cannot get past the screen where you select a level you want to play.
Once I select (any) level, all I get is a black screen. :frowning:
I have Windows 7 and jdk1.8.0 Update 45 and an OpenGL 4.5 card.

I’m having the same problem as Kai. If I run it in fullscreen, I can’t even get to the fullscreen, and in windowed mode, it crashes with an exception after I select the level.


D:\Izalys World>java -jar izalysWorld.exe
Jun 13, 2015 8:06:44 PM net.java.games.input.DefaultControllerEnvironment getControllers
WARNING: Found unknown Windows version: Windows 8.1
Jun 13, 2015 8:06:44 PM net.java.games.input.DefaultControllerEnvironment getControllers
INFO: Attempting to use default windows plug-in.
Jun 13, 2015 8:06:44 PM net.java.games.input.DefaultControllerEnvironment getControllers
INFO: Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
java.io.IOException: mark/reset not supported
        at java.util.zip.InflaterInputStream.reset(Unknown Source)
        at java.io.FilterInputStream.reset(Unknown Source)
        at com.sun.media.codec.audio.mp3.JS_MP3FileReader.getAudioFileFormat(JS_MP3FileReader.java:226)
        at com.sun.media.codec.audio.mp3.JS_MP3FileReader.getAudioInputStream(JS_MP3FileReader.java:131)
        at com.sun.media.codec.audio.mp3.JS_MP3FileReader.getAudioInputStream(JS_MP3FileReader.java:93)
        at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
        at game.system.media.MultiMediaObject.createClipFromWav(MultiMediaObject.java:52)
        at game.system.menu.AbstractMenu.<init>(AbstractMenu.java:35)
        at game.system.menu.mainmenu.MainMenu.<init>(MainMenu.java:38)
        at game.system.menu.mainmenu.MainMenuScreen.<init>(MainMenuScreen.java:19)
        at game.system.engine.GameEngine.processNextFrame(GameEngine.java:238)
        at game.system.engine.GameEngine.display(GameEngine.java:644)
        at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:691)
        at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:673)
        at com.jogamp.opengl.awt.GLCanvas$11.run(GLCanvas.java:1421)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1131)
        at com.jogamp.opengl.awt.GLCanvas$12.run(GLCanvas.java:1435)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
java.lang.NullPointerException
        at game.system.media.MultiMediaObject.playClip(MultiMediaObject.java:76)
        at game.system.menu.AbstractMenu.manageKeys(AbstractMenu.java:101)
        at game.system.engine.GameEngine.processNextFrame(GameEngine.java:246)
        at game.system.engine.GameEngine.display(GameEngine.java:644)
        at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:691)
        at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:673)
        at com.jogamp.opengl.awt.GLCanvas$11.run(GLCanvas.java:1421)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1131)
        at com.jogamp.opengl.awt.GLCanvas$12.run(GLCanvas.java:1435)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
java.lang.NullPointerException
        at game.system.media.MultiMediaObject.playClip(MultiMediaObject.java:76)
        at game.system.menu.AbstractMenu.manageKeys(AbstractMenu.java:101)
        at game.system.engine.GameEngine.processNextFrame(GameEngine.java:246)
        at game.system.engine.GameEngine.display(GameEngine.java:644)
        at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:691)
        at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:673)
        at com.jogamp.opengl.awt.GLCanvas$11.run(GLCanvas.java:1421)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1131)
        at com.jogamp.opengl.awt.GLCanvas$12.run(GLCanvas.java:1435)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
java.io.IOException: mark/reset not supported
        at java.util.zip.InflaterInputStream.reset(Unknown Source)
        at java.io.FilterInputStream.reset(Unknown Source)
        at com.sun.media.codec.audio.mp3.JS_MP3FileReader.getAudioFileFormat(JS_MP3FileReader.java:226)
        at com.sun.media.codec.audio.mp3.JS_MP3FileReader.getAudioInputStream(JS_MP3FileReader.java:131)
        at com.sun.media.codec.audio.mp3.JS_MP3FileReader.getAudioInputStream(JS_MP3FileReader.java:93)
        at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
        at game.system.media.MultiMediaObject.createClipFromWav(MultiMediaObject.java:52)
        at game.things.player.Player.initSounds(Player.java:226)
        at game.things.common.Thing.<init>(Thing.java:170)
        at game.things.player.Player.<init>(Player.java:120)
        at game.system.worldloader.WorldLoader.addNewThingToArray(WorldLoader.java:202)
        at game.system.worldloader.WorldLoader.getThingArrays(WorldLoader.java:402)
        at game.world.World.loadObjects(World.java:152)
        at game.world.World.loadMap(World.java:120)
        at game.world.World.initWorld(World.java:86)
        at game.world.World.<init>(World.java:77)
        at game.system.engine.GameEngine.loadNextWorld(GameEngine.java:450)
        at game.system.engine.GameEngine.loadWorld(GameEngine.java:363)
        at game.system.engine.GameEngine.processNextFrame(GameEngine.java:257)
        at game.system.engine.GameEngine.display(GameEngine.java:644)
        at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:691)
        at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:673)
        at com.jogamp.opengl.awt.GLCanvas$11.run(GLCanvas.java:1421)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1131)
        at com.jogamp.opengl.awt.GLCanvas$12.run(GLCanvas.java:1435)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$500(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Hope this information helps. Really nice artwork by the way.

Love the art style :point:

Wow, definitely looks like a reaaaally polished game!
I’m just pointing out a small flaw I found: in the “how to play” menu, you wrote “hearth” instead of “heart”, that would be a shame leaving a typo here :-X
Moreover, you might want to set your frames non-resizable :persecutioncomplex:
As for the game itself, it won’t get past the level selection screen, and the “next” button in the “how to play” menu seems to lead to another bug.
I’d be glad to be able to play this game, hope you update us! :wink:

-J0

It also was happening to me, so I downloaded the version with java and worked… maybe it’s because the game was made with an outdated java (?), I don’t know :wink:

Nice game… It reminds me Rayman =D

Thank you very much for your feedback ! I upload a new version of the game and update this post as soon as I fix thoses bugs.

I really like the art and overall look of the game. Whenever I download the linux version i get a file-not-found.txt that says “File not found or deleted from server”

Yes, I’m trying to upload a fixed version but it seems uploads won’t work today…

Great game!

The game is running properly for me. The last stage is really good, remember Donkey Kong for SNES.

Tried running the with-java version, turns out to be very laggy… When the… pea? Is that a pea? Walks all is fine, but each time I try collecting a coin, jumping, taking damages, running, pausing, the games seems to sleep for a few seconds (maybe a second and a half, if that helps). I don’t feel like a 2D-game like this should ask too many performances, what do you guys think? Is my 4-hearts laptop overrated?
That’s a shame because I would enjoy running your game as it recalls me of games I used to play as a kid.

Aah, Rayman… Memories… :smiley:

Thank you for taking my post into account :wink:

-J0

I fixed those issues :

  • Black screen. I forgot to add the parameter when I wrapped the jar in an exe… (shame on me !). It’s necessary not to have a black screen with an openGl fullscreen window.
  • The menu bug.
  • The “hearth” mispelling :wink:

I’m working on the “java.io.IOException: mark/reset not supported”. I don’t have it on my computer, but many people have this issue. The fix seems to use a BufferedInputStream (which supports pause, reset…), but then calling AudioSystem.getAudioInputStream(inputStream) makes the game freeze as J0 described. Strangely, it only happens when the game is run in a jar on a Windows Os. Not in my Eclipse workspace nor in a jar with Linux.

Works for me now! And I even have music and FX now. :slight_smile:
Two things though:

  • whenever I collect a coin (or anything collectable) the game stutters/hangs for about 1/10th of a second. It becomes then barely playable/controllable when collecting many coins in a row (I am suspecting this has to do with the loading/playing of the sounds)
  • I cannot abort and return to menu while I am playing a level (neither with ESC nor any other key), except when I issue Windows to close the app using Alt+F4
    Besides from that: I’m loving it for the artwork!

I finally switched from JavaSound to JOAL. It is much much better : no lag on Windows anymore, sound effects can be played multiple times on Linux. It just took 2 hours with the (excellent) DevMasters tutorial, so it was really worth it.

If I should give one piece of advice from my experience : stay away from JavaSound,it is not as cross platform as it should be. JOAL is not really harder to use and seems more reliable to me (even without using 3d sound of pitch effects).

On last thing : I added the escape key support to display the pause menu (in addition to the start/pause key configured in the startup screen). you’ll have to erase the config.properties file in IzalysWorld directory (home folder) to make it work if you already played the game (sorry !).

You should definitely prevent the frames from being resized.
Apart from that, tried the game, 10/10 love it! :point:
About Rayman, I even tried once making the helicopter thing in your game ;D
Thank you for such a wonderful job :wink:

J0

EDIT: I’d love to know how you made the music if you made it yourself! :o

Thank you very much J0. Yes I absolutely loved the first Rayman. The Sonic games on Genesis and Game Gear, and Rayman on PSX are my top favorites platformers :).

About the music, I first write synth and drums parts with a score editor and export them to a midi file. Then I import this midi file in Cubase (a multi track sound editor) and play those midi parts with some Native Instruments plugins to have some realistic instrument sounds. I finally record guitar tracks (i plug the guitar directly into the sound card, and use the Native Instrument Guitar Rig amp simulator) and export everything to an MP3 file.