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