Exemple #1
0
      def __init__(self, *args):
          Drawable.__init__(self, *args)

          # field references for convenience
          self.TimeField = self.world.get_field(fields.TimeField)
          self.WindField = self.world.get_field(fields.WindField)
          self.LifeField = self.world.get_field(fields.LifeField)

          # actor clock, used to calibrate movement/damage/etc during update
          self.last_update  = self.world.get_time()
          self.last_control = self.world.get_time()
          self.timediff     = 0.0

          # used to throttle movement sound effects
          self.next_sound = 0.0

          # character params
          self.hp           = self.initial_hp
          self.magic_energy = self.initial_energy
          # manages the magic particles and energy budget
          self.magic        = MagicCaster(self)
          # not yet...
          self.dead         = False

          # instantiate the controller class, if any
          if self.control:
            self.controller = self.control(self)
            debug.dbg("Controlled by: %s" % (self.controller))
          else:
            self.controller = None
Exemple #2
0
 def __init__(self, *args, **kwargs):
     provider.__init__(self, *args, **kwargs)
     dbg("Using pygame (SDL)")
     flags = (settings.fullscreen and FULLSCREEN or 0) | HWSURFACE | DOUBLEBUF
     dbg("Available modes: %s" % (pygame.display.list_modes(0, flags)))
     self.screen = pygame.display.set_mode((settings.screen_width, settings.screen_height), flags)
     self.screen.fill((0, 0, 0, 255))
      def __init__(self, graphics = None):
          # first invocation should pass in graphics provider
          if graphics is not None and self.graphics is None:
            self.__class__.graphics = graphics
          else:
            return

          if self.graphics is None:
            raise Exception()

          dbg("Loading resources")
          # load fonts
          self.font("biggoth", "Deutsch.ttf", 104)
          self.font("smallgoth", "Deutsch.ttf", 56)
          self.font("textfont", "angltrr.ttf", 20)
          self.font("debugfont", "Anonymous Pro.ttf", 12)

          # scaling function
          if hasattr(pygame.transform, "smoothscale"):
            self.scale = pygame.transform.smoothscale
          else:
            self.scale = pygame.transform.scale

          # load sprites
          self.sprite("dude_svg", "dude-right", 100, resize = (50, 200))
          self.sprite("dude_svg", "dude-left", 100, flip = True, resize = (50, 200))
          self.sprite("villager", "villager-right", 100, resize = (50, 200))
          self.sprite("villager", "villager-left", 100, flip = True, resize = (50, 200))
          self.sprite("rabbit_svg", "rabbit-right", 100, resize = (50, 50))
          self.sprite("rabbit_svg", "rabbit-left", 100, flip = True, resize = (50, 50))
          self.sprite("dragon_svg", "dragon-right", 100, resize = (50, 100))
          self.sprite("dragon_svg", "dragon-left", 100, flip = True, resize = (50, 100))
          self.sprite("guardian_svg", "guardian-right", 100, resize = (50, 200))
          self.sprite("guardian_svg", "guardian-left", 100, flip = True, resize = (50, 200))

          self.sprite("smallbird", "smallbird-left", 50, resize = (12, 6))
          self.sprite("smallbird", "smallbird-right", 50, flip = True, resize = (12, 6))
          self.sprite("bigbird", "bigbird-left", 100, resize = (25, 12))
          self.sprite("bigbird", "bigbird-right", 100, flip = True, resize = (25, 12))

          self.sprite("tree_svg", "tree", resize = (400, 400))
          self.sprite("sun", "sun", resize = (400, 400))
          self.sprite("cloud", "cloud")
          self.sprite("post", "post", 25)
          self.sprite("hut", "hut")

          self.sprite("hills", "hills")
          self.sprite("grass", "grass")
          self.sprite("oldbiggrass", "oldbiggrass")

          self.sprite("title-bg", "title-bg", resize = (self.graphics.screen_width, self.graphics.screen_height))

          # load sounds
          self.sound("cry", "cape1", "cape2", "step")
          self.sound("beep1", "beep2", "jump")
          self.sound("moan1", "moan2", "crackle1", "crackle2")
          self.sound("wind1", "wind2", "wind3", volume = 0.01)
Exemple #4
0
def default_provider():
    requested = settings.graphics_provider
    if requested == "opengl":
      if opengl_available:
        return opengl_provider()
      else:
        dbg("OpenGL not available, falling back to pygame")
        return pygame_provider()
    elif requested == "none":
      return nographics_provider()
    else:
      return pygame_provider()
Exemple #5
0
def run_tests(testspec, iterations):
    if testspec is None:
      # run all
      tests = storybook.get_set("tests")
    else:
      # run listed tests
      tests = []
      for test in testspec.split(","):
        tests.append(storybook.get(test))
    for Story in tests:
      for i in xrange(iterations):
        debug.dbg("Running %u/%u iterations of %s" % (i + 1, iterations, Story.__name__))
        w = World(Story)
        debug.dbg("Finished: %s" % (w.story.debug_info()))
Exemple #6
0
 def __init__(self, world):
     self.world = world
     self.rsc   = Resources()
     # story state
     self.game_over   = False
     self.game_result = None
     self.exit_now    = False
     self.set_state("begin")
     self.story_time  = self.world.get_time()
     self.last_narrative = 0
     # stories need narrations
     self.narrations  = []
     self.queue       = []
     dbg("Starting a story: %s" % (self))
Exemple #7
0
 def __init__(self, *args, **kwargs):
     provider.__init__(self, *args, **kwargs)
     dbg("Using OpenGL")
     flags = (settings.fullscreen and FULLSCREEN or 0) | HWSURFACE | DOUBLEBUF | OPENGL
     dbg("Available modes: %s" % (pygame.display.list_modes(0, flags)))
     self.screen = pygame.display.set_mode((settings.screen_width, settings.screen_height), flags)
           
     glClearColor(0.0, 0.0, 0.0, 1.0)
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
 
     glMatrixMode(GL_PROJECTION)
     glLoadIdentity();
     gluOrtho2D(0, settings.screen_width, settings.screen_height, 0)
     glMatrixMode(GL_MODELVIEW)
 
     glEnable(GL_TEXTURE_2D)
     glEnable(GL_BLEND)
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Exemple #8
0
      def __init__(self, world, pos):
          self.world = world
          self.id    = self.__class__.seq
          self.__class__.seq += 1
          self.rsc   = Resources() 
          # movement params
          self.pos    = pos
          self.speed  = 0.0
          self.accel  = 0.0
          # only used for the background birds ATM
          self.ypos   = 0.0
          self.yspeed = 0.0
          self.yaccel = 0.0

          # animation params
          self.start_time = time.time()
          self.rnd_time_offset = random() * 25.0
          self.direction  = -1
          self.animate    = self.animate_stop

          self.debug_me = self.in_dev_mode

          # load images
          if len(self.sprite_names):
            if self.directed:
              self.img_left  = self.rsc.sprites[self.sprite_names[0]]
              self.img_right = self.rsc.sprites[self.sprite_names[1]]
              self.img_count = len(self.img_left)
              self.img_w     = self.img_left[0].get_width()
              self.img_h     = self.img_left[0].get_height()
            else:
              self.img_list  = self.rsc.sprites[self.sprite_names[0]]
              self.img_count = len(self.img_list)
              self.img_w     = self.img_list[0].get_width()
              self.img_h     = self.img_list[0].get_height()
            self.cur_img_idx = 0
          else:
            # no image, use dummy values
            # TODO: should do something more intelligent for particle effects - they may be wider
            self.img_w = 50
            self.img_h = 100
          debug.dbg("Created %s" % (self))
Exemple #9
0
 def sleep_until(self, wakeup_time):
     """
     Sleep until specified time, updating game and real time as needed
     """
     real_time_step = game_time_step = wakeup_time - self.last_real_time
     sleep_time = wakeup_time - time.time()
     if sleep_time > 0:
       time.sleep(sleep_time)
     elif sleep_time < -self.max_lag:
       # lagging too much, step faster
       if not self.stay_real_time:
         if self.lag_rl.check():
           debug.dbg("Event processing lagging %.1fs, lowering real time frequencies" % (-sleep_time))
         real_time_step *= (-sleep_time / self.max_lag) ** 2
     else:
       # accept some lag
       pass
     # update time
     self.last_real_time += real_time_step
     self.game_time += game_time_step * self.game_time_speed
Exemple #10
0
 def dbg(self, msg):
     """ write debug messages if debug_me is on """
     if self.debug_me:
       debug.dbg("%s: %s" % (self, msg), depth = 2)
Exemple #11
0
 def destroy(self):
     # no more updates or drawing
     self.world.del_actor(self)
     debug.dbg("Destoroyed %s" % (self))
Exemple #12
0
 def __init__(self, *args, **kwargs):
     provider.__init__(self, *args, **kwargs)
     dbg("Using no graphics")
     self.screen = None
Exemple #13
0
 def __init__(self):
     pygame.display.set_caption(settings.game_name)
     dbg("Initializing graphics %ux%u fullscreen=%s" % \
         (settings.screen_width, settings.screen_height, settings.fullscreen))