I have awesome news and lowsy news.
First the awesome news ...
I solved the no-sound problem!! It just occurred to me when I was re-reading this thread, and I got to the recent posts about that SoundManager exception. It hit me that a similar "thread issue" like the one that was causing that exception could be causing this no-sound problem -- if init(), like paint(), were called from a seperate thread (doesn't seem logical to me that this would be the case, but you never know). I tried moving all the sound stuff out of the init() method, and sticking it all right before the main game loop. And it worked! On all three test machines.
Now for the lowsy news. I assume everyone creating an applet using jPCT is creating a number of their Object3Ds in the init() method (makes sense, right?). That would also be the obvious place to instantiate the SoundManager and bind sound sources to the objects. Problem is, creating a new SoundManager object initializes the sound system ... which can't be initialized in the init() method. (chicken .. egg .. no, chicken ...)
So that leaves me with two options:
FIRST OPTIONAdd a new method in SoundManager called something like "initOpenAL()" which the user must call from somewhere outside the init() method of their applet. The requirement to call this method would carry over to applications as well. This would make the SoundManager slightly more difficult to use, and users would have to ensure that they called that method before trying to play any sounds. This option would also require a somewhat significant change to the SoundManager class, since I would want to be able to bind sources to objects before those sources have necessarily been created (some type of queueing would accomplish this).
SECOND OPTIONMake a clear note that SoundManager MUST NOT be instantiated in the init() method, or sound will not work on some computers. Then let the user figure out how to change their applet to follow that rule.
So which of these options would you prefer, or can you think of another alternative?For now, I guess the simplest work-around (using option #2) would be to create a new method like "init2()", and move everything from "init()" over to it, then call init2() before starting the main game loop. Just seems kind of hackish to me.
Hey, maybe you should try distributing your game with JavaWeb start instead of an applet? That way maybe more people could help you out over at the lwjgl forums.
That would be the obvious solution, but I kind of have my heart set on the game being an applet. My idea for the game is to have it inset into a webpage, with things happening outside of the game applet itself (like private chat, trading, etc). Besides, I want the SoundManager to work well for both applets and applications.