Esempio n. 1
0
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
Esempio n. 3
0
 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
Esempio n. 5
0
 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()
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 9
0
 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()
Esempio n. 10
0
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
Esempio n. 11
0
 def _loadFX(self, callback = None):
     if self.fxName != '':
         BigWorld.loadResourceListBG(FX.prerequisites(self.fxName), partial(self._onLoadFX, callback))
     elif callback:
         callback()
Esempio n. 12
0
 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()