def placeTrap(trapProp, suit, battle=battle, trapName=trapName): if not trapProp or trapProp.isEmpty(): return trapProp.wrtReparentTo(suit) trapProp.show() if trapName == 'rake': trapProp.setPos(0, MovieUtil.SUIT_TRAP_RAKE_DISTANCE, 0) trapProp.setHpr(Point3(0, 270, 0)) trapProp.setScale(Point3(0.7, 0.7, 0.7)) rakeOffset = MovieUtil.getSuitRakeOffset(suit) trapProp.setY(trapProp.getY() + rakeOffset) elif trapName == 'banana': trapProp.setHpr(0, 0, 0) trapProp.setPos(0, MovieUtil.SUIT_TRAP_DISTANCE, -0.35) trapProp.pose(trapName, trapProp.getNumFrames(trapName) - 1) elif trapName == 'marbles': trapProp.setHpr(Point3(94, 0, 0)) trapProp.setPos(0, MovieUtil.SUIT_TRAP_MARBLES_DISTANCE, 0) trapProp.pose(trapName, trapProp.getNumFrames(trapName) - 1) elif trapName == 'tnt': trapProp.setHpr(0, 90, 0) trapProp.setPos(0, MovieUtil.SUIT_TRAP_TNT_DISTANCE, 0.4) else: notify.warning( 'placeTrap() - Incorrect trap: %s placed on a suit' % trapName)
def __createSuitDamageTrack(battle, suit, hp, lure, trapProp): if trapProp is None or trapProp.isEmpty(): return Func(suit.loop, 'lured') trapProp.wrtReparentTo(battle) trapTrack = ToontownBattleGlobals.TRAP_TRACK trapLevel = suit.battleTrap trapTrackNames = ToontownBattleGlobals.AvProps[trapTrack] trapName = trapTrackNames[trapLevel] result = Sequence() def reparentTrap(trapProp=trapProp, battle=battle): if trapProp and not trapProp.isEmpty(): trapProp.wrtReparentTo(battle) result.append(Func(reparentTrap)) parent = battle if suit.battleTrapIsFresh == 1: if trapName == 'quicksand' or trapName == 'trapdoor': trapProp.hide() trapProp.reparentTo(suit) trapProp.setPos(Point3(0, MovieUtil.SUIT_TRAP_DISTANCE, 0)) trapProp.setHpr(Point3(0, 0, 0)) trapProp.wrtReparentTo(battle) elif trapName == 'rake': trapProp.hide() trapProp.reparentTo(suit) trapProp.setPos(0, MovieUtil.SUIT_TRAP_RAKE_DISTANCE, 0) trapProp.setHpr(Point3(0, 270, 0)) trapProp.setScale(Point3(0.7, 0.7, 0.7)) rakeOffset = MovieUtil.getSuitRakeOffset(suit) trapProp.setY(trapProp.getY() + rakeOffset) else: parent = render if trapName == 'banana': slidePos = trapProp.getPos(parent) slidePos.setY(slidePos.getY() - 5.1) moveTrack = Sequence( Wait(0.1), LerpPosInterval(trapProp, 0.1, slidePos, other=battle)) animTrack = Sequence( ActorInterval(trapProp, 'banana', startTime=3.1), Wait(1.1), LerpScaleInterval(trapProp, 1, Point3(0.01, 0.01, 0.01))) suitTrack = ActorInterval(suit, 'slip-backward') damageTrack = Sequence(Wait(0.5), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) if random.random() <= 0.01: soundTrack = Sequence( Parallel( SoundInterval(globalBattleSoundCache.getSound( 'AA_pie_throw_only.ogg'), node=suit), Func( base.playSfx, globalBattleSoundCache.getSound( 'AA_WHATAREYOUDOING.ogg'))), SoundInterval(globalBattleSoundCache.getSound( 'Toon_bodyfall_synergy.ogg'), node=suit)) else: soundTrack = Sequence( SoundInterval( globalBattleSoundCache.getSound('AA_pie_throw_only.ogg'), node=suit), SoundInterval(globalBattleSoundCache.getSound( 'Toon_bodyfall_synergy.ogg'), node=suit)) result.append( Parallel(moveTrack, animTrack, suitTrack, damageTrack, soundTrack)) elif trapName == 'rake' or trapName == 'rake-react': hpr = trapProp.getHpr(parent) upHpr = Vec3(hpr[0], 179.9999, hpr[2]) bounce1Hpr = Vec3(hpr[0], 120, hpr[2]) bounce2Hpr = Vec3(hpr[0], 100, hpr[2]) rakeTrack = Sequence( Wait(0.5), LerpHprInterval(trapProp, 0.1, upHpr, startHpr=hpr), Wait(0.7), LerpHprInterval(trapProp, 0.4, hpr, startHpr=upHpr), LerpHprInterval(trapProp, 0.15, bounce1Hpr, startHpr=hpr), LerpHprInterval(trapProp, 0.05, hpr, startHpr=bounce1Hpr), LerpHprInterval(trapProp, 0.15, bounce2Hpr, startHpr=hpr), LerpHprInterval(trapProp, 0.05, hpr, startHpr=bounce2Hpr), Wait(0.2), LerpScaleInterval(trapProp, 0.2, Point3(0.01, 0.01, 0.01))) rakeAnimDuration = 3.125 suitTrack = ActorInterval(suit, 'rake-react', duration=rakeAnimDuration) damageTrack = Sequence(Wait(0.5), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) soundTrack = getSoundTrack('TL_step_on_rake.ogg', delay=0.6, node=suit) result.append(Parallel(rakeTrack, suitTrack, damageTrack, soundTrack)) elif trapName == 'marbles': slidePos = trapProp.getPos(parent) slidePos.setY(slidePos.getY() - 6.5) moveTrack = Sequence( Wait(0.1), LerpPosInterval(trapProp, 0.8, slidePos, other=battle), Wait(1.1), LerpScaleInterval(trapProp, 1, Point3(0.01, 0.01, 0.01))) animTrack = ActorInterval(trapProp, 'marbles', startTime=3.1) suitTrack = ActorInterval(suit, 'slip-backward') damageTrack = Sequence(Wait(0.5), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) soundTrack = Sequence( SoundInterval( globalBattleSoundCache.getSound('AA_pie_throw_only.ogg'), duration=0.55, node=suit), SoundInterval( globalBattleSoundCache.getSound('Toon_bodyfall_synergy.ogg'), node=suit)) result.append( Parallel(moveTrack, animTrack, suitTrack, damageTrack, soundTrack)) elif trapName == 'quicksand': sinkPos1 = trapProp.getPos(battle) sinkPos2 = trapProp.getPos(battle) dropPos = trapProp.getPos(battle) landPos = trapProp.getPos(battle) sinkPos1.setZ(sinkPos1.getZ() - 3.1) sinkPos2.setZ(sinkPos2.getZ() - 9.1) dropPos.setZ(dropPos.getZ() + 15) if base.config.GetBool('want-new-cogs', 0): nameTag = suit.find('**/def_nameTag') else: nameTag = suit.find('**/joint_nameTag') trapTrack = Sequence( Wait(2.4), LerpScaleInterval(trapProp, 0.8, Point3(0.01, 0.01, 0.01))) moveTrack = Sequence( Wait(0.9), LerpPosInterval(suit, 0.9, sinkPos1, other=battle), LerpPosInterval(suit, 0.4, sinkPos2, other=battle), Func(suit.setPos, battle, dropPos), Func(suit.wrtReparentTo, hidden), Wait(1.1), Func(suit.wrtReparentTo, battle), LerpPosInterval(suit, 0.3, landPos, other=battle)) animTrack = Sequence(ActorInterval(suit, 'flail'), ActorInterval(suit, 'flail', startTime=1.1), Wait(0.7), ActorInterval(suit, 'slip-forward', duration=2.1)) damageTrack = Sequence(Wait(3.5), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) soundTrack = Sequence( Wait(0.7), SoundInterval(globalBattleSoundCache.getSound('TL_quicksand.ogg'), node=suit), Wait(0.1), SoundInterval( globalBattleSoundCache.getSound('Toon_bodyfall_synergy.ogg'), node=suit)) result.append( Parallel(trapTrack, moveTrack, animTrack, damageTrack, soundTrack)) elif trapName == 'trapdoor': sinkPos = trapProp.getPos(battle) dropPos = trapProp.getPos(battle) landPos = trapProp.getPos(battle) sinkPos.setZ(sinkPos.getZ() - 9.1) dropPos.setZ(dropPos.getZ() + 15) trapTrack = Sequence( Wait(2.4), LerpScaleInterval(trapProp, 0.8, Point3(0.01, 0.01, 0.01))) moveTrack = Sequence(Wait(2.2), LerpPosInterval(suit, 0.4, sinkPos, other=battle), Func(suit.setPos, battle, dropPos), Func(suit.wrtReparentTo, hidden), Wait(1.6), Func(suit.wrtReparentTo, battle), LerpPosInterval(suit, 0.3, landPos, other=battle)) animTrack = Sequence( getSplicedLerpAnimsTrack(suit, 'flail', 0.7, 0.25), Func(trapProp.setColor, Vec4(0, 0, 0, 1)), ActorInterval(suit, 'flail', startTime=0.7, endTime=0), ActorInterval(suit, 'neutral', duration=0.5), ActorInterval(suit, 'flail', startTime=1.1), Wait(1.1), ActorInterval(suit, 'slip-forward', duration=2.1)) damageTrack = Sequence(Wait(3.5), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) soundTrack = Sequence( Wait(0.8), SoundInterval(globalBattleSoundCache.getSound('TL_trap_door.ogg'), node=suit), Wait(0.8), SoundInterval( globalBattleSoundCache.getSound('Toon_bodyfall_synergy.ogg'), node=suit)) result.append( Parallel(trapTrack, moveTrack, animTrack, damageTrack, soundTrack)) elif trapName == 'tnt': tntTrack = ActorInterval(trapProp, 'tnt') explosionTrack = Sequence( Wait(2.3), createTNTExplosionTrack(battle, trapProp=trapProp, relativeTo=parent)) flyPos = suit.getPos() flyPos.setZ(suit.getZ() + 17) dropPos = suit.getPos() oldCamera = base.camera.getPos() oldHPR = base.camera.getHpr() suitTrack = Sequence(ActorInterval(suit, 'flail', duration=0.7)) suitTrack.append( ActorInterval(suit, 'flail', startTime=0.7, endTime=0.0)) suitTrack.append(ActorInterval(suit, 'neutral', duration=0.4)) suitTrack.append( ActorInterval(suit, 'flail', startTime=0.6, endTime=0.7)) if base.localAvatar in battle.activeToons: suitTrack.append( Parallel( base.camera.posHprInterval(0.4, Point3(oldCamera[0], oldCamera[1], oldCamera[2]), Point3(0, 30, 0), blendType='easeInOut'), Func(battle.movie.needRestoreColor), Func(suit.setColorScale, Vec4(0.2, 0.2, 0.2, 1)), Func(trapProp.reparentTo, hidden), ActorInterval(suit, 'flail', startTime=0.9, duration=0.4, endTime=1.3), LerpPosInterval(suit, 0.3, flyPos))) else: suitTrack.append( Parallel(Func(battle.movie.needRestoreColor), Func(suit.setColorScale, Vec4(0.2, 0.2, 0.2, 1)), Func(trapProp.reparentTo, hidden), ActorInterval(suit, 'flail', startTime=0.9), LerpPosInterval(suit, 0.3, flyPos))) if suit.maxHP <= 42: suitTrack.append(midairSuitExplodeTrack(suit, battle)) damageTrack = Sequence(Wait(2.4), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) explosionSound = base.loadSfx( 'phase_3.5/audio/sfx/ENC_cogfall_apart.ogg') soundTrack = Sequence( SoundInterval( globalBattleSoundCache.getSound('TL_dynamite.ogg'), duration=2.0, node=suit), SoundInterval(explosionSound, duration=0.6, node=suit)) else: if base.localAvatar in battle.activeToons: suitTrack.append( Parallel( Sequence( Wait(0.3), base.camera.posHprInterval(0.5, Point3(*oldCamera), Point3(*oldHPR), blendType='easeInOut')), ActorInterval(suit, 'slip-backward', playRate=1), LerpPosInterval(suit, 0.7, dropPos))) else: suitTrack.append( Parallel(ActorInterval(suit, 'slip-backward', playRate=1), LerpPosInterval(suit, 0.7, dropPos))) suitTrack.append(Func(suit.clearColorScale)) suitTrack.append(Func(trapProp.sparksEffect.cleanup)) suitTrack.append(Func(battle.movie.clearRestoreColor)) damageTrack = Sequence(Wait(2.3), Func(suit.showHpText, -hp, openEnded=0), Func(suit.updateHealthBar, hp)) explosionSound = base.loadSfx( 'phase_3.5/audio/sfx/ENC_cogfall_apart.ogg') soundTrack = Sequence( SoundInterval( globalBattleSoundCache.getSound('TL_dynamite.ogg'), duration=2.0, node=suit), SoundInterval(explosionSound, duration=0.6, node=suit)) result.append( Parallel(tntTrack, suitTrack, damageTrack, explosionTrack, soundTrack)) if suit.maxHP <= 42: suit.battleTrapProp = trapProp result.append(Func(battle.removeTrap, suit, True)) return result elif trapName == 'traintrack': trainInterval = createIncomingTrainInterval(battle, suit, hp, lure, trapProp) result.append(trainInterval) else: notify.warning('unknown trapName: %s detected on suit: %s' % (trapName, suit)) suit.battleTrapProp = trapProp result.append(Func(battle.removeTrap, suit, True)) result.append(Func(battle.unlureSuit, suit)) result.append(__createSuitResetPosTrack(suit, battle)) result.append(Func(suit.loop, 'neutral')) if trapName == 'traintrack': result.append(Func(MovieUtil.removeProp, trapProp)) return result