public final void gameOver () {
        // XXX hmm. we should check out these conditions
        if (inGameState("GameOver")
            || (!inGameState("InGame") && !inGameState("LifeLost"))) return;
        // System.err.println( "Warning: gameOver() called from other state"
        // +" than InGame or LifeLost." );
        // }
        gamewon=false;
        clearKey(key_continuegame);
        setFrameRate(30,2);
        removeGameState("StartLevel");
        removeGameState("StartGame");
        removeGameState("LifeLost");
        seqtimer = 0;
        CreateEffect.Words(pfWidth()/2, pfHeight()/2, "GAME OVER");
        if (gameover_ticks > 0) {
            if (gameover_ingame)
                addGameState("GameOver");
            else setGameState("GameOver");
            new JGTimer(gameover_ticks, true, "GameOver") {
                public void alarm () {
                    gotoTitle();
                }
            };
        }
        else {
            gotoTitle();
        }
    }