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
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)
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()
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()))
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))
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)
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))
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
def dbg(self, msg): """ write debug messages if debug_me is on """ if self.debug_me: debug.dbg("%s: %s" % (self, msg), depth = 2)
def destroy(self): # no more updates or drawing self.world.del_actor(self) debug.dbg("Destoroyed %s" % (self))
def __init__(self, *args, **kwargs): provider.__init__(self, *args, **kwargs) dbg("Using no graphics") self.screen = None
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))