import actions
import datetime
import frusengladje
import props
import random
import stories
import songs
class SleepNoMoreCharacter:
def __init__(self, cast):
self.cast = cast
def perform(self):
raise NotPayingYouForNothingException("Cmon guys! Let's go freak out some SNM noob!")
def make_out(self, other_character):
raise NotHotEnoughException("Something hot needs to happen when this character makes out with %s" % other_character)
def one_on_one(self, audience_member):
raise NotScaryEnoughException("What do you think this is, the Second Mrs. De Winter's one-on-one?!")
class Hecate(SleepNoMoreCharacter):
def perform(self):
next_carton = frusengladje.open_carton()
next_carton.eat(self)
def make_out(self, other_character):
raise StuckInTheBasementException("God it smells musty down here ...")
def one_on_one(self, audience_member):
audience_member.tell_story(stories.WELL_STORY)
audience_member.find_ring(datetime.now)
class BaldWitch(SleepNoMoreCharacter):
def perform(self):
actions.deliver_prophecy(self.cast.Macbeth)
def make_out(self, other_character):
actions.kisses.chaste_kiss(other_character)
def one_on_one(self, audience_member):
actions.wash_up(self)
class MaleWitch(SleepNoMoreCharacter):
def perform(self):
actions.get_naked(self)
actions.deliver_prophecy(self.cast.Macbeth)
def make_out(self, other_character):
actions.kisses.best_kiss(other_character)
def one_on_one(self, audience_member):
actions.blind_with_flashlight(audience_member)
audience_member.scare_with(props.dead_bambi)
class LongHairedWitch(SleepNoMoreCharacter):
def perform(self):
actions.deliver_prophecy(self.cast.Macbeth)
def make_out(self, other_character):
actions.kisses.with_tongue(other_character)
def one_on_one(self, audience_member):
actions.sing(self.cast.MaleWitch, songs.MOONLIGHT_BECOMES_YOU)
actions.give_steamy_lapdance(audience_member)
class Macbeth(SleepNoMoreCharacter):
def perform(self):
actions.kill(self.cast.Duncan)
def make_out(self, other_character):
actions.driven_insane_by(self.cast.Banquo)
def one_on_one(self, audience_member):
actions.kill(audience_member)
class LadyMacbeth(SleepNoMoreCharacter):
def perform(self):
actions.driven_insane_by(self)
def make_out(self, other_character):
for cast_member in self.cast:
actions.shoo_from_table(cast_member)
def one_on_one(self, audience_member):
actions.foxy_boxing(audience_member)
class Macduff(SleepNoMoreCharacter):
def perform(self):
if self.cast.LongHairedWitch.is_nearby():
actions.sexy_dance_with(self.cast.LongHairedWitch)
else:
actions.avenge(self.cast.Duncan)
def make_out(self, other_character):
actions.kisses.angry_kiss(other_character)
def one_on_one(self, audience_member):
raise TooEnragedForOneOnOnesException("NOOOOO!!!!! DUUUUNNNCCCCAAAAANNNNN!!!!")
class LadyMacduff(SleepNoMoreCharacter):
def perform(self):
if self.cast.Duncan.is_dead():
actions.murdered_by(self.cast.Macbeth)
else:
actions.bookcase_dance(self.cast.Macduff)
def make_out(self, other_character):
actions.kisses.random_kiss(other_character)
def one_on_one(self, audience_member):
pass
class Malcolm(SleepNoMoreCharacter):
def perform(self):
actions.discover_body(self.cast.Duncan)
actions.ring_the_alarum_bell()
def make_out(self, other_character):
actions.kisses.cajun_style(other_character)
def one_on_one(self, audience_member):
props.room_lights.turn_off()
audience_member.scare_with(props.eggs)
audience_member.scare_with(props.magnifying_glass)
audience_member.scare_with(actions.shouting)
audience_member.scare_with(self)
audience_member.scare_with(random.choice(props.everything_in_the_room))
class Banquo(SleepNoMoreCharacter):
def perform(self):
if self.cast.Macduff.is_nearby():
actions.breakdance_fight(self.cast.Macduff)
else:
actions.murdered_by(self.cast.Macbeth)
def make_out(self, other_character):
actions.drive_insane(self.cast.Macbeth)
def one_on_one(self, audience_member):
audience_member.startled_by(self.incredible_handsomeness)
class Duncan(SleepNoMoreCharacter):
def perform(self):
if self.cast.Macbeth.is_nearby():
actions.foolishly_go_to_bed_without_locking_the_doors_first()
else:
actions.do_scottish_king_stuff()
def make_out(self, other_character):
actions.kisses.like_a_virgin(other_character)
actions.hums("Touched for the very first time ...")
def one_on_one(self, audience_member):
raise TooDeadForOneOnOnesException("Meh. I'm dead. Think I'll go dance with Mrs. Danvers in the ballroom.")
class Danvers(SleepNoMoreCharacter):
def perform(self):
if self.cast.Macduff.is_nearby():
actions.door_dance(self.cast.Macduff)
elif self.cast.LadyMacbeth.is_nearby():
actions.bathtub_dance(self.cast.LadyMacbeth)
elif self.cast.LadyMacduff.is_nearby():
actions.taunt_with(props.funny_looking_water)
elif self.cast.Duncan.is_nearby() and self.cast.Duncan.is_dead():
actions.ballroom_dance(self.cast.Duncan)
else:
actions.take_five("Maybe I'll go upstairs and scribble crazy diagrams on the walls ...")
def make_out(self, other_character):
raise ThatsNotWhatRebeccaWouldHaveDoneException("I watched you make out just as I watched her a year ago. Even in the makeout scene the third time tonight you couldn't compare.")
def one_on_one(self, audience_member):
audience_member.drinks(props.funny_looking_water)
class DeWinter(SleepNoMoreCharacter):
def perform(self):
actions.stick_with_pins(props.apple) and actions.roam_with(props.valise) and actions.pine_for(self.cast.Duncan)
def make_out(self, other_character):
actions.kisses.blow_kiss_to(other_character)
def one_on_one(self, audience_member):
audience_member.tell_story(stories.LOST_BOY_STORY)
actions.cry_softly()
audience_member.offer_sympathy_to(self)
class Porter(SleepNoMoreCharacter):
def perform(self):
actions.add_to_baby_carriage(props.gift_box)
def make_out(self, other_character):
pass
def one_on_one(self, audience_member):
if random.randint(0, 1000000) == 1000000:
actions.kung_fu_battle(audience_member)
class SleepNoMoreCast()
def __init__(self):
self.members = {
"Hecate": Hecate(self),
"BaldWitch": BaldWitch(self),
"MaleWitch": MaleWitch(self),
"LongHairedWitch": LongHairedWitch(self),
"Macbeth": Macbeth(self),
"LadyMacbeth": LadyMacbeth(self),
"Macduff": Macduff(self),
"LadyMacduff": LadyMacduff(self),
"Malcolm": Malcolm(self),
"Banquo": Banquo(self),
"Duncan": Duncan(self)
"MrsDanvers": Danvers(self),
"SecondMrsDeWinter": DeWinter(self),
"Porter": Porter(self)
}
def __getattr__(self, name):
if name in self.members:
return self.members[name]
else:
raise CastMemberNotFoundException("You must be thinking of one of the other fine Punchdrunk production.")
def __iter__(self):
for cast_member in self.members.itervalues():
yield cast_member
def get_all(self):
return self.members.values()
if __name__ == "__main__":
cast = SleepNoMoreCast()
while frusengladje.exists: # Possible infinite loop
cast.Hecate.perform()
for cast_member in cast:
cast_member.perform()
for random_cast_member in random.shuffle(cast.get_all()):
other_cast_member = random.choice(cast.get_all())
random_cast_member.make_out(other_cast_member)