def to_front(self): ActiveSprite.to_front(self) if self.dcap['overlayglasses']: ico = images.sprget(('glasses', self.dir)) y = self.y + self.overlayyoffset if self.overlaysprite is None or not self.overlaysprite.alive: self.overlaysprite = images.ActiveSprite(ico, self.x, y) else: self.overlaysprite.to_front() self.overlaysprite.move(self.x, y, ico) self.overlaysprite.gen = [self.overlaysprite.die([None])]
def startsnookerbubble(self, timeout, hspeed, monsterpoplist=None): self.gen.append(self.snooker_movements(dir=hspeed, timeout=timeout)) self.gen.append(self.kill_touching_monsters(monsterpoplist)) colorname = random.choice(Stars.COLORS) imglist = [('smstar', colorname, k) for k in range(2)] self.to_front() s = images.ActiveSprite(images.sprget(imglist[-1]), self.x, self.y) s.setimages(s.cyclic(imglist, speed=2)) s.gen.append(s.following(self)) def to_front(): Bubble.to_front(self) s.to_front() self.to_front = to_front
def normal_play(): from player import BubPlayer import bonuses framecounter = 0 bonus_callback = bonuses.start_normal_play() while BubPlayer.MonsterList: bonus_callback() yield normal_frame() if not BubPlayer.DragonList: continue framecounter += 1 BASE = 500 if not (framecounter % BASE): if framecounter == 4*BASE: from monsters import Monster from mnstrmap import BigImages ico = images.sprget(BigImages.hurryup[1]) s = images.ActiveSprite(ico, (bwidth-ico.w)//2, (bheight-ico.h)//2) s.setimages(s.die(BigImages.hurryup * 12, 2)) images.Snd.Hurry.play() mlist = [s for s in images.ActiveSprites if (isinstance(s, Monster) and s.regular() and not s.angry)] if mlist: s = random.choice(mlist) s.angry = [s.genangry()] s.resetimages() if framecounter >= 6*BASE: mlist = [s for s in images.ActiveSprites if isinstance(s, Monster) and s.regular() and s.angry] if mlist: images.Snd.Hell.play() gamesrv.set_musics([], []) s = random.choice(mlist) s.become_ghost() framecounter = -200 else: framecounter = 2*BASE if framecounter == 0: curboard.set_musics() replace_boardgen(last_monster_killed(), 1)
def display_hat(p, d): if p.team == -1 or getattr(d,'isdying',0) or hasattr(d,'no_hat'): return try: bottom_up = d.bottom_up() except AttributeError: bottom_up = 0 try: image = ('hat', p.team, d.dir, d.hatangle) except AttributeError: image = ('hat', p.team) if bottom_up: image = 'vflip', image y = d.y else: y = d.y - 16 ico = images.sprget(image) if (getattr(d,'hatsprite',None) is None or not d.hatsprite.alive): d.hatsprite = images.ActiveSprite(ico, d.x, y) else: d.hatsprite.to_front() d.hatsprite.move(d.x, y, ico) d.hatsprite.gen = [d.hatsprite.die([None])]
def wait_for_one_player(): from player import BubPlayer clearallsprites() nimages = None while not [p for p in BubPlayer.PlayerList if p.isplaying()]: yield 3 if not nimages: desc = getattr(gamesrv.game, 'FnDesc', '?') host, port = getattr(gamesrv.game, 'address', ('?', '?')) images.writestrlines([ "Welcome to", desc.upper(), "at %s:%s" % (host.lower(), port), None, "Click on your Favorite Color's Dragon", "Choose four keys: Right, Left, Jump, Shoot", "and Let's Go!", None, "Click again for more than one player", "on the same machine.", ]) from mnstrmap import PlayerBubbles nimages = [PlayerBubbles.bubble[0], PlayerBubbles.bubble[1], PlayerBubbles.bubble[1], PlayerBubbles.bubble[0], PlayerBubbles.bubble[2], PlayerBubbles.bubble[2]] screenwidth = bwidth + 9*CELL screenheight = bheight def welcomebubbling(self): fx = self.x dx = (random.random() - 0.5) * 1.9 for y in range(self.y-3, -self.ico.h, -3): fx += dx self.move(int(fx), y) yield None if y == self.ypop: from mnstrmap import PlayerBubbles self.setimages(None) self.gen.append(self.die(PlayerBubbles.explosion)) self.kill() yield 10 gamesrv.set_musics([], [images.music_game2], reset=0) if ((not images.ActiveSprites or random.random() < 0.05678) and gamesrv.clients): # make sure the extension's images are loaded too # NB. this is also needed for import auto-detection import ext1; import ext2; import ext3 import ext4; import ext5; import ext6 import ext7 ico = images.sprget(nimages[0]) s = images.ActiveSprite(ico, random.randrange(0, screenwidth-ico.w), screenheight) s.ypop = random.randrange(-ico.h, screenheight) s.gen = [welcomebubbling(s)] s.setimages(s.cyclic(nimages, speed=1)) if random.random() > 0.4321: try: key, (filename, (x, y, w, h)) = random.choice( images.sprmap.items()) except: w = h = 0 if w == h == 32: s2 = images.ActiveSprite(images.sprget(key), -32, 0) s2.gen = [s2.following(s, (s.ico.w-32)//2, (s.ico.h-32)//2)] s.ypop = None images.action(images.ActiveSprites[:])
def playing_monster(self): from bonuses import Bonus bubber = self.bubber vy = None imgsetter = self.imgsetter poplist = [None] while 1: dx = bubber.wannago(self.dcap) if dx and dx != self.dir: self.dir = dx self.resetimages() imgsetter = self.imgsetter if dx and vy is None: self.setimages(imgsetter) else: self.setimages(None) if vy is not None: if vy < 0: n = 1 else: n = 3 self.seticon(images.sprget(self.imgrange()[n])) if dx and not self.blocked(): self.step(self.vx * dx, 0) yield None impulse = 0.0 wannajump = bubber.key_jump if vy is not None: vy += 0.33 if vy > 12.0: vy = 12.0 yf = self.y + yfp + vy yfp = yf - int(yf) delta = int(yf) - self.y if delta > 0: by_y = {} for s in images.ActiveSprites: if isinstance(s, Bonus) and s.touchable: if abs(s.x - self.x) <= 22: by_y[s.y] = s for monster in BubPlayer.MonsterList: if abs(monster.x - self.x) <= 22: if monster.regular(): by_y[monster.y] = monster for ny in range(self.y - 1, self.y + delta + 1): self.move(self.x, ny) self.vertical_warp() if onground(self.x, self.y): poplist = [None] impulse = vy vy = None break key = self.y + 29 if key in by_y: s = by_y[key] if isinstance(s, Monster): self.play(images.Snd.Extra) s.argh(poplist) elif isinstance(s, Bonus): s.reallytouched(self) yfp = 0.0 vy = -3.3 break else: self.step(0, delta) self.vertical_warp() if vy is None: if onground(self.x, self.y): if wannajump: yfp = 0.0 vy = -max(1.0, impulse) - 2.02 impulse = 0.0 self.play(images.Snd.Jump) else: yfp = vy = 0.0 if impulse > 8.1: break self.play(images.Snd.Pop) for n in range(2): for letter in 'abcdefg': ico = images.sprget(('sheep', letter)) nx = self.x + random.randrange(-1, self.ico.w - ico.w + 2) ny = self.y + random.randrange(0, self.ico.h - ico.h + 2) dxy = [random.random() * 5.3 - 2.65, random.random() * 4 - 4.4] s = images.ActiveSprite(ico, nx, ny) s.gen.append(s.parabolic(dxy)) s.gen.append(s.die([None], random.randrange(35, 54))) self.move(-99, 0) for t in range(68): yield None self.kill()