D&D 3E/3.5 Need suggestions for speeding up grenade (splash) weapons. [3.0/3.5]

I'm planning a big combat in an upcoming game for my main campaign and I want to use grenade weapons. There will be a lot of creatures with low attack bonuses lobbing grenades at the PCs. I really don't expect very many of the attacks to hit, so I'm trying to figure out the best way to speed up the grenade mechanic.

The game is still under 3.0, but I don't mind borrowing rules from 3.5. Looking at splash weapons in 3.5, the entire system is much more streamlined (which I like). They've reduced the number of die rolls, but it would still be a lot to roll for during the actual session.

The way I see it, I have a few options but I'm looking for more suggestions:
1) Use 3.0 or 3.5 rules and pre-roll everything in some sort of nasty chart.
2) Use 3.5 rules and target intersection points. I'll be more likely to hit AC 5 and I'll have to do the misdirection roll less often.
3) Treat it as some sort of environmental hazard and simly do some low amount of auto-damage.

Out of the three, I like #3 the least because I think it makes the players feel like there's nothing they can do. #2 seems like the best option but it still might cause large amounts of die rolling.

Any suggestions?

NCSUCodeMonkey
 

log in or register to remove this ad

orbitalfreak

First Post
I think the pre-rolled chart would be pretty good. For each group of "throwers" with similar stats (really, just need to have the same Total Attack Bonus), roll up a table using a d20 and factor in their attack bonus. Have a couple of columns next to that detailing direction and distance traveled of projectiles that happen to miss.
 

Conaill

First Post
Here's what could be a nice gimmick...

Roll (or look up on a table) the initial touch attack. If the attack misses... take a piece of confetti, hold it a foot or two above where you were aiming (higher if you were throwing from farther away), and let it drop.

Easy, fun, and you get instant markers on your map. Plus if you have a large number of projectiles, you could just do away with the attack rolls altogether and drop a small handfull of confetti! If you want to give the PCs a roll to avoid damage, roll the touch attack only *after* you've determined a piece of confetti fell in their square. Assign only splash damage if the touch attack fails.
 

Jhyrryl

First Post
How many is "a lot"? :) If it's dozens, I'd break them up into groups of 5. Each group coordinates to simultaneously attack 1 PC. Assume that 4 hit the intersections around the PC, and roll for the 5th. That way splash damage is guaranteed, and you also roll enough dice to scare the PCs into hurrying with what they are doing.
 

I like gimmicks, thanks for the idea :)

As for the number of opponents, I don't have the stats for the monsters in front of me, but I think they were CR 1/3, so according to the good old Encounter Level calculator that's about 21 of the little buggers. I believe their ranged attack bonus is +1.

NCSUCodeMonkey
 

orbitalfreak

First Post
I whipped up a quick and dirty code to generate a table if you don't feel like worrying about die rolls. 'Course, since yourself a "CodeMonkey," I'm sure you could do the same ;). Either way, I was bored, so here it is...

(Long string of code follows, no other content. Readers feel free to skip if not interested)

Code:
#include <fstream.h>
#include <stdlib.h>
#include <iomanip.h>

int main()
{

int num;      // number of attackers
cout << "\nHow many attackers do you have?  ";
cin >> num;
int att;      // attack bonus
cout << "\nWhat is the attack bonus of each attacker?  ";
cin >> att;
int die;      // damage die of attack
cout << "\nEnter damage die of the attack:  1d";
cin >> die;
int rounds;   // number of rounds of combat
cout << "\nHow many rounds of combat do you want to generate?  ";
cin >> rounds;

ofstream ofile;
ofile.open("c:\\grenade.txt");

int dir;  // roll to determine direction of misfire
char dis; // distance  of misfire : Near, Middle, Far
char dev; // deviation of misfire : Left, Center, Right
int roll; // attack roll
int dam;  // damage for direct hit

for(int i=0; i<rounds; i++)
   {
   cout <<   "          |             |        |             \n"
        <<   "Monster # | Attack Roll | Damage | Direction   \n"
        <<   "          |             |        |             \n";
  ofile <<   "          |             |        |             \n"
        <<   "Monster # | Attack Roll | Damage | Direction   \n"
        <<   "          |             |        |             \n";
         // Header at top of every round
   for(int j=0; j<num; j++)
      {
      roll = (rand() % 20) + 1 + att;  // Attack roll
      dam = (rand() % die) + 1;        // Damage roll
      dir = (rand() % 8) + 1;          // Direction of Misfire

      switch(dir)
      {
      case 1:           dis = 'n';
                        dev = 'c';
                        break;

      case 2:           dis = 'n';
                        dev = 'l';
                        break;

      case 3:           dis = 'm';
                        dev = 'l';
                        break;

      case 4:           dis = 'f';
                        dev = 'l';
                        break;

      case 5:           dis = 'f';
                        dev = 'c';
                        break;

      case 6:           dis = 'f';
                        dev = 'r';
                        break;

      case 7:           dis = 'm';
                        dev = 'r';
                        break;

      case 8:           dis = 'n';
                        dev = 'r';
                        break;
      }

      //Prints to screen

      cout << setw(9)  << j + 1 << " | ";

      if(roll == 20+att)
      {
      cout << setw(9) << "crit " << roll  << " | "
           << setw(6)  << dam + (rand() % die + 1)   << " | ";
      } // end if(), for confirm crit
      else
      {
      cout << setw(11) << roll  << " | "
           << setw(6)  << dam   << " | ";

      } // end else(), for no-crits
      cout << "  " << dis << "   " << dev << endl;

     // Prints to file

    ofile << setw(9)  << j + 1 << " | ";

      if(roll == 20+att)
      {
     ofile << setw(9) << "crit " << roll  << " | "
           << setw(6)  << dam + (rand() % die + 1)   << " | ";
      } // end if(), for confirm crit
      else
      {
     ofile << setw(11) << roll  << " | "
           << setw(6)  << dam   << " | ";
      } // end else(), for no-crits

      ofile << "  " << dis << "   " << dev << endl;

      } // end for
   } // end for


ofile.close();
system("PAUSE");
return 0;
} // end main
// end program
 

Conaill

First Post
Do you have any updates for us, NCSUCodeMonkey? I'd love to know how things worked out (assuming you already had your session, of course...)
 

Thanks for the code snippet, i might just use it. Yeah, I'm an old "C-Dog," I generally do use a few utilities to track things so it wouldn't be much of a problem for me to use this.

I will let everyone know how the combat goes in a few weeks after we've had our first session of the new school year. Right now I'm pretty sure that I'm going to use a mixture of all the suggestions posted so far. I'm probably going to group the attackers, target grid intersection points, and use a chart to reduce the time delay down to almost nothing. I want this to be an epic encounter and not a long, boring scence of dice clattering :)

Thanks again for the help, and if anyone has any more ideas, feel free to post!

NCSUCodeMonkey
 

Remove ads

Top