def __getSuitTrack(sound, lastSoundThatHit, delay, hitCount, targets, totalDamage, hpbonus, toon, npcs): tracks = Parallel() attacks = 0 uberDelay = 0.0 isUber = 0 if sound['level'] >= ToontownBattleGlobals.UBER_GAG_LEVEL_INDEX: uberDelay = 3.0 isUber = 1 for target in targets: suit = target['suit'] if totalDamage > 0 and sound == lastSoundThatHit: hp = target['hp'] died = target['died'] battle = sound['battle'] kbbonus = target['kbbonus'] suitTrack = Sequence() showDamage = Func(suit.showHpText, -totalDamage, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, totalDamage) if isUber: breakEffect = BattleParticles.createParticleEffect(file='soundBreak') breakEffect.setDepthWrite(0) breakEffect.setDepthTest(0) breakEffect.setTwoSided(1) soundEffect = globalBattleSoundCache.getSound(hitSoundFiles[0]) suitTrack.append(Wait(delay + tSuitReact)) if isUber: delayTime = random.random() suitTrack.append(Wait(delayTime + 2.0)) suitTrack.append(Func(setPosFromOther, breakEffect, suit, Point3(0, 0.0, suit.getHeight() - 1.0))) #suitTrack.append(Parallel(showDamage, updateHealthBar, SoundInterval(soundEffect, node=suit), __getPartTrack(breakEffect, 0.0, 1.0, [breakEffect, suit, 0], softStop=-0.5))) THIS CRASHES PANDA WITH A BOUNDING SPHERE ERROR suitTrack.append(Sequence(showDamage, updateHealthBar, SoundInterval(soundEffect, node=suit))) if died and not suit.getSkelecog(): suitTrack.append(headExplodeTrack(suit, battle)) else: suitTrack.append(showDamage) suitTrack.append(updateHealthBar) if hitCount == 1: suitTrack.append(Parallel(ActorInterval(suit, 'squirt-small-react'), MovieUtil.createSuitStunInterval(suit, 0.5, 1.8))) else: suitTrack.append(ActorInterval(suit, 'squirt-small-react')) if kbbonus == 0: suitTrack.append(__createSuitResetPosTrack(suit, battle)) suitTrack.append(Func(battle.unlureSuit, suit)) bonusTrack = None if hpbonus > 0: bonusTrack = Sequence(Wait(delay + tSuitReact + delay + 0.75 + uberDelay), Func(suit.showHpText, -hpbonus, 1, openEnded=0), Func(suit.updateHealthBar, hpbonus)) suitTrack.append(Func(suit.loop, 'neutral')) if bonusTrack == None: tracks.append(suitTrack) else: tracks.append(Parallel(suitTrack, bonusTrack)) elif totalDamage <= 0: tracks.append(Sequence(Wait(2.9), Func(MovieUtil.indicateMissed, suit, 1.0))) tracks.append(MovieUtil.createSuitTeaseMultiTrack(suit, delay + tSuitReact)) return tracks
def __createSuitTrack(drop, delay, level, alreadyDodged, alreadyTeased, target, npcs): toon = drop['toon'] if 'npc' in drop: toon = drop['npc'] battle = drop['battle'] majorObject = level >= 3 suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] hpbonus = drop['hpbonus'] if hp > 0: suitTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitTrack.append(Wait(delay + tObjectAppears)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) suitGettingHit = Parallel(suitReact) if level == UBER_GAG_LEVEL_INDEX: gotHitSound = globalBattleSoundCache.getSound( 'AA_drop_boat_cog.ogg') suitGettingHit.append(SoundInterval(gotHitSound, node=toon)) suitTrack.append(suitGettingHit) bonusTrack = None if hpbonus > 0: bonusTrack = Sequence( Wait(delay + tObjectAppears + 0.75), Func(suit.showHpText, -hpbonus, 1, openEnded=0), Func(suit.updateHealthBar, hpbonus)) bonusTrack.append(updateHealthBar) if revived != 0: suitTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs)) elif died != 0: suitTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs)) else: suitTrack.append(Func(suit.loop, 'neutral')) if bonusTrack != None: suitTrack = Parallel(suitTrack, bonusTrack) elif kbbonus == 0: suitTrack = Sequence(Wait(delay + tObjectAppears), Func(MovieUtil.indicateMissed, suit, 0.6), Func(suit.loop, 'neutral')) else: if alreadyDodged > 0: return if level >= 3: if alreadyTeased > 0: return else: suitTrack = MovieUtil.createSuitTeaseMultiTrack(suit, delay=delay + tObjectAppears) else: suitTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) return suitTrack