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) breakEffect.setBin('fixed', 10) 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))) 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)) 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))) return tracks
def __throwPie(throw, delay, hitCount): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % (toon.getName(), suit.doId, hp, died)) pieName = pieNames[level] hitSuit = hp > 0 pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() splatName = 'splat-' + pieName if pieName == 'wedding-cake': splatName = 'splat-birthday-cake' splat = globalPropPool.getProp(splatName) splatType = globalPropPool.getPropType(splatName) toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'throw')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) pieShow = Func(MovieUtil.showProps, pies, hands) pieAnim = Func(__animProp, pies, pieName, pieType) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale = Parallel(pieScale1, pieScale2) piePreflight = Func(__propPreflight, pies, suit, toon, battle) pieTrack = Sequence(Wait(delay), pieShow, pieAnim, pieScale, Func(battle.movie.needRestoreRenderProp, pies[0]), Wait(tPieLeavesHand - 1.0), piePreflight) soundTrack = __getSoundTrack(level, hitSuit, toon) if hitSuit: pieFly = LerpPosInterval(pie, tPieHitsSuit - tPieLeavesHand, pos=MovieUtil.avatarFacePoint(suit, other=battle), name=pieFlyTaskName, other=battle) pieHide = Func(MovieUtil.removeProps, pies) splatShow = Func(__showProp, splat, suit, Point3(0, 0, suit.getHeight())) splatBillboard = Func(__billboardProp, splat) splatAnim = ActorInterval(splat, splatName) splatHide = Func(MovieUtil.removeProp, splat) pieTrack.append(pieFly) pieTrack.append(pieHide) pieTrack.append(Func(battle.movie.clearRenderProp, pies[0])) pieTrack.append(splatShow) pieTrack.append(splatBillboard) pieTrack.append(splatAnim) pieTrack.append(splatHide) else: missDict = {} if sidestep: suitPoint = MovieUtil.avatarFacePoint(suit, other=battle) else: suitPoint = __suitMissPoint(suit, other=battle) piePreMiss = Func(__piePreMiss, missDict, pie, suitPoint, battle) pieMiss = LerpFunctionInterval( __pieMissLerpCallback, extraArgs=[missDict], duration=(tPieHitsSuit - tPieLeavesHand) * ratioMissToHit) pieHide = Func(MovieUtil.removeProps, pies) pieTrack.append(piePreMiss) pieTrack.append(pieMiss) pieTrack.append(pieHide) pieTrack.append(Func(battle.movie.clearRenderProp, pies[0])) if hitSuit: suitResponseTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=THROW_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) sival = [] if kbbonus > 0: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append( ActorInterval(suit, 'pie-small-react', duration=0.2)) if suitType == 'a': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.43)) elif suitType == 'b': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=1.94)) elif suitType == 'c': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.58)) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence( Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)) sival = Parallel(animTrack, moveTrack) elif hitCount == 1: sival = Parallel(ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)) else: sival = ActorInterval(suit, 'pie-small-react') suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) notify.warning('Current HP:' + str(hp)) suitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=THROW_TRACK)) bonusTrack.append(Func(suit.updateHealthBar, kbbonus)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=THROW_TRACK)) bonusTrack.append(Func(suit.updateHealthBar, kbbonus)) if revived != 0: suitResponseTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif died != 0: suitResponseTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitResponseTrack.append(Func(suit.loop, 'neutral')) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) else: suitResponseTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) if not hitSuit and delay > 0: return [toonTrack, soundTrack, pieTrack] else: return [toonTrack, soundTrack, pieTrack, suitResponseTrack]
def __throwPie(throw, delay, hitCount, showCannon = 1): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % (toon.getName(), suit.doId, hp, died)) pieName = pieNames[0] hitSuit = hp > 0 button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(ActorInterval(toon, 'wave', duration=2.0)) toonTrack.append(ActorInterval(toon, 'duck')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) buttonTrack = Sequence() buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) soundTrack = __getSoundTrack(level, hitSuit, toon) suitResponseTrack = Sequence() reactIval = Sequence() if showCannon: showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) cannon = loader.loadModel('phase_4/models/minigames/toon_cannon') barrel = cannon.find('**/cannon') barrel.setHpr(0, 90, 0) cannonHolder = render.attachNewNode('CannonHolder') cannon.reparentTo(cannonHolder) cannon.setPos(0, 0, -8.6) cannonHolder.setPos(suit.getPos(render)) cannonHolder.setHpr(suit.getHpr(render)) cannonAttachPoint = barrel.attachNewNode('CannonAttach') kapowAttachPoint = barrel.attachNewNode('kapowAttach') scaleFactor = 1.6 iScale = 1 / scaleFactor barrel.setScale(scaleFactor, 1, scaleFactor) cannonAttachPoint.setScale(iScale, 1, iScale) cannonAttachPoint.setPos(0, 6.7, 0) kapowAttachPoint.setPos(0, -0.5, 1.9) suit.reparentTo(cannonAttachPoint) suit.setPos(0, 0, 0) suit.setHpr(0, -90, 0) suitLevel = suit.getActualLevel() deep = 2.5 + suitLevel * 0.2 suitScale = 0.9 import math suitScale = 0.9 - math.sqrt(suitLevel) * 0.1 sival = [] posInit = cannonHolder.getPos() posFinal = Point3(posInit[0] + 0.0, posInit[1] + 0.0, posInit[2] + 7.0) kapow = globalPropPool.getProp('kapow') kapow.reparentTo(kapowAttachPoint) kapow.hide() kapow.setScale(0.25) kapow.setBillboardPointEye() smoke = loader.loadModel('phase_4/models/props/test_clouds') smoke.reparentTo(cannonAttachPoint) smoke.setScale(0.5) smoke.hide() smoke.setBillboardPointEye() soundBomb = base.loadSfx('phase_4/audio/sfx/MG_cannon_fire_alt.ogg') playSoundBomb = SoundInterval(soundBomb, node=cannonHolder) soundFly = base.loadSfx('phase_4/audio/sfx/firework_whistle_01.ogg') playSoundFly = SoundInterval(soundFly, node=cannonHolder) soundCannonAdjust = base.loadSfx('phase_4/audio/sfx/MG_cannon_adjust.ogg') playSoundCannonAdjust = SoundInterval(soundCannonAdjust, duration=0.6, node=cannonHolder) soundCogPanic = base.loadSfx('phase_5/audio/sfx/ENC_cogafssm.ogg') playSoundCogPanic = SoundInterval(soundCogPanic, node=cannonHolder) reactIval = Parallel(ActorInterval(suit, 'pie-small-react'), Sequence(Wait(0.0), LerpPosInterval(cannonHolder, 2.0, posFinal, startPos=posInit, blendType='easeInOut'), Parallel(LerpHprInterval(barrel, 0.6, Point3(0, 45, 0), startHpr=Point3(0, 90, 0), blendType='easeIn'), playSoundCannonAdjust), Wait(2.0), Parallel(LerpHprInterval(barrel, 0.6, Point3(0, 90, 0), startHpr=Point3(0, 45, 0), blendType='easeIn'), playSoundCannonAdjust), LerpPosInterval(cannonHolder, 1.0, posInit, startPos=posFinal, blendType='easeInOut')), Sequence(Wait(0.0), Parallel(ActorInterval(suit, 'flail'), suit.scaleInterval(1.0, suitScale), LerpPosInterval(suit, 0.25, Point3(0, -1.0, 0.0)), Sequence(Wait(0.25), Parallel(playSoundCogPanic, LerpPosInterval(suit, 1.5, Point3(0, -deep, 0.0), blendType='easeIn')))), Wait(2.5), Parallel(playSoundBomb, playSoundFly, Sequence(Func(smoke.show), Parallel(LerpScaleInterval(smoke, 0.5, 3), LerpColorScaleInterval(smoke, 0.5, Vec4(2, 2, 2, 0))), Func(smoke.hide)), Sequence(Func(kapow.show), ActorInterval(kapow, 'kapow'), Func(kapow.hide)), LerpPosInterval(suit, 3.0, Point3(0, 150.0, 0.0)), suit.scaleInterval(3.0, 0.01)), Func(suit.hide))) if hitCount == 1: sival = Sequence(Parallel(reactIval, MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)), Wait(0.0), Func(cannonHolder.remove)) else: sival = reactIval suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) suitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0)) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) return [toonTrack, soundTrack, buttonTrack, suitResponseTrack]
def __getSuitTrack(suit, tContact, tDodge, hp, hpbonus, kbbonus, anim, died, leftSuits, rightSuits, battle, toon, fShowStun, beforeStun=0.5, afterStun=1.8, geyser=0, uberRepeat=0, revived=0): if hp > 0: suitTrack = Sequence() sival = ActorInterval(suit, anim) sival = [] if kbbonus > 0 and not geyser: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append(ActorInterval(suit, anim, duration=0.2)) if suitType == 'a': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.43)) elif suitType == 'b': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=1.94)) elif suitType == 'c': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.58)) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence( Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)) sival = Parallel(animTrack, moveTrack) elif geyser: suitStartPos = suit.getPos() suitFloat = Point3(0, 0, 14) suitEndPos = Point3(suitStartPos[0] + suitFloat[0], suitStartPos[1] + suitFloat[1], suitStartPos[2] + suitFloat[2]) suitType = getSuitBodyType(suit.getStyleName()) if suitType == 'a': startFlailFrame = 16 endFlailFrame = 16 elif suitType == 'b': startFlailFrame = 15 endFlailFrame = 15 else: startFlailFrame = 15 endFlailFrame = 15 sival = Sequence( ActorInterval(suit, 'slip-backward', playRate=0.5, startFrame=0, endFrame=startFlailFrame - 1), Func(suit.pingpong, 'slip-backward', fromFrame=startFlailFrame, toFrame=endFlailFrame), Wait(0.5), ActorInterval(suit, 'slip-backward', playRate=1.0, startFrame=endFlailFrame)) sUp = LerpPosInterval(suit, 1.1, suitEndPos, startPos=suitStartPos, fluid=1) sDown = LerpPosInterval(suit, 0.6, suitStartPos, startPos=suitEndPos, fluid=1) elif fShowStun == 1: sival = Parallel( ActorInterval(suit, anim), MovieUtil.createSuitStunInterval(suit, beforeStun, afterStun)) else: sival = ActorInterval(suit, anim) showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=SQUIRT_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) suitTrack.append(Wait(tContact)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) if not geyser: suitTrack.append(sival) elif not uberRepeat: geyserMotion = Sequence(sUp, Wait(0.0), sDown) suitLaunch = Parallel(sival, geyserMotion) suitTrack.append(suitLaunch) else: suitTrack.append(Wait(5.5)) bonusTrack = Sequence(Wait(tContact)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=SQUIRT_TRACK)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=SQUIRT_TRACK)) if died != 0: suitTrack.append(MovieUtil.createSuitDeathTrack( suit, toon, battle)) else: suitTrack.append(Func(suit.loop, 'neutral')) if revived != 0: suitTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle)) return Parallel(suitTrack, bonusTrack) else: return MovieUtil.createSuitDodgeMultitrack(tDodge, suit, leftSuits, rightSuits)
def __doSoundsLevel(sounds, delay, hitCount): lastSoundThatHit = None totalDamage = 0 for sound in sounds: for target in sound['target']: if target['hp'] > 0: lastSoundThatHit = sound totalDamage += target['hp'] break tracks = [] for sound in sounds: toon = sound['toon'] level = sound['level'] targets = sound['target'] hpbonus = sound['hpbonus'] megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [megaphone, megaphone2] hands = toon.getRightHands() megaphoneIntervals = [] megaphoneShow = FunctionInterval(MovieUtil.showProps, extraArgs=[megaphones, hands]) megaphoneGrow = LerpScaleInterval(megaphone, dMegaphoneGrow, megaphone.getScale(), startScale=Point3(0.01, 0.01, 0.01)) megaphoneShrink = LerpScaleInterval(megaphone, dMegaphoneShrink, Point3(0.01, 0.01, 0.01), megaphone.getScale()) megaphoneHide = FunctionInterval(MovieUtil.removeProps, extraArgs=[megaphones]) megaphoneIntervals.append((delay, megaphoneShow)) megaphoneIntervals.append(megaphoneGrow) megaphoneIntervals.append((delay + tMegaphoneShrink, megaphoneShrink)) megaphoneIntervals.append(megaphoneHide) tracks.append(Track(megaphoneIntervals)) toonIntervals = [] toonSound = ActorInterval(toon, 'sound') toonIntervals.append((delay, toonSound)) toonIntervals.append(FunctionInterval(toon.loop, extraArgs=['neutral'])) tracks.append(Track(toonIntervals)) soundEffect = globalBattleSoundCache.getSound(soundFiles[level]) if soundEffect: soundIntervals = [] playSound = SoundInterval(soundEffect, node=toon) soundIntervals.append((delay + tSound, playSound)) tracks.append(Track(soundIntervals)) 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'] suitIntervals = [] showDamage = FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-totalDamage]) updateHealthBar = FunctionInterval(suit.updateHealthBar, extraArgs=[totalDamage]) suitIntervals.append((delay + tSuitReact, showDamage)) suitIntervals.append(updateHealthBar) if hitCount == 1: suitIntervals.append( Parallel( ActorInterval(suit, 'squirt-small-react'), MovieUtil.createSuitStunInterval(suit, 0.5, 1.8))) else: suitIntervals.append( ActorInterval(suit, 'squirt-small-react')) if kbbonus == 0: suitIntervals.append( __createSuitResetPosTrack(suit, battle)) suitIntervals.append(Func(battle.unlureSuit, suit)) bonusTrack = None if hpbonus > 0: bonusTrack = Track([ (delay + tSuitReact + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1])) ]) if died != 0: suitIntervals.append( MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitIntervals.append( FunctionInterval(suit.loop, extraArgs=['neutral'])) if bonusTrack == None: tracks.append(Track(suitIntervals)) else: tracks.append( MultiTrack([Track(suitIntervals), bonusTrack])) else: if totalDamage <= 0: tracks.append( Track([(2.9, FunctionInterval(MovieUtil.indicateMissed, extraArgs=[suit, 1.0]))])) return tracks return
def __throwGroupPie(throw, delay, groupHitDict): toon = throw['toon'] battle = throw['battle'] level = throw['level'] sidestep = throw['sidestep'] hpbonus = throw['hpbonus'] numTargets = len(throw['target']) avgSuitPos = calcAvgSuitPos(throw) origHpr = toon.getHpr(battle) toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, avgSuitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'throw')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) suits = [] for i in xrange(numTargets): suits.append(throw['target'][i]['suit']) pieName = pieNames[level] pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() pieShow = Func(MovieUtil.showProps, pies, hands) pieAnim = Func(__animProp, pies, pieName, pieType) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale() * 1.5, startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale() * 1.5, startScale=MovieUtil.PNT3_NEARZERO) pieScale = Parallel(pieScale1, pieScale2) piePreflight = Func(__propPreflightGroup, pies, suits, toon, battle) pieTrack = Sequence(Wait(delay), pieShow, pieAnim, pieScale, Func(battle.movie.needRestoreRenderProp, pies[0]), Wait(tPieLeavesHand - 1.0), piePreflight) if level == UBER_GAG_LEVEL_INDEX: groupPieTracks = __createWeddingCakeFlight(throw, groupHitDict, pie, pies) else: notify.error('unhandled throw level %d' % level) pieTrack.append(groupPieTracks) didThrowHitAnyone = False for i in xrange(numTargets): target = throw['target'][i] hitSuit = target['hp'] > 0 if hitSuit: didThrowHitAnyone = True soundTrack = __getSoundTrack(level, didThrowHitAnyone, toon) groupSuitResponseTrack = Parallel() for i in xrange(numTargets): target = throw['target'][i] suit = target['suit'] hitSuit = target['hp'] > 0 leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] if hitSuit: singleSuitResponseTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=THROW_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) sival = [] if kbbonus > 0: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append(ActorInterval(suit, 'pie-small-react', duration=0.2)) if suitType == 'a': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=2.43)) elif suitType == 'b': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=1.94)) elif suitType == 'c': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=2.58)) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence(Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)) sival = Parallel(animTrack, moveTrack) elif groupHitDict[suit.doId] == 1: sival = Parallel(ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)) else: sival = ActorInterval(suit, 'pie-small-react') singleSuitResponseTrack.append(Wait(delay + tPieHitsSuit)) singleSuitResponseTrack.append(showDamage) singleSuitResponseTrack.append(updateHealthBar) singleSuitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=THROW_TRACK)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=THROW_TRACK)) if revived != 0: singleSuitResponseTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif died != 0: singleSuitResponseTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: singleSuitResponseTrack.append(Func(suit.loop, 'neutral')) singleSuitResponseTrack = Parallel(singleSuitResponseTrack, bonusTrack) else: groupHitValues = groupHitDict.values() if groupHitValues.count(0) == len(groupHitValues): singleSuitResponseTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) else: singleSuitResponseTrack = Sequence(Wait(tPieHitsSuit - 0.1), Func(MovieUtil.indicateMissed, suit, 1.0)) groupSuitResponseTrack.append(singleSuitResponseTrack) return [toonTrack, pieTrack, soundTrack, groupSuitResponseTrack]
def __throwPie(throw, delay, hitCount): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % (toon.getName(), suit.doId, hp, died)) pieName = pieNames[level] hitSuit = hp > 0 pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() splatName = 'splat-' + pieName if pieName == 'wedding-cake': splatName = 'splat-birthday-cake' splat = globalPropPool.getProp(splatName) splatType = globalPropPool.getPropType(splatName) toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'throw')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) pieShow = Func(MovieUtil.showProps, pies, hands) pieAnim = Func(__animProp, pies, pieName, pieType) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale = Parallel(pieScale1, pieScale2) piePreflight = Func(__propPreflight, pies, suit, toon, battle) pieTrack = Sequence(Wait(delay), pieShow, pieAnim, pieScale, Func(battle.movie.needRestoreRenderProp, pies[0]), Wait(tPieLeavesHand - 1.0), piePreflight) soundTrack = __getSoundTrack(level, hitSuit, toon) if hitSuit: pieFly = LerpPosInterval(pie, tPieHitsSuit - tPieLeavesHand, pos=MovieUtil.avatarFacePoint(suit, other=battle), name=pieFlyTaskName, other=battle) pieHide = Func(MovieUtil.removeProps, pies) splatShow = Func(__showProp, splat, suit, Point3(0, 0, suit.getHeight())) splatBillboard = Func(__billboardProp, splat) splatAnim = ActorInterval(splat, splatName) splatHide = Func(MovieUtil.removeProp, splat) pieTrack.append(pieFly) pieTrack.append(pieHide) pieTrack.append(Func(battle.movie.clearRenderProp, pies[0])) pieTrack.append(splatShow) pieTrack.append(splatBillboard) pieTrack.append(splatAnim) pieTrack.append(splatHide) else: missDict = {} if sidestep: suitPoint = MovieUtil.avatarFacePoint(suit, other=battle) else: suitPoint = __suitMissPoint(suit, other=battle) piePreMiss = Func(__piePreMiss, missDict, pie, suitPoint, battle) pieMiss = LerpFunctionInterval(__pieMissLerpCallback, extraArgs=[missDict], duration=(tPieHitsSuit - tPieLeavesHand) * ratioMissToHit) pieHide = Func(MovieUtil.removeProps, pies) pieTrack.append(piePreMiss) pieTrack.append(pieMiss) pieTrack.append(pieHide) pieTrack.append(Func(battle.movie.clearRenderProp, pies[0])) if hitSuit: suitResponseTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=THROW_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) sival = [] if kbbonus > 0: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append(ActorInterval(suit, 'pie-small-react', duration=0.2)) if suitType == 'a': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=2.43)) elif suitType == 'b': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=1.94)) elif suitType == 'c': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=2.58)) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence(Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)) sival = Parallel(animTrack, moveTrack) elif hitCount == 1: sival = Parallel(ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)) else: sival = ActorInterval(suit, 'pie-small-react') suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) suitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=THROW_TRACK)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=THROW_TRACK)) if revived != 0: suitResponseTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif died != 0: suitResponseTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitResponseTrack.append(Func(suit.loop, 'neutral')) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) else: suitResponseTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) if not hitSuit and delay > 0: return [toonTrack, soundTrack, pieTrack] else: return [toonTrack, soundTrack, pieTrack, suitResponseTrack]
def __throwPie(throw, delay, hitCount): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % (toon.getName(), suit.doId, hp, died)) pieName = pieNames[level] hitSuit = hp > 0 pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() splatName = 'splat-' + pieName splat = globalPropPool.getProp(splatName) splatType = globalPropPool.getPropType(splatName) toonIvals = [] toonFace = FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]) toonIvals.append((delay, toonFace)) toonIvals.append(ActorInterval(toon, 'throw')) toonIvals.append(FunctionInterval(toon.loop, extraArgs=['neutral'])) toonIvals.append(FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr])) toonTrack = Track(toonIvals) pieIntervals = [] pieShow = FunctionInterval(MovieUtil.showProps, extraArgs=[pies, hands]) pieAnim = FunctionInterval(__animProp, extraArgs=[pies, pieName, pieType]) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale = MultiTrack([Track([pieScale1]), Track([pieScale2])]) piePreflight = FunctionInterval(__propPreflight, extraArgs=[pies, suit, toon, battle]) pieIntervals.append((delay, pieShow)) pieIntervals.append(pieAnim) pieIntervals.append(pieScale) pieIntervals.append(FunctionInterval(battle.movie.needRestoreRenderProp, extraArgs=[pies[0]])) pieIntervals.append((delay + tPieLeavesHand, piePreflight)) soundTrack = __getSoundTrack(level, hitSuit, toon) if hitSuit: pieFly = LerpPosInterval(pie, tPieHitsSuit - tPieLeavesHand, pos=MovieUtil.avatarFacePoint(suit, other=battle), name=pieFlyTaskName, other=battle) pieHide = FunctionInterval(MovieUtil.removeProps, extraArgs=[pies]) splatShow = FunctionInterval(__showProp, extraArgs=[splat, suit, Point3(0, 0, suit.getHeight())]) splatBillboard = FunctionInterval(__billboardProp, extraArgs=[splat]) splatAnim = ActorInterval(splat, splatName) splatHide = FunctionInterval(MovieUtil.removeProp, extraArgs=[splat]) pieIntervals.append((delay + tPieLeavesHand, pieFly)) pieIntervals.append(pieHide) pieIntervals.append(FunctionInterval(battle.movie.clearRenderProp, extraArgs=[pies[0]])) pieIntervals.append(splatShow) pieIntervals.append(splatBillboard) pieIntervals.append(splatAnim) pieIntervals.append(splatHide) else: missDict = {} if sidestep: suitPoint = MovieUtil.avatarFacePoint(suit, other=battle) else: suitPoint = __suitMissPoint(suit, other=battle) piePreMiss = FunctionInterval(__piePreMiss, extraArgs=[missDict, pie, suitPoint, battle]) pieMiss = LerpFunctionInterval(__pieMissLerpCallback, extraArgs=[missDict], duration=(tPieHitsSuit - tPieLeavesHand) * ratioMissToHit) pieHide = FunctionInterval(MovieUtil.removeProps, extraArgs=[pies]) pieIntervals.append((delay + tPieLeavesHand, piePreMiss)) pieIntervals.append(pieMiss) pieIntervals.append(pieHide) pieIntervals.append(FunctionInterval(battle.movie.clearRenderProp, extraArgs=[pies[0]])) pieTrack = Track(pieIntervals) if hitSuit: suitIntervals = [] showDamage = FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hp]) updateHealthBar = FunctionInterval(suit.updateHealthBar, extraArgs=[hp]) sival = [] if kbbonus > 0: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animIvals = [] animIvals.append(ActorInterval(suit, 'pie-small-react', duration=0.2)) if suitType == 'a': animIvals.append(ActorInterval(suit, 'slip-forward', startTime=2.43)) else: if suitType == 'b': animIvals.append(ActorInterval(suit, 'slip-forward', startTime=1.94, duration=1.03)) else: if suitType == 'c': animIvals.append(ActorInterval(suit, 'slip-forward', startTime=2.58)) animIvals.append(Func(battle.unlureSuit, suit)) animTrack = Track(animIvals) moveTrack = Track([WaitInterval(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)]) sival = MultiTrack([animTrack, moveTrack]) else: if hitCount == 1: sival = Parallel(ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)) else: sival = ActorInterval(suit, 'pie-small-react') suitIntervals.append((delay + tPieHitsSuit, showDamage)) suitIntervals.append(updateHealthBar) suitIntervals.append(sival) bonusTrack = None bonusIvals = [] if kbbonus > 0: bonusIvals.append((delay + tPieHitsSuit + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-kbbonus, 2]))) if hpbonus > 0: if kbbonus > 0: bonusIvals.append((0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1]), PREVIOUS_END)) else: bonusIvals.append((delay + tPieHitsSuit + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1]))) if len(bonusIvals) > 0: bonusTrack = Track(bonusIvals) if died != 0: suitIntervals.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitIntervals.append(FunctionInterval(suit.loop, extraArgs=['neutral'])) if bonusTrack == None: suitResponseTrack = Track(suitIntervals) else: suitResponseTrack = MultiTrack([Track(suitIntervals), bonusTrack]) else: suitResponseTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) if not hitSuit and delay > 0: return [toonTrack, soundTrack, pieTrack] else: return [ toonTrack, soundTrack, pieTrack, suitResponseTrack] return
def __getSuitTrack(suit, tContact, tDodge, hp, hpbonus, kbbonus, anim, died, leftSuits, rightSuits, battle, toon, fShowStun, beforeStun=0.5, afterStun=1.8): if hp > 0: suitIvals = [] sival = ActorInterval(suit, anim) sival = [] if kbbonus > 0: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animIvals = [] animIvals.append(ActorInterval(suit, anim, duration=0.2)) if suitType == 'a': animIvals.append( ActorInterval(suit, 'slip-forward', startTime=2.43)) else: if suitType == 'b': animIvals.append( ActorInterval(suit, 'slip-forward', startTime=1.94, duration=1.03)) else: if suitType == 'c': animIvals.append( ActorInterval(suit, 'slip-forward', startTime=2.58)) animIvals.append(Func(battle.unlureSuit, suit)) animTrack = Track(animIvals) moveTrack = Track([ WaitInterval(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle) ]) sival = MultiTrack([animTrack, moveTrack]) else: if fShowStun == 1: sival = Parallel( ActorInterval(suit, anim), MovieUtil.createSuitStunInterval(suit, beforeStun, afterStun)) else: sival = ActorInterval(suit, anim) showDamage = FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hp]) updateHealthBar = FunctionInterval(suit.updateHealthBar, extraArgs=[hp]) suitIvals.append((tContact, showDamage)) suitIvals.append(updateHealthBar) suitIvals.append(sival) bonusTrack = None bonusIvals = [] if kbbonus > 0: bonusIvals.append((tContact + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-kbbonus, 2]))) if hpbonus > 0: if kbbonus > 0: bonusIvals.append( (0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1]), PREVIOUS_END)) else: bonusIvals.append((tContact + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1]))) if len(bonusIvals) > 0: bonusTrack = Track(bonusIvals) if died != 0: suitIvals.append(MovieUtil.createSuitDeathTrack( suit, toon, battle)) else: suitIvals.append(FunctionInterval(suit.loop, extraArgs=['neutral'])) if bonusTrack == None: return Track(suitIvals) else: return MultiTrack([Track(suitIvals), bonusTrack]) else: return MovieUtil.createSuitDodgeMultitrack(tDodge, suit, leftSuits, rightSuits) return
def __throwPie(throw, delay, hitCount, showCannon = 1): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % (toon.getName(), suit.doId, hp, died)) pieName = pieNames[0] hitSuit = hp > 0 button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(ActorInterval(toon, 'wave', duration=2.0)) toonTrack.append(ActorInterval(toon, 'duck')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) buttonTrack = Sequence() buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) soundTrack = __getSoundTrack(level, hitSuit, toon) suitResponseTrack = Sequence() reactIval = Sequence() if showCannon: showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) cannon = loader.loadModel('phase_4/models/minigames/toon_cannon') barrel = cannon.find('**/cannon') barrel.setHpr(0, 90, 0) cannonHolder = render.attachNewNode('CannonHolder') cannon.reparentTo(cannonHolder) cannon.setPos(0, 0, -8.6) cannonHolder.setPos(suit.getPos(render)) cannonHolder.setHpr(suit.getHpr(render)) cannonAttachPoint = barrel.attachNewNode('CannonAttach') kapowAttachPoint = barrel.attachNewNode('kapowAttach') scaleFactor = 1.6 iScale = 1 / scaleFactor barrel.setScale(scaleFactor, 1, scaleFactor) cannonAttachPoint.setScale(iScale, 1, iScale) cannonAttachPoint.setPos(0, 6.7, 0) kapowAttachPoint.setPos(0, -0.5, 1.9) suit.reparentTo(cannonAttachPoint) suit.setPos(0, 0, 0) suit.setHpr(0, -90, 0) suitLevel = suit.getActualLevel() deep = 2.5 + suitLevel * 0.2 suitScale = 0.9 import math suitScale = 0.9 - math.sqrt(suitLevel) * 0.1 sival = [] posInit = cannonHolder.getPos() posFinal = Point3(posInit[0] + 0.0, posInit[1] + 0.0, posInit[2] + 7.0) kapow = globalPropPool.getProp('kapow') kapow.reparentTo(kapowAttachPoint) kapow.hide() kapow.setScale(0.25) kapow.setBillboardPointEye() smoke = loader.loadModel('phase_4/models/props/test_clouds') smoke.reparentTo(cannonAttachPoint) smoke.setScale(0.5) smoke.hide() smoke.setBillboardPointEye() soundBomb = base.loadSfx('phase_4/audio/sfx/MG_cannon_fire_alt.mp3') playSoundBomb = SoundInterval(soundBomb, node=cannonHolder) soundFly = base.loadSfx('phase_4/audio/sfx/firework_whistle_01.mp3') playSoundFly = SoundInterval(soundFly, node=cannonHolder) soundCannonAdjust = base.loadSfx('phase_4/audio/sfx/MG_cannon_adjust.mp3') playSoundCannonAdjust = SoundInterval(soundCannonAdjust, duration=0.6, node=cannonHolder) soundCogPanic = base.loadSfx('phase_5/audio/sfx/ENC_cogafssm.mp3') playSoundCogPanic = SoundInterval(soundCogPanic, node=cannonHolder) reactIval = Parallel(ActorInterval(suit, 'pie-small-react'), Sequence(Wait(0.0), LerpPosInterval(cannonHolder, 2.0, posFinal, startPos=posInit, blendType='easeInOut'), Parallel(LerpHprInterval(barrel, 0.6, Point3(0, 45, 0), startHpr=Point3(0, 90, 0), blendType='easeIn'), playSoundCannonAdjust), Wait(2.0), Parallel(LerpHprInterval(barrel, 0.6, Point3(0, 90, 0), startHpr=Point3(0, 45, 0), blendType='easeIn'), playSoundCannonAdjust), LerpPosInterval(cannonHolder, 1.0, posInit, startPos=posFinal, blendType='easeInOut')), Sequence(Wait(0.0), Parallel(ActorInterval(suit, 'flail'), suit.scaleInterval(1.0, suitScale), LerpPosInterval(suit, 0.25, Point3(0, -1.0, 0.0)), Sequence(Wait(0.25), Parallel(playSoundCogPanic, LerpPosInterval(suit, 1.5, Point3(0, -deep, 0.0), blendType='easeIn')))), Wait(2.5), Parallel(playSoundBomb, playSoundFly, Sequence(Func(smoke.show), Parallel(LerpScaleInterval(smoke, 0.5, 3), LerpColorScaleInterval(smoke, 0.5, Vec4(2, 2, 2, 0))), Func(smoke.hide)), Sequence(Func(kapow.show), ActorInterval(kapow, 'kapow'), Func(kapow.hide)), LerpPosInterval(suit, 3.0, Point3(0, 1 # Can't uncompyle C:\Users\Maverick\Documents\Visual Studio 2010\Projects\Unfreezer\py2\toontown\battle\MovieFire.pyc Traceback (most recent call last): File "C:\python27\lib\uncompyle2\__init__.py", line 206, in main uncompyle_file(infile, outstream, showasm, showast) File "C:\python27\lib\uncompyle2\__init__.py", line 143, in uncompyle_file uncompyle(version, co, outstream, showasm, showast) File "C:\python27\lib\uncompyle2\__init__.py", line 132, in uncompyle raise walk.ERROR ParserError: --- This code section failed: --- 0 LOAD_GLOBAL 'len' 3 LOAD_FAST 'fires' 6 CALL_FUNCTION_1 None 9 LOAD_CONST 0 12 COMPARE_OP '==' 15 JUMP_IF_FALSE '25' 18 LOAD_CONST (None, None) 21 RETURN_VALUE None 22 JUMP_FORWARD '25' 25_0 COME_FROM '22' 25 BUILD_MAP None 28 STORE_FAST 'suitFiresDict' 31 SETUP_LOOP '113' 34 LOAD_FAST 'fires' 37 GET_ITER None 38 FOR_ITER '112' 41 STORE_FAST 'fire' 44 LOAD_FAST 'fire' 47 LOAD_CONST 'target' 50 BINARY_SUBSCR None 51 LOAD_CONST 'suit' 54 BINARY_SUBSCR None 55 LOAD_ATTR 'doId' 58 STORE_FAST 'suitId' 61 LOAD_FAST 'suitFiresDict' 64 LOAD_ATTR 'has_key' 67 LOAD_FAST 'suitId' 70 CALL_FUNCTION_1 None 73 JUMP_IF_FALSE '96' 76 LOAD_FAST 'suitFiresDict' 79 LOAD_FAST 'suitId' 82 BINARY_SUBSCR None 83 LOAD_ATTR 'append' 86 LOAD_FAST 'fire' 89 CALL_FUNCTION_1 None 92 POP_TOP None 93 JUMP_BACK '38' 96 LOAD_FAST 'fire' 99 BUILD_LIST_1 None 102 LOAD_FAST 'suitFiresDict' 105 LOAD_FAST 'suitId' 108 STORE_SUBSCR None 109 JUMP_BACK '38' 112 POP_BLOCK None 113_0 COME_FROM '31' 113 LOAD_FAST 'suitFiresDict' 116 LOAD_ATTR 'values' 119 CALL_FUNCTION_0 None 122 STORE_FAST 'suitFires' 125 LOAD_CONST '<code_object compFunc>' 128 MAKE_FUNCTION_0 None 131 STORE_FAST 'compFunc' 134 LOAD_FAST 'suitFires' 137 LOAD_ATTR 'sort' 140 LOAD_FAST 'compFunc' 143 CALL_FUNCTION_1 None 146 POP_TOP None 147 BUILD_MAP None 150 STORE_FAST 'totalHitDict' 153 BUILD_MAP None 156 STORE_FAST 'singleHitDict' 159 BUILD_MAP None 162 STORE_FAST 'groupHitDict' 165 SETUP_LOOP '289' 168 LOAD_FAST 'fires' 171 GET_ITER None 172 FOR_ITER '288' 175 STORE_FAST 'fire' 178 LOAD_FAST 'fire' 181 LOAD_CONST 'target' 184 BINARY_SUBSCR None 185 LOAD_CONST 'suit' 188 BINARY_SUBSCR None 189 LOAD_ATTR 'doId' 192 STORE_FAST 'suitId' 195 LOAD_FAST 'fire' 198 LOAD_CONST 'target' 201 BINARY_SUBSCR None 202 LOAD_CONST 'hp' 205 BINARY_SUBSCR None 206 LOAD_CONST 0 209 COMPARE_OP '>' 212 JUMP_IF_FALSE '250' 215 LOAD_GLOBAL 'addHit' 218 LOAD_FAST 'singleHitDict' 221 LOAD_FAST 'suitId' 224 LOAD_CONST 1 227 CALL_FUNCTION_3 None 230 POP_TOP None 231 LOAD_GLOBAL 'addHit' 234 LOAD_FAST 'totalHitDict' 237 LOAD_FAST 'suitId' 240 LOAD_CONST 1 243 CALL_FUNCTION_3 None 246 POP_TOP None 247 JUMP_ABSOLUTE '285' 250 LOAD_GLOBAL 'addHit' 253 LOAD_FAST 'singleHitDict' 256 LOAD_FAST 'suitId' 259 LOAD_CONST 0 262 CALL_FUNCTION_3 None 265 POP_TOP None 266 LOAD_GLOBAL 'addHit' 269 LOAD_FAST 'totalHitDict' 272 LOAD_FAST 'suitId' 275 LOAD_CONST 0 278 CALL_FUNCTION_3 None 281 POP_TOP None 282 JUMP_BACK '172' 285 JUMP_BACK '172' 288 POP_BLOCK None 289_0 COME_FROM '165' 289 LOAD_GLOBAL 'notify' 292 LOAD_ATTR 'debug' 295 LOAD_CONST 'singleHitDict = %s' 298 LOAD_FAST 'singleHitDict' 301 BINARY_MODULO None 302 CALL_FUNCTION_1 None 305 POP_TOP None 306 LOAD_GLOBAL 'notify'50.0, 0.0)), suit.scaleInterval(3.0, 0.01)), Func(suit.hide))) if hitCount == 1: sival = Sequence(Parallel(reactIval, MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)), Wait(0.0), Func(cannonHolder.remove)) else: sival = reactIval suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) suitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0)) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) return [toonTrack, soundTrack, buttonTrack, suitResponseTrack]# decompiled 0 files: 0 okay, 1 failed, 0 verify failed
def __throwGroupPie(throw, delay, groupHitDict): """ TODO this can be made to __throwGroupPie and wedding cake stuff is called in a diff function """ toon = throw['toon'] battle = throw['battle'] level = throw['level'] sidestep = throw['sidestep'] hpbonus = throw['hpbonus'] numTargets = len(throw['target']) avgSuitPos = calcAvgSuitPos(throw) # make the toon throw the wedding cake origHpr = toon.getHpr(battle) toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, avgSuitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'throw')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) # take the pie from the toon and make it fly suits = [] for i in range(numTargets): suits.append(throw['target'][i]['suit']) pieName = pieNames[level] pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() pieShow = Func(MovieUtil.showProps, pies, hands) pieAnim = Func(__animProp, pies, pieName, pieType) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale() * 1.5, startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale() * 1.5, startScale=MovieUtil.PNT3_NEARZERO) pieScale = Parallel(pieScale1, pieScale2) piePreflight = Func(__propPreflightGroup, pies, suits, toon, battle) pieTrack = Sequence( Wait(delay), pieShow, pieAnim, pieScale, Func(battle.movie.needRestoreRenderProp, pies[0]), Wait(tPieLeavesHand - 1.0), piePreflight, ) #create the pie flight interval if level == UBER_GAG_LEVEL_INDEX: groupPieTracks = __createWeddingCakeFlight(throw, groupHitDict, pie, pies) else: notify.error('unhandled throw level %d' % level) pieTrack.append(groupPieTracks) didThrowHitAnyone = False for i in range(numTargets): target = throw['target'][i] hitSuit = (target['hp'] > 0) if hitSuit: didThrowHitAnyone = True soundTrack = __getSoundTrack(level, didThrowHitAnyone, toon) groupSuitResponseTrack = Parallel() #handle the suit response for i in range(numTargets): target = throw['target'][i] suit = target['suit'] hitSuit = (target['hp'] > 0) leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] if hitSuit: singleSuitResponseTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=THROW_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) # If the suit gets knocked back, animate it # No stun animation shown here sival = [] # Suit interval of its animation if (kbbonus > 0): suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append( ActorInterval(suit, 'pie-small-react', duration=0.2)) if (suitType == 'a'): animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.43)) elif (suitType == 'b'): animTrack.append( ActorInterval(suit, 'slip-forward', startTime=1.94)) elif (suitType == 'c'): animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.58)) # Be sure to unlure the suit so it doesn't walk back (already knocked back) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence( Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle), ) sival = Parallel(animTrack, moveTrack) else: if (groupHitDict[suit.doId] == 1): sival = Parallel( ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3), ) else: sival = ActorInterval(suit, 'pie-small-react') #sival = ActorInterval(suit, 'pie-small-react') singleSuitResponseTrack.append(Wait(delay + tPieHitsSuit)) singleSuitResponseTrack.append(showDamage) singleSuitResponseTrack.append(updateHealthBar) singleSuitResponseTrack.append(sival) # Make a bonus track for any hp bonus bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if (kbbonus > 0): bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=THROW_TRACK)) if (hpbonus > 0): bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=THROW_TRACK)) if (revived != 0): singleSuitResponseTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif (died != 0): singleSuitResponseTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: singleSuitResponseTrack.append(Func(suit.loop, 'neutral')) singleSuitResponseTrack = Parallel(singleSuitResponseTrack, bonusTrack) else: #if none of the group throws hit at all, we can do a dodge groupHitValues = groupHitDict.values() if groupHitValues.count(0) == len(groupHitValues): singleSuitResponseTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) else: #because all the group pies fire at the same time, do not dodge at all #in case one toon hits and another toon misses singleSuitResponseTrack = Sequence( Wait(tPieHitsSuit - 0.1), Func(MovieUtil.indicateMissed, suit, 1.0)) groupSuitResponseTrack.append(singleSuitResponseTrack) return [toonTrack, pieTrack, soundTrack, groupSuitResponseTrack]
def __throwPie(throw, delay, hitCount): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % \ (toon.getName(), suit.doId, hp, died)) pieName = pieNames[level] hitSuit = (hp > 0) pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() splatName = 'splat-' + pieName if pieName == 'wedding-cake': splatName = 'splat-birthday-cake' splat = globalPropPool.getProp(splatName) splatType = globalPropPool.getPropType(splatName) # make the toon throw the pie toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'throw')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) # take the pie from the toon and make it fly pieShow = Func(MovieUtil.showProps, pies, hands) pieAnim = Func(__animProp, pies, pieName, pieType) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale(), startScale=MovieUtil.PNT3_NEARZERO) pieScale = Parallel(pieScale1, pieScale2) piePreflight = Func(__propPreflight, pies, suit, toon, battle) pieTrack = Sequence( Wait(delay), pieShow, pieAnim, pieScale, Func(battle.movie.needRestoreRenderProp, pies[0]), Wait(tPieLeavesHand - 1.0), piePreflight, ) soundTrack = __getSoundTrack(level, hitSuit, toon) if hitSuit: # make the pie fly up to the suit's face and disappear pieFly = LerpPosInterval(pie, tPieHitsSuit - tPieLeavesHand, pos=MovieUtil.avatarFacePoint(suit, other=battle), name=pieFlyTaskName, other=battle) pieHide = Func(MovieUtil.removeProps, pies) # play the splat animation splatShow = Func(__showProp, splat, suit, Point3(0, 0, suit.getHeight())) splatBillboard = Func(__billboardProp, splat) splatAnim = ActorInterval(splat, splatName) splatHide = Func(MovieUtil.removeProp, splat) pieTrack.append(pieFly) pieTrack.append(pieHide) pieTrack.append(Func(battle.movie.clearRenderProp, pies[0])) pieTrack.append(splatShow) pieTrack.append(splatBillboard) pieTrack.append(splatAnim) pieTrack.append(splatHide) else: # the suit is going to dodge, or we missed # make the pie fly past the suit's face, and shrink to nothing missDict = {} if sidestep: suitPoint = MovieUtil.avatarFacePoint(suit, other=battle) else: suitPoint = __suitMissPoint(suit, other=battle) piePreMiss = Func(__piePreMiss, missDict, pie, suitPoint, battle) pieMiss = LerpFunctionInterval( __pieMissLerpCallback, extraArgs=[missDict], duration=((tPieHitsSuit - tPieLeavesHand) * ratioMissToHit)) pieHide = Func(MovieUtil.removeProps, pies) pieTrack.append(piePreMiss) pieTrack.append(pieMiss) pieTrack.append(pieHide) pieTrack.append(Func(battle.movie.clearRenderProp, pies[0])) if hitSuit: suitResponseTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=THROW_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) # If the suit gets knocked back, animate it # No stun animation shown here sival = [] # Suit interval of its animation if (kbbonus > 0): suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append( ActorInterval(suit, 'pie-small-react', duration=0.2)) if (suitType == 'a'): animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.43)) elif (suitType == 'b'): animTrack.append( ActorInterval(suit, 'slip-forward', startTime=1.94)) elif (suitType == 'c'): animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.58)) # Be sure to unlure the suit so it doesn't walk back (already knocked back) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence( Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle), ) sival = Parallel(animTrack, moveTrack) else: if (hitCount == 1): sival = Parallel( ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3), ) else: sival = ActorInterval(suit, 'pie-small-react') #sival = ActorInterval(suit, 'pie-small-react') suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) suitResponseTrack.append(sival) # Make a bonus track for any hp bonus bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if (kbbonus > 0): bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=THROW_TRACK)) if (hpbonus > 0): bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=THROW_TRACK)) if (revived != 0): suitResponseTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif (died != 0): suitResponseTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitResponseTrack.append(Func(suit.loop, 'neutral')) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) else: # suit dodges # other suits may need to dodge as well suitResponseTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) # Since it's possible for there to be simultaneous throws, we only # want the suit to dodge one time at most. Thus if the suit is # not hit (dodges) and that dodge is not from the first dodge # (which has delay=0) then we don't add another suit reaction. # Otherwise, we add the suit track as normal if (not hitSuit and delay > 0): return [toonTrack, soundTrack, pieTrack] else: return [toonTrack, soundTrack, pieTrack, suitResponseTrack]
def __getSuitTrack( suit, tContact, tDodge, hp, hpbonus, kbbonus, anim, died, leftSuits, rightSuits, battle, toon, fShowStun, beforeStun=0.5, afterStun=1.8, ): if hp > 0: suitIvals = [] sival = ActorInterval(suit, anim) sival = [] if kbbonus > 0: (suitPos, suitHpr) = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animIvals = [] animIvals.append(ActorInterval(suit, anim, duration=0.20000000000000001)) if suitType == "a": animIvals.append(ActorInterval(suit, "slip-forward", startTime=2.4300000000000002)) elif suitType == "b": animIvals.append(ActorInterval(suit, "slip-forward", startTime=1.9399999999999999, duration=1.03)) elif suitType == "c": animIvals.append(ActorInterval(suit, "slip-forward", startTime=2.5800000000000001)) animIvals.append(Func(battle.unlureSuit, suit)) animTrack = Track(animIvals) moveTrack = Track( [ WaitInterval(0.20000000000000001), LerpPosInterval(suit, 0.59999999999999998, pos=suitPos, other=battle), ] ) sival = MultiTrack([animTrack, moveTrack]) elif fShowStun == 1: sival = Parallel(ActorInterval(suit, anim), MovieUtil.createSuitStunInterval(suit, beforeStun, afterStun)) else: sival = ActorInterval(suit, anim) showDamage = FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hp]) updateHealthBar = FunctionInterval(suit.updateHealthBar, extraArgs=[hp]) suitIvals.append((tContact, showDamage)) suitIvals.append(updateHealthBar) suitIvals.append(sival) bonusTrack = None bonusIvals = [] if kbbonus > 0: bonusIvals.append( (tContact + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-kbbonus, 2])) ) if hpbonus > 0: if kbbonus > 0: bonusIvals.append( (0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1]), PREVIOUS_END) ) else: bonusIvals.append( (tContact + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1])) ) if len(bonusIvals) > 0: bonusTrack = Track(bonusIvals) if died != 0: suitIvals.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitIvals.append(FunctionInterval(suit.loop, extraArgs=["neutral"])) if bonusTrack == None: return Track(suitIvals) else: return MultiTrack([Track(suitIvals), bonusTrack]) else: return MovieUtil.createSuitDodgeMultitrack(tDodge, suit, leftSuits, rightSuits)
def __throwGroupPie(throw, delay, groupHitDict): toon = throw['toon'] battle = throw['battle'] level = throw['level'] sidestep = throw['sidestep'] hpbonus = throw['hpbonus'] numTargets = len(throw['target']) avgSuitPos = calcAvgSuitPos(throw) origHpr = toon.getHpr(battle) toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, avgSuitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'throw')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) suits = [] for i in range(numTargets): suits.append(throw['target'][i]['suit']) pieName = pieNames[level] pie = globalPropPool.getProp(pieName) pieType = globalPropPool.getPropType(pieName) pie2 = MovieUtil.copyProp(pie) pies = [pie, pie2] hands = toon.getRightHands() pieShow = Func(MovieUtil.showProps, pies, hands) pieAnim = Func(__animProp, pies, pieName, pieType) pieScale1 = LerpScaleInterval(pie, 1.0, pie.getScale() * 1.5, startScale=MovieUtil.PNT3_NEARZERO) pieScale2 = LerpScaleInterval(pie2, 1.0, pie2.getScale() * 1.5, startScale=MovieUtil.PNT3_NEARZERO) pieScale = Parallel(pieScale1, pieScale2) piePreflight = Func(__propPreflightGroup, pies, suits, toon, battle) pieTrack = Sequence(Wait(delay), pieShow, pieAnim, pieScale, Func(battle.movie.needRestoreRenderProp, pies[0]), Wait(tPieLeavesHand - 1.0), piePreflight) if level == UBER_GAG_LEVEL_INDEX: groupPieTracks = __createWeddingCakeFlight(throw, groupHitDict, pie, pies) else: notify.error('unhandled throw level %d' % level) pieTrack.append(groupPieTracks) didThrowHitAnyone = False for i in range(numTargets): target = throw['target'][i] hitSuit = target['hp'] > 0 if hitSuit: didThrowHitAnyone = True soundTrack = __getSoundTrack(level, didThrowHitAnyone, toon) groupSuitResponseTrack = Parallel() for i in range(numTargets): target = throw['target'][i] suit = target['suit'] hitSuit = target['hp'] > 0 leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] if hitSuit: singleSuitResponseTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=THROW_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) sival = [] if kbbonus > 0: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append( ActorInterval(suit, 'pie-small-react', duration=0.2)) if suitType == 'a': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.43)) elif suitType == 'b': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=1.94)) elif suitType == 'c': animTrack.append( ActorInterval(suit, 'slip-forward', startTime=2.58)) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence( Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)) sival = Parallel(animTrack, moveTrack) elif groupHitDict[suit.doId] == 1: sival = Parallel( ActorInterval(suit, 'pie-small-react'), MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)) else: sival = ActorInterval(suit, 'pie-small-react') singleSuitResponseTrack.append(Wait(delay + tPieHitsSuit)) singleSuitResponseTrack.append(showDamage) singleSuitResponseTrack.append(updateHealthBar) singleSuitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=THROW_TRACK)) bonusTrack.append(Func(suit.updateHealthBar, kbbonus)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append( Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=THROW_TRACK)) bonusTrack.append(Func(suit.updateHealthBar, kbbonus)) if revived != 0: singleSuitResponseTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif died != 0: singleSuitResponseTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: singleSuitResponseTrack.append(Func(suit.loop, 'neutral')) singleSuitResponseTrack = Parallel(singleSuitResponseTrack, bonusTrack) else: groupHitValues = groupHitDict.values() if groupHitValues.count(0) == len(groupHitValues): singleSuitResponseTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) else: singleSuitResponseTrack = Sequence( Wait(tPieHitsSuit - 0.1), Func(MovieUtil.indicateMissed, suit, 1.0)) groupSuitResponseTrack.append(singleSuitResponseTrack) return [toonTrack, pieTrack, soundTrack, groupSuitResponseTrack]
def __getSuitTrack(suit, tContact, tDodge, hp, hpbonus, kbbonus, anim, died, leftSuits, rightSuits, battle, toon, fShowStun, beforeStun = 0.5, afterStun = 1.8, geyser = 0, uberRepeat = 0, revived = 0): if hp > 0: suitTrack = Sequence() sival = ActorInterval(suit, anim) sival = [] if kbbonus > 0 and not geyser: suitPos, suitHpr = battle.getActorPosHpr(suit) suitType = getSuitBodyType(suit.getStyleName()) animTrack = Sequence() animTrack.append(ActorInterval(suit, anim, duration=0.2)) if suitType == 'a': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=2.43)) elif suitType == 'b': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=1.94)) elif suitType == 'c': animTrack.append(ActorInterval(suit, 'slip-forward', startTime=2.58)) animTrack.append(Func(battle.unlureSuit, suit)) moveTrack = Sequence(Wait(0.2), LerpPosInterval(suit, 0.6, pos=suitPos, other=battle)) sival = Parallel(animTrack, moveTrack) elif geyser: suitStartPos = suit.getPos() suitFloat = Point3(0, 0, 14) suitEndPos = Point3(suitStartPos[0] + suitFloat[0], suitStartPos[1] + suitFloat[1], suitStartPos[2] + suitFloat[2]) suitType = getSuitBodyType(suit.getStyleName()) if suitType == 'a': startFlailFrame = 16 endFlailFrame = 16 elif suitType == 'b': startFlailFrame = 15 endFlailFrame = 15 else: startFlailFrame = 15 endFlailFrame = 15 sival = Sequence(ActorInterval(suit, 'slip-backward', playRate=0.5, startFrame=0, endFrame=startFlailFrame - 1), Func(suit.pingpong, 'slip-backward', fromFrame=startFlailFrame, toFrame=endFlailFrame), Wait(0.5), ActorInterval(suit, 'slip-backward', playRate=1.0, startFrame=endFlailFrame)) sUp = LerpPosInterval(suit, 1.1, suitEndPos, startPos=suitStartPos, fluid=1) sDown = LerpPosInterval(suit, 0.6, suitStartPos, startPos=suitEndPos, fluid=1) elif fShowStun == 1: sival = Parallel(ActorInterval(suit, anim), MovieUtil.createSuitStunInterval(suit, beforeStun, afterStun)) else: sival = ActorInterval(suit, anim) showDamage = Func(suit.showHpText, -hp, openEnded=0, attackTrack=SQUIRT_TRACK) updateHealthBar = Func(suit.updateHealthBar, hp) suitTrack.append(Wait(tContact)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) if not geyser: suitTrack.append(sival) elif not uberRepeat: geyserMotion = Sequence(sUp, Wait(0.0), sDown) suitLaunch = Parallel(sival, geyserMotion) suitTrack.append(suitLaunch) else: suitTrack.append(Wait(5.5)) bonusTrack = Sequence(Wait(tContact)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0, attackTrack=SQUIRT_TRACK)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0, attackTrack=SQUIRT_TRACK)) if died != 0: suitTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitTrack.append(Func(suit.loop, 'neutral')) if revived != 0: suitTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle)) return Parallel(suitTrack, bonusTrack) else: return MovieUtil.createSuitDodgeMultitrack(tDodge, suit, leftSuits, rightSuits)
def __throwPie(throw, delay, hitCount, showCannon=1): toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % (toon.getName(), suit.doId, hp, died)) pieName = pieNames[0] hitSuit = hp > 0 button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(ActorInterval(toon, 'wave', duration=2.0)) toonTrack.append(ActorInterval(toon, 'duck')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) buttonTrack = Sequence() buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) soundTrack = __getSoundTrack(level, hitSuit, toon) suitResponseTrack = Sequence() reactIval = Sequence() if showCannon: showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) cannon = loader.loadModel('phase_4/models/minigames/toon_cannon') barrel = cannon.find('**/cannon') barrel.setHpr(0, 90, 0) cannonHolder = render.attachNewNode('CannonHolder') cannon.reparentTo(cannonHolder) cannon.setPos(0, 0, -8.6) cannonHolder.setPos(suit.getPos(render)) cannonHolder.setHpr(suit.getHpr(render)) cannonAttachPoint = barrel.attachNewNode('CannonAttach') kapowAttachPoint = barrel.attachNewNode('kapowAttach') scaleFactor = 1.6 iScale = 1 / scaleFactor barrel.setScale(scaleFactor, 1, scaleFactor) cannonAttachPoint.setScale(iScale, 1, iScale) cannonAttachPoint.setPos(0, 6.7, 0) kapowAttachPoint.setPos(0, -0.5, 1.9) suit.reparentTo(cannonAttachPoint) suit.setPos(0, 0, 0) suit.setHpr(0, -90, 0) suitLevel = suit.getActualLevel() deep = 2.5 + suitLevel * 0.2 suitScale = 0.9 import math suitScale = 0.9 - math.sqrt(suitLevel) * 0.1 sival = [] posInit = cannonHolder.getPos() posFinal = Point3(posInit[0] + 0.0, posInit[1] + 0.0, posInit[2] + 7.0) kapow = globalPropPool.getProp('kapow') kapow.reparentTo(kapowAttachPoint) kapow.hide() kapow.setScale(0.25) kapow.setBillboardPointEye() smoke = loader.loadModel('phase_4/models/props/test_clouds') smoke.reparentTo(cannonAttachPoint) smoke.setScale(0.5) smoke.hide() smoke.setBillboardPointEye() soundBomb = base.loader.loadSfx( 'phase_4/audio/sfx/MG_cannon_fire_alt.mp3') playSoundBomb = SoundInterval(soundBomb, node=cannonHolder) soundFly = base.loader.loadSfx( 'phase_4/audio/sfx/firework_whistle_01.mp3') playSoundFly = SoundInterval(soundFly, node=cannonHolder) soundCannonAdjust = base.loader.loadSfx( 'phase_4/audio/sfx/MG_cannon_adjust.mp3') playSoundCannonAdjust = SoundInterval(soundCannonAdjust, duration=0.6, node=cannonHolder) soundCogPanic = base.loader.loadSfx( 'phase_5/audio/sfx/ENC_cogafssm.mp3') playSoundCogPanic = SoundInterval(soundCogPanic, node=cannonHolder) reactIval = Parallel( ActorInterval(suit, 'pie-small-react'), Sequence( Wait(0.0), LerpPosInterval(cannonHolder, 2.0, posFinal, startPos=posInit, blendType='easeInOut'), Parallel( LerpHprInterval(barrel, 0.6, Point3(0, 45, 0), startHpr=Point3(0, 90, 0), blendType='easeIn'), playSoundCannonAdjust), Wait(2.0), Parallel( LerpHprInterval(barrel, 0.6, Point3(0, 90, 0), startHpr=Point3(0, 45, 0), blendType='easeIn'), playSoundCannonAdjust), LerpPosInterval(cannonHolder, 1.0, posInit, startPos=posFinal, blendType='easeInOut')), Sequence( Wait(0.0), Parallel( ActorInterval(suit, 'flail'), suit.scaleInterval(1.0, suitScale), LerpPosInterval(suit, 0.25, Point3(0, -1.0, 0.0)), Sequence( Wait(0.25), Parallel( playSoundCogPanic, LerpPosInterval(suit, 1.5, Point3(0, -deep, 0.0), blendType='easeIn')))), Wait(2.5), Parallel( playSoundBomb, playSoundFly, Sequence( Func(smoke.show), Parallel( LerpScaleInterval(smoke, 0.5, 3), LerpColorScaleInterval(smoke, 0.5, Vec4(2, 2, 2, 0))), Func(smoke.hide)), Sequence(Func(kapow.show), ActorInterval(kapow, 'kapow'), Func(kapow.hide)), LerpPosInterval(suit, 3.0, Point3(0, 150.0, 0.0)), suit.scaleInterval(3.0, 0.01)), Func(suit.hide))) if hitCount == 1: sival = Sequence( Parallel(reactIval, MovieUtil.createSuitStunInterval(suit, 0.3, 1.3)), Wait(0.0), Func(cannonHolder.remove)) else: sival = reactIval suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) suitResponseTrack.append(sival) bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if kbbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0)) if hpbonus > 0: bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0)) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) return [toonTrack, soundTrack, buttonTrack, suitResponseTrack]
def __throwPie(throw, delay, hitCount, showCannon = 1): #print ("__throwPie %s" % (showCannon)) toon = throw['toon'] hpbonus = throw['hpbonus'] target = throw['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] sidestep = throw['sidestep'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] level = throw['level'] battle = throw['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) notify.debug('toon: %s throws tart at suit: %d for hp: %d died: %d' % \ (toon.getName(), suit.doId, hp, died)) pieName = pieNames[0] hitSuit = (hp > 0) #pie = globalPropPool.getProp(pieName) #pieType = globalPropPool.getPropType(pieName) #pie2 = MovieUtil.copyProp(pie) #pies = [pie, pie2] #hands = toon.getRightHands() #splatName = 'splat-' + pieName #if pieName == 'wedding-cake': # splatName = 'splat-birthday-cake' #splat = globalPropPool.getProp(splatName) #splatType = globalPropPool.getPropType(splatName) button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() # make the toon throw the pie toonTrack = Sequence() toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(ActorInterval(toon, 'wave', duration= 2.0)) toonTrack.append(ActorInterval(toon, 'duck')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) buttonTrack = Sequence() buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale = Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale = button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) soundTrack = __getSoundTrack(level, hitSuit, toon) suitResponseTrack = Sequence() reactIval = Sequence() if showCannon: showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) # If the suit gets knocked back, animate it # No stun animation shown here cannon = loader.loadModel("phase_4/models/minigames/toon_cannon") barrel = cannon.find("**/cannon") barrel.setHpr(0,90,0) cannonHolder = render.attachNewNode('CannonHolder') cannon.reparentTo(cannonHolder) cannon.setPos(0,0,-8.6) cannonHolder.setPos(suit.getPos(render)) cannonHolder.setHpr(suit.getHpr(render)) cannonAttachPoint = barrel.attachNewNode('CannonAttach') kapowAttachPoint = barrel.attachNewNode('kapowAttach') scaleFactor = 1.6 iScale = 1 / scaleFactor barrel.setScale(scaleFactor,1,scaleFactor) cannonAttachPoint.setScale(iScale, 1, iScale) cannonAttachPoint.setPos(0,6.7,0) kapowAttachPoint.setPos(0,-0.5,1.9) suit.reparentTo(cannonAttachPoint) suit.setPos(0,0,0) suit.setHpr(0,-90,0) suitLevel = suit.getActualLevel() deep = 2.5 + (suitLevel * 0.20) #import pdb; pdb.set_trace() #print "Fire anim suit name: %s" % (suit.dna.name) suitScale = 0.90 import math suitScale = 0.9 - (math.sqrt(suitLevel) * 0.10) #if suit.dna.name == 'bf': # suitScale = 0.80 #elif suit.dna.name == 'cr': # suitScale = 0.75 sival = [] # Suit interval of its animation posInit = cannonHolder.getPos() posFinal = Point3(posInit[0] + 0.0, posInit[1] + 0.0, posInit[2] + 7.0) kapow = globalPropPool.getProp('kapow') kapow.reparentTo(kapowAttachPoint) kapow.hide() kapow.setScale(0.25) kapow.setBillboardPointEye() smoke = loader.loadModel( "phase_4/models/props/test_clouds") smoke.reparentTo(cannonAttachPoint) smoke.setScale(.5) smoke.hide() smoke.setBillboardPointEye() soundBomb = base.loadSfx("phase_4/audio/sfx/MG_cannon_fire_alt.mp3") playSoundBomb = SoundInterval(soundBomb,node=cannonHolder) soundFly = base.loadSfx("phase_4/audio/sfx/firework_whistle_01.mp3") playSoundFly = SoundInterval(soundFly,node=cannonHolder) soundCannonAdjust = base.loadSfx("phase_4/audio/sfx/MG_cannon_adjust.mp3") playSoundCannonAdjust = SoundInterval(soundCannonAdjust, duration = 0.6 ,node=cannonHolder) soundCogPanic = base.loadSfx("phase_5/audio/sfx/ENC_cogafssm.mp3") playSoundCogPanic = SoundInterval(soundCogPanic,node=cannonHolder) reactIval = Parallel( ActorInterval(suit, 'pie-small-react'), Sequence( Wait(0.0), LerpPosInterval(cannonHolder, 2.0, posFinal, startPos = posInit, blendType='easeInOut'), Parallel( LerpHprInterval(barrel, 0.6, Point3(0,45,0), startHpr=Point3(0,90,0) , blendType='easeIn'), playSoundCannonAdjust, ), Wait(2.0), Parallel( LerpHprInterval(barrel, 0.6, Point3(0,90,0), startHpr=Point3(0,45,0) , blendType='easeIn'), playSoundCannonAdjust, ), LerpPosInterval(cannonHolder, 1.0, posInit, startPos = posFinal, blendType='easeInOut'), ), Sequence( Wait(0.0), Parallel( ActorInterval(suit, 'flail'), suit.scaleInterval(1.0, suitScale), LerpPosInterval(suit, 0.25, Point3(0,-1.0,0.0)), Sequence( Wait(0.25), Parallel( playSoundCogPanic, LerpPosInterval(suit, 1.50, Point3(0,-deep,0.0), blendType='easeIn'), ), ), ), Wait(2.5), Parallel( playSoundBomb, playSoundFly, Sequence( Func(smoke.show), Parallel(LerpScaleInterval(smoke, .5, 3), LerpColorScaleInterval(smoke, .5, Vec4(2,2,2,0))), Func(smoke.hide), ), Sequence( Func(kapow.show), ActorInterval(kapow, 'kapow'), Func(kapow.hide), ), LerpPosInterval(suit, 3.00, Point3(0,150.0,0.0)), suit.scaleInterval(3.0, 0.01), ), Func(suit.hide), ) ) if (hitCount == 1): sival = Sequence( Parallel( reactIval, MovieUtil.createSuitStunInterval(suit, 0.3, 1.3), ), Wait(0.0), Func(cannonHolder.remove), ) else: sival = reactIval #sival = ActorInterval(suit, 'pie-small-react') suitResponseTrack.append(Wait(delay + tPieHitsSuit)) suitResponseTrack.append(showDamage) suitResponseTrack.append(updateHealthBar) suitResponseTrack.append(sival) # Make a bonus track for any hp bonus bonusTrack = Sequence(Wait(delay + tPieHitsSuit)) if (kbbonus > 0): bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -kbbonus, 2, openEnded=0)) if (hpbonus > 0): bonusTrack.append(Wait(0.75)) bonusTrack.append(Func(suit.showHpText, -hpbonus, 1, openEnded=0)) if 0: if (revived != 0): suitResponseTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle)) elif (died != 0): suitResponseTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitResponseTrack.append(Func(suit.loop, 'neutral')) suitResponseTrack = Parallel(suitResponseTrack, bonusTrack) # Since it's possible for there to be simultaneous throws, we only # want the suit to dodge one time at most. Thus if the suit is # not hit (dodges) and that dodge is not from the first dodge # (which has delay=0) then we don't add another suit reaction. # Otherwise, we add the suit track as normal return [toonTrack, soundTrack, buttonTrack, suitResponseTrack]