| 86 | | fire_bolt_or_beam(beam - 10, GF_MISSILE, dir, |
|---|
| 87 | | damroll(3 + ((plev - 1) / 5), 4)); |
|---|
| 88 | | else if (die < 41) confuse_monster(dir, plev); |
|---|
| 89 | | else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3); |
|---|
| 90 | | else if (die < 51) lite_line(dir); |
|---|
| | 93 | visible = fire_bolt_or_beam(beam - 10, GF_MISSILE, dir, |
|---|
| | 94 | damroll(3 + ((plev - 1) / 5), 4)); |
|---|
| | 95 | else if (die < 41) visible = confuse_monster(dir, plev); |
|---|
| | 96 | else if (die < 46) visible = fire_ball(GF_POIS, dir, 20 + (plev / 2), 3); |
|---|
| | 97 | else if (die < 51) visible = lite_line(dir); |
|---|
| 100 | | fire_bolt_or_beam(beam, GF_FIRE, dir, |
|---|
| 101 | | damroll(8+((plev-5)/4), 8)); |
|---|
| 102 | | else if (die < 76) drain_life(dir, 75); |
|---|
| 103 | | else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2); |
|---|
| 104 | | else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2); |
|---|
| 105 | | else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3); |
|---|
| 106 | | else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3); |
|---|
| | 107 | visible = fire_bolt_or_beam(beam, GF_FIRE, dir, |
|---|
| | 108 | damroll(8+((plev-5)/4), 8)); |
|---|
| | 109 | else if (die < 76) visible = drain_life(dir, 75); |
|---|
| | 110 | else if (die < 81) visible = fire_ball(GF_ELEC, dir, 30 + plev / 2, 2); |
|---|
| | 111 | else if (die < 86) visible = fire_ball(GF_ACID, dir, 40 + plev, 2); |
|---|
| | 112 | else if (die < 91) visible = fire_ball(GF_ICE, dir, 70 + plev, 3); |
|---|
| | 113 | else if (die < 96) visible = fire_ball(GF_FIRE, dir, 80 + plev, 3); |
|---|
| | 114 | /* above 100 'visible' is already true */ |
|---|
| 1373 | | /* pick a random ball effect... */ |
|---|
| 1374 | | switch (randint(5)) |
|---|
| 1375 | | { |
|---|
| 1376 | | case 1: |
|---|
| 1377 | | { |
|---|
| 1378 | | fire_ball(GF_ACID, dir, 200, 3); |
|---|
| 1379 | | break; |
|---|
| 1380 | | } |
|---|
| 1381 | | |
|---|
| 1382 | | case 2: |
|---|
| 1383 | | { |
|---|
| 1384 | | fire_ball(GF_ELEC, dir, 160, 3); |
|---|
| 1385 | | break; |
|---|
| 1386 | | } |
|---|
| 1387 | | |
|---|
| 1388 | | case 3: |
|---|
| 1389 | | { |
|---|
| 1390 | | fire_ball(GF_FIRE, dir, 200, 3); |
|---|
| 1391 | | break; |
|---|
| 1392 | | } |
|---|
| 1393 | | |
|---|
| 1394 | | case 4: |
|---|
| 1395 | | { |
|---|
| 1396 | | fire_ball(GF_COLD, dir, 160, 3); |
|---|
| 1397 | | break; |
|---|
| 1398 | | } |
|---|
| 1399 | | |
|---|
| 1400 | | default: |
|---|
| 1401 | | { |
|---|
| 1402 | | fire_ball(GF_POIS, dir, 120, 3); |
|---|
| 1403 | | } |
|---|
| 1404 | | } |
|---|
| 1405 | | |
|---|
| 1406 | | /* ...and ID the item */ |
|---|
| 1407 | | *ident = TRUE; |
|---|
| | 1383 | /* table of random ball effects and their damages */ |
|---|
| | 1384 | const int breath_types[] = { |
|---|
| | 1385 | GF_ACID, 200, |
|---|
| | 1386 | GF_ELEC, 160, |
|---|
| | 1387 | GF_FIRE, 200, |
|---|
| | 1388 | GF_COLD, 160, |
|---|
| | 1389 | GF_POIS, 120 |
|---|
| | 1390 | }; |
|---|
| | 1391 | /* pick a random (type, damage) tuple in the table */ |
|---|
| | 1392 | int which = 2 * rand_int(sizeof(breath_types) / (2 * sizeof(int))); |
|---|
| | 1393 | if (fire_ball(breath_types[which], dir, breath_types[which + 1], 3)) |
|---|
| | 1394 | *ident = TRUE; |
|---|