def missileattack(world, ssize): while True: tx = randint(9 - ssize, 9 + ssize) ty = randint(9 - ssize, 9 + ssize) if world.is_clear(tx, ty): m = FX.Missile(tx * 32, -48 - (19 - ty) * 32, ty * 32) world.fx.append(m) world.fx.append(FX.MissileTarget(tx * 32, ty * 32, m)) missile.play() break
def renderType(val, type, args, edit=False): val = FX.renderType(val, type, args, edit=edit, fct=replaceValue) from wallaby.qt_combat import QtCore if isinstance(val, QtCore.QPyNullVariant): val = "-" return val
def update(self, ev): for e in ev: if e.type == pygame.KEYDOWN: if e.key in [ pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT ]: if e.key in [p.akey for p in self.ps]: self.akey = e.key if self.level[0] in [2, 6] and not randint(0, 3): self.fx.append(FX.Snow(randint(0, 628), -12)) for e in self.e[:]: if e.moving: e.mupdate(self) if e.invtime: e.invtime -= 1 e.update(self, ev) for e in self.e: e.rerect() dangers = [d.rect for d in self.e if d.denemy] for e in [ e for e in self.e if not e.denemy and e.enemy and not e.invtime ]: if e.rect.collidelist(dangers) != -1: if e.hp: e.hp -= 1 e.invtime = e.invoverride else: self.e.remove(e) e.hp -= 1 for p in self.ps: if p.rect.collidelist([e.rect for e in self.e if e.enemy]) != -1: self.playerdead = True for row in self.o: for o in row: if o: o.update(self) for fx in self.fx[:]: fx.update(self) if fx.dead: self.fx.remove(fx) for fx in self.bfx[:]: fx.update(self) if fx.dead: self.bfx.remove(fx) for x, r in enumerate(self.t): for y, t in enumerate(r): if t: Tiles.tiles[t - 1].update(self, x, y) if self.rtime > 0: self.rtime -= 1 if self.rtime == 0 and self.rumbling > 0: self.rumbling -= 1 if self.rumbling > 0: self.rtime = 10 if self.boss and self.boss.hp < 0 and not self.done: self.done = 60
def replaceValue(dct, val): val = FX.replaceValue(dct, val) from qt_combat import QtGui, QtCore if len(val) > 0 and val[0] == ':': val = val.lower() val = QtGui.QPixmap(val) return val
def _onLoadFX(self, callback, resourceRef): if self.fx != None: self.fx.detach() self.fx = None if self.loaded: self.fx = FX.Persistent(self.fxName, resourceRef) self.fx.attach(None) self.fx.go() if callback: callback()
def destroyFireball(owner, fireball, fx, explosionFXName, targetHitCallback, prereqs): m = Matrix(fireball.motors[0].target) fx.detach() owner.delModel(fireball) explosion = BigWorld.Model('') owner.addModel(explosion) explosion.position = m.applyToOrigin() fireballfx = FX.bufferedOneShotEffect(explosionFXName, explosion, explosion, lambda : owner.delModel(explosion), 10.0, prereqs) if targetHitCallback != None: targetHitCallback(owner, m) return
def _onLoadFX(self, callback, resourceRef): if self.fx != None: self.fx.detach() self.fx = None if self.loaded: self.fx = FX.Persistent(self.fxName, resourceRef) if BigWorld.component == 'editor': self.fx.attach(None) else: self.fx.attach(BigWorld.player()) self.fx.go() if callback: callback() return
def update(self, world, events): if self.initing: self.initing = False world.e.append(Multi(self.x + 1, self.y, self)) world.e.append(Multi(self.x + 1, self.y + 1, self)) world.e.append(Multi(self.x, self.y + 1, self)) if self.anitick < 31: self.anitick += 1 else: self.anitick = 0 if self.invtime == 19: world.fx.append(FX.TPFX(world.ps[0].x * 32, world.ps[0].y * 32)) world.ps[0].place(*self.tplocs[2 - self.hp]) tp.play()
def createFireball(projectileFXName, explosionFXName, source, target, srcOffset=None, targetHitCallback=None, prereqs=None): global projectileSpeed fireball = BigWorld.Model('') fx = FX.Persistent(projectileFXName, prereqs) fx.attach(fireball) callback = partial(destroyFireball, source, fireball, fx, explosionFXName, targetHitCallback, prereqs) tripTime = shootProjectile(source, target, fireball, None, callback, srcOffset) if tripTime == 0: projectileSpeed = projectileSpeed * 2.0 tripTime = shootProjectile(source, target, fireball, None, callback, srcOffset) if tripTime == 0: projectileSpeed = projectileSpeed * 2.0 tripTime = shootProjectile(source, target, fireball, None, callback, srcOffset) if tripTime == 0: projectileSpeed = projectileSpeed * 2.0 tripTime = shootProjectile(source, target, fireball, None, callback, srcOffset) if tripTime == 0: projectileSpeed = projectileSpeed * 2.0 tripTime = shootProjectile(source, target, fireball, None, callback, srcOffset) if tripTime == 0: fx.detach(fireball) print 'No speed solution for fireball' projectileSpeed = 12.0 return tripTime
def _loadFX(self, callback = None): if self.fxName != '': BigWorld.loadResourceListBG(FX.prerequisites(self.fxName), partial(self._onLoadFX, callback)) elif callback: callback()
def __init__(self, edit, level=None): self.edit = edit self.playerdead = False self.done = False self.level = level self.exitcode = "NORMAL" if edit: self.t = [] self.o = [] for _ in range(20): self.t.append([0] * 20) self.o.append([0] * 20) self.e = [] else: self.e = [] self.ps = [] if level == "sav": savfile = open(Img.np("lvls//save.sav"), "r") elif len(level) == 2: savfile = open(Img.np("lvls//%s-%s.sav" % tuple(level)), "r") else: savfile = open(Img.np("lvls//%s-%s-%s.sav" % tuple(level)), "r") self.t = [] self.o = [] self.fx = [] self.bfx = [] if level[0] == 3 and level[1] != 8: for _ in range(randint(50, 60)): self.bfx.append(FX.Star(randint(0, 638), randint(0, 638))) savr = savfile.readlines() self.fltext = savr[0][:-1] del savr[0] for row in savr[:20]: self.t.append([int(s) for s in row.split()]) for x, row in enumerate(savr[20:]): self.o.append([None] * 20) crow = [int(s) for s in row.split()] for y, n in enumerate(crow): if n: eo = self.eoconvert(n) if eo[1] == "obj": self.o[x][y] = eo[0](x, y) elif eo[1] == "ent": self.e.append(eo[0](x, y)) elif eo[1] == "spawn": self.ps.append(eo[0](x, y)) self.e.append(self.ps[-1]) self.akey = self.ps[-1].akey elif eo[1] == "gravblock": self.e.append(Entities.SokoBlokGrav(x, y, eo[0])) if level[1] == 8: try: self.boss = Bosses.bosses[level[0] - 1](9, 9) if level[0] == 6: self.o[9][9] = self.boss else: self.e.append(self.boss) except IndexError: pass savfile.close()