Tower

i’m not finished yet, but the game i’ve been working on, tower, is fairly playable now. screenshots and webstart are at http://excelsi.org/tower/.



tower is a roguelike game, similar to nethack or moria. if you’ve played those before you’ll feel pretty much at home. if not, it can take some getting used to!



and yes, i fully realize that this is somewhat unhinged  :smiley:

i have to admit the screenshots look very interesting. :slight_smile:



edit: problems here. can't run it :frowning:


23.01.2007 01:42:18 com.jme.app.FixedFramerateGame setFrameRate
INFO: Attempting to run at 60 fps.
java.lang.Error: java.lang.ClassNotFoundException: [Lorg.excelsi.aether.Slot;
   at org.excelsi.aether.DefaultNHBot.deepCopy(DefaultNHBot.java:114)
   at org.excelsi.aether.DefaultNHBot.copy(DefaultNHBot.java:99)
   at org.excelsi.aether.Universe.createBot(Universe.java:235)
   at org.excelsi.aether.Universe.getPlayable(Universe.java:185)
   at org.excelsi.tower.Tower.createInitial(Tower.java:143)
   at org.excelsi.tower.Tower.createLevel(Tower.java:84)
   at org.excelsi.aether.Game.init(Game.java:31)
   at org.excelsi.aether.ui.NH.initGame(NH.java:99)
   at com.jme.app.FixedFramerateGame.start(Unknown Source)
   at org.excelsi.aether.ui.NH.main(NH.java:253)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at com.sun.javaws.Launcher.executeApplication(Unknown Source)
   at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
   at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
   at com.sun.javaws.Launcher.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: [Lorg.excelsi.aether.Slot;
   at java.net.URLClassLoader$1.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(Unknown Source)
   at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at org.excelsi.aether.ThreadContextObjectInputStream.resolveClass(ThreadContextObjectInputStream.java:14)
   at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
   at java.io.ObjectInputStream.readClassDesc(Unknown Source)
   at java.io.ObjectInputStream.readArray(Unknown Source)
   at java.io.ObjectInputStream.readObject0(Unknown Source)
   at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
   at java.io.ObjectInputStream.readSerialData(Unknown Source)
   at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
   at java.io.ObjectInputStream.readObject0(Unknown Source)
   at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
   at java.io.ObjectInputStream.readSerialData(Unknown Source)
   at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
   at java.io.ObjectInputStream.readObject0(Unknown Source)
   at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
   at java.io.ObjectInputStream.readSerialData(Unknown Source)
   at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
   at java.io.ObjectInputStream.readObject0(Unknown Source)
   at java.io.ObjectInputStream.readObject(Unknown Source)
   at org.excelsi.aether.DefaultNHBot.deepCopy(DefaultNHBot.java:109)
   ... 18 more

sfera, what kind of machine are you using / java version? thanks.

dude, java.lang.ClassNotFoundException is pretty straight forward. :slight_smile:



but if you really want to know:

java 1.6-b105

athlon xp 1700

geforce 4200 ti

not so easy when those CNFs are from a classloader in a jnlp sandbox :slight_smile:



i suspect it's something to do with jdk 1.6; i've only tested with 1.5…







update: tried with 1.6 and i see your error. sigh.







further update: i uploaded a fixed jar that works with 1.5 and 1.6. it looks like there is a subtle difference in threadlocal classloader class resolution in ObjectInputStream in 1.6.

now it runs (had to uninstall the old version).

there still is an exception:


INFO: Attempting to run at 60 fps.
java.lang.IllegalStateException: can't complete floor
   at org.excelsi.tower.Tower.createInitial(Tower.java:295)
   at org.excelsi.tower.Tower.createLevel(Tower.java:84)
   at org.excelsi.aether.Game.init(Game.java:31)
   at org.excelsi.aether.ui.NH.initGame(NH.java:99)
   at com.jme.app.FixedFramerateGame.start(Unknown Source)
   at org.excelsi.aether.ui.NH.main(NH.java:253)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at com.sun.javaws.Launcher.executeApplication(Unknown Source)
   at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
   at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
   at com.sun.javaws.Launcher.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)



it says i should press '?' for some commands: doesn't work (german kb layout here - ? = shift + another key). instead it zooms out

That's great! I wanted to do exactly that since long ago, but never found the time to. Feels very smooth, and must be fun to play once i figure out what the controls actually are (displays "press ? for a list of commands", german keyboard here as well, and i am not at all familiar with the usual rogue-like controls).

My approach would have been to use NetHack as the base, but i didn't find a clean java version, or even a version with a convenient api to begin with…

Looks great. Movement is soft, gfx (chars) are nicely chosen and coloured.



I've only played it for 10 minutes. It seems very playable to me, though I'm not big fan of rogue-like games.



The map is easy to see. Enemies behaviour and movement is more than correct. I miss icons for the player stats, and sometimes if the game is expecting an inventory item you can't simply press ENTER to return to movement mode (you have to press ESC).



I've also noticed that some messages appear only the first time you step on a cell. I've missed one of them and couldn't find how to see it again.



I got stuck in the first level around a '<' sign, after killing a kitty.



Nice execution of a classic genre. I'm sure that you can get what you want from it. Congratulations.


Very nice.  I've always held a spot in my heart for nethack/rogue games.  You might consider submitting a screenshot or two for inclusion on the jme gallery.

Awesome. Great job. It has a lot of atmosphere.



Since it doesn't actually use the mouse, don't bind the mouse (i.e. steal mouse focus), makes it a bit of a pain to keep up and do other things. :slight_smile:

thank you everyone for the replies.



i believe i've fixed the keyboard incompatibility problems, amongst other issues. tower is now at http://tower.sf.net/.