SpecialItem getSpecialItem() {  
        SpecialItem si;

        int i = rnd.nextInt(5);
        int value;

        switch (i) {
        case 0:
            if (rnd.nextFloat() > 0.9f)
                value = -1 * rnd.nextInt(10);
            else
                value = rnd.nextInt(20);
            
            si = new SpecialItemHealth(value);
            break;

        case 1:
            if (rnd.nextFloat() > 0.9f)
                value = -1 * rnd.nextInt(20);
            else
                value = rnd.nextInt(20);

            si = new SpecialItemDefense(value);
            break;

        case 2:
            if (rnd.nextFloat() > 0.9f)
                value = -1 * rnd.nextInt(25);
            else
                value = rnd.nextInt(20);

            si = new SpecialItemSpeed(value);
            break;

        case 3:
            if (rnd.nextFloat() > 0.9f)
                value = -1 * rnd.nextInt(5);
            else
                value = rnd.nextInt(5);

            si = new SpecialItemRange(value);
            break;

        default:
            if (rnd.nextFloat() > 0.9f)
                value = -1 * rnd.nextInt(20);
            else
                value = rnd.nextInt(20);

            si = new SpecialItemAttack(value);
        }

        return si;
    }