protected void showPlayers() {
        int playerCount = 0;
        int numberOfPages = 1;
        String displayOption = "";
        String buffer = "";

        clearScannerChecker(TrekHud.SCANNER_ROSTER);

        for (int x = 0; x < TrekServer.players.size(); x++) {
            TrekPlayer thisPlayer = (TrekPlayer) TrekServer.players.elementAt(x);

            if (thisPlayer == null)
                continue;

            if (thisPlayer.state != TrekPlayer.WAIT_PLAYING)
                continue;

            if (thisPlayer.ship.scanLetter == null)
                continue;

            char shipsScanLetter = thisPlayer.ship.scanLetter.charAt(0);

            if (shipsScanLetter >= 97 && shipsScanLetter <= 109 && numberOfPages < 1)
                numberOfPages = 1;

            if (shipsScanLetter >= 110 && shipsScanLetter <= 122 && numberOfPages < 2)
                numberOfPages = 2;

            if (shipsScanLetter >= 65 && shipsScanLetter <= 77 && numberOfPages < 3)
                numberOfPages = 3;

            if (shipsScanLetter >= 78 && shipsScanLetter <= 90 && numberOfPages < 4)
                numberOfPages = 4;

            if (shipsScanLetter >= 48 && shipsScanLetter <= 57 && numberOfPages < 5)
                numberOfPages = 5;

            playerCount++;
        }

        // Clear the scanner if we reach the last page of players.
        if (showPlayerPage > numberOfPages) {
            //TrekLog.logMessage("Clearing scanner.  showPlayerPage > numberOfPages");
            // reset player page
            showPlayerPage = 1;
            //return;
        }

        char[] lettersToShow;

        switch (showPlayerPage) {
            case 1:
                lettersToShow = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'};
                break;
            case 2:
                lettersToShow = new char[]{'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
                break;
            case 3:
                lettersToShow = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'};
                break;
            case 4:
                lettersToShow = new char[]{'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
                break;
            case 5:
                lettersToShow = new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '\0', '\0', '\0'};
                break;
            default:
                TrekLog.logError("Show Players: Page is greater than the number of pages we can show.");
                return;
        }

        this.drawScannerLine(3, format(new Integer(playerCount).toString() + " Active Ships:", (showPlayerPage + "of" + numberOfPages), 20));

        for (int x = 0; x < lettersToShow.length; x++) {
            if (lettersToShow[x] != '\0') {
                TrekShip thisShip = TrekServer.getPlayerShipByScanLetter(new Character(lettersToShow[x]).toString());

                if (thisShip == null || lettersToShow[x] == '\0') {
                    buffer = format("", "", 20);
                } else if (thisShip.isPlaying()) {
                    switch (player.playerOptions.getOption(TrekPlayerOptions.OPTION_ROSTER)) {
                        case 0:
                            if (thisShip.gold >= 1000) {
                                if (thisShip.gold > 99999) {
                                    displayOption = "*";
                                } else {
                                    displayOption = new Integer(thisShip.gold / 1000).toString();
                                }
                            } else {
                                displayOption = "";
                            }
                            break;
                        case 1:
                            displayOption = thisShip.classLetter;
                            break;
                        case 2:
                            if (thisShip.currentQuadrant.name.equals("Alpha Quadrant")) {
                                displayOption = "A";
                            } else if (thisShip.currentQuadrant.name.equals("Beta Quadrant")) {
                                displayOption = "B";
                            } else if (thisShip.currentQuadrant.name.equals("Gamma Quadrant")) {
                                displayOption = "G";
                            } else if (thisShip.currentQuadrant.name.equals("Omega Quadrant")) {
                                displayOption = "O";
                            } else if (thisShip.currentQuadrant.name.equals("Nu Quadrant")) {
                                displayOption = "N";
                            } else if (thisShip.currentQuadrant.name.equals("Delta Quadrant")) {
                                displayOption = "D";
                            }

                            break;
                        default:
                            if (thisShip.gold >= 1000) {
                                if (thisShip.gold > 99999) {
                                    displayOption = "*";
                                } else {
                                    displayOption = new Integer(thisShip.gold / 1000).toString();
                                }
                            } else {
                                displayOption = "";
                            }
                            break;
                    }

                    // Draw a special character for the Q.
                    String qShip = (thisShip instanceof ShipQ) ? "*" : " ";
                    buffer = format(lettersToShow[x] + qShip + thisShip.parent.shipName, displayOption, 20);

                    // Display team # preceding ship name
                    if (TrekServer.isTeamPlayEnabled()) {
                        if (thisShip instanceof ShipQ || thisShip.parent.teamNumber == 0) { // skip admin ships or ships w/ no team
                        } else {
                            buffer = format(lettersToShow[x] + new Integer(thisShip.parent.teamNumber).toString() + thisShip.parent.shipName, displayOption, 20);
                        }
                    }
                }
            } else {
                buffer = format("", "", 20);
            }

            drawScannerLine(x + 4, buffer);
        }
    }