+// Add themed randomizer
+void
+Dispenser::launch_badguy()
+{
+ //FIXME: Does is_offscreen() work right here?
+ if (!is_offscreen()) {
+ Direction launchdir = dir;
+ if( !autotarget && start_dir == AUTO ){
+ Player* player = this->get_nearest_player();
+ if( player ){
+ launchdir = (player->get_pos().x > get_pos().x) ? RIGHT : LEFT;
+ }
+ }
+ if (badguy == "snowball")
+ Sector::current()->add_object(new SnowBall(Vector(get_pos().x, get_pos().y+32), launchdir));
+ else if (badguy == "bouncingsnowball")
+ Sector::current()->add_object(new BouncingSnowball(Vector(get_pos().x, get_pos().y+32), launchdir));
+ else if (badguy == "mrbomb")
+ Sector::current()->add_object(new MrBomb(Vector(get_pos().x, get_pos().y+32), launchdir));
+ else if (badguy == "mriceblock")
+ Sector::current()->add_object(new MrIceBlock(Vector(get_pos().x, get_pos().y+32), launchdir));
+ else if (badguy == "snail")
+ Sector::current()->add_object(new Snail(Vector(get_pos().x, get_pos().y+32), launchdir));
+ else if (badguy == "mrrocket")
+ Sector::current()->add_object(new MrRocket(Vector(get_pos().x+(launchdir == LEFT ? -32 : 32), get_pos().y), launchdir));
+ else if (badguy == "captainsnowball")
+ Sector::current()->add_object(new CaptainSnowball(Vector(get_pos().x+(launchdir == LEFT ? -32 : 32), get_pos().y), launchdir));
+ else if (badguy == "kamikazesnowball")
+ Sector::current()->add_object(new KamikazeSnowball(Vector(get_pos().x+(launchdir == LEFT ? -32 : 32), get_pos().y), launchdir));
+ else if (badguy == "poisonivy")
+ Sector::current()->add_object(new PoisonIvy(Vector(get_pos().x, get_pos().y+32), launchdir));
+ else if (badguy == "skullyhop")
+ Sector::current()->add_object(new SkullyHop(Vector(get_pos().x, get_pos().y+44), launchdir));
+ else if (badguy == "random")
+ {
+ switch (systemRandom.rand(7))
+ {
+ case 0: Sector::current()->add_object(new SnowBall(Vector(get_pos().x, get_pos().y+32), launchdir)); break;
+ case 1: Sector::current()->add_object(new BouncingSnowball(Vector(get_pos().x, get_pos().y+32), launchdir)); break;
+ case 2: Sector::current()->add_object(new MrBomb(Vector(get_pos().x, get_pos().y+32), launchdir)); break;
+ case 3: Sector::current()->add_object(new MrIceBlock(Vector(get_pos().x, get_pos().y+32), launchdir)); break;
+ case 4: Sector::current()->add_object(new PoisonIvy(Vector(get_pos().x, get_pos().y+32), launchdir)); break;
+ case 5: Sector::current()->add_object(new Snail(Vector(get_pos().x, get_pos().y+32), launchdir)); break;
+ case 6: Sector::current()->add_object(new SkullyHop(Vector(get_pos().x, get_pos().y+44), launchdir)); break;
+ }
+ }