This is correct. I went ahead and dug up the copy of the source I have on this computer (which is 3.5.0) and found effect_wonder():
This is definitely changed from what I remember; the die roll is passed in from outside, and I don't remember the character level modifier (which is provided external to this function; casting the spell and using a wand have the same character-level-based modifier, no evidence of device skill modifiers anywhere).
But yeah, to get the "RARE" effect (150 damage to all monsters in LOS + slow all monsters + sleep all monsters + 300HP heal), you need to be level 50 and then pass a 1%-odds check. You only stop being able to get the "clone monster" effect at level 40 and you're always at risk of getting haste/heal/polymorph monster effects.
Getting Earthquake as a level-9 warrior should be impossible, though, so maybe I'm missing something? It shouldn't be possible until you're at least level 20, and even at level 50 you only have 2% odds of triggering it on each use.
Code:
bool effect_wonder(int dir, int die, int beam)
{
/* This spell should become more useful (more
controlled) as the player gains experience levels.
Thus, add 1/5 of the player's level to the die roll.
This eliminates the worst effects later on, while
keeping the results quite random. It also allows
some potent effects only at high level. */
bool visible = FALSE;
int py = p_ptr->py;
int px = p_ptr->px;
int plev = p_ptr->lev;
if (die > 100)
{
/* above 100 the effect is always visible */
msg("You feel a surge of power!");
visible = TRUE;
}
if (die < 8) visible = clone_monster(dir);
else if (die < 14) visible = speed_monster(dir);
else if (die < 26) visible = heal_monster(dir);
else if (die < 31) visible = poly_monster(dir);
else if (die < 36)
visible = fire_bolt_or_beam(beam - 10, GF_MISSILE, dir,
damroll(3 + ((plev - 1) / 5), 4));
else if (die < 41) visible = confuse_monster(dir, plev, FALSE);
else if (die < 46) visible = fire_ball(GF_POIS, dir, 20 + (plev / 2), 3);
else if (die < 51) visible = light_line(dir);
else if (die < 56)
visible = fire_beam(GF_ELEC, dir, damroll(3+((plev-5)/6), 6));
else if (die < 61)
visible = fire_bolt_or_beam(beam-10, GF_COLD, dir,
damroll(5+((plev-5)/4), 8));
else if (die < 66)
visible = fire_bolt_or_beam(beam, GF_ACID, dir,
damroll(6+((plev-5)/4), 8));
else if (die < 71)
visible = fire_bolt_or_beam(beam, GF_FIRE, dir,
damroll(8+((plev-5)/4), 8));
else if (die < 76) visible = drain_life(dir, 75);
else if (die < 81) visible = fire_ball(GF_ELEC, dir, 30 + plev / 2, 2);
else if (die < 86) visible = fire_ball(GF_ACID, dir, 40 + plev, 2);
else if (die < 91) visible = fire_ball(GF_ICE, dir, 70 + plev, 3);
else if (die < 96) visible = fire_ball(GF_FIRE, dir, 80 + plev, 3);
/* above 100 'visible' is already true */
else if (die < 101) drain_life(dir, 100 + plev);
else if (die < 104) earthquake(py, px, 12);
else if (die < 106) destroy_area(py, px, 15, TRUE);
else if (die < 108) banishment();
else if (die < 110) dispel_monsters(120);
else /* RARE */
{
dispel_monsters(150);
slow_monsters();
sleep_monsters(TRUE);
hp_player(300);
}
return visible;
}
But yeah, to get the "RARE" effect (150 damage to all monsters in LOS + slow all monsters + sleep all monsters + 300HP heal), you need to be level 50 and then pass a 1%-odds check. You only stop being able to get the "clone monster" effect at level 40 and you're always at risk of getting haste/heal/polymorph monster effects.
Getting Earthquake as a level-9 warrior should be impossible, though, so maybe I'm missing something? It shouldn't be possible until you're at least level 20, and even at level 50 you only have 2% odds of triggering it on each use.
Comment