def __healDance(heal, hasInteractivePropHealBonus): """ __healDance(heal) """ toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] # Make a 'sandwich' around the track specific interval track = Sequence(__runToHealSpot(heal)) delay = 3.0 first = 1 targetTrack = Sequence() for target in targets: targetToon = target['toon'] hp = target['hp'] reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus) if (first): targetTrack.append(Wait(delay)) first = 0 targetTrack.append(reactIval) hat = globalPropPool.getProp('hat') hat2 = MovieUtil.copyProp(hat) hats = [hat, hat2] cane = globalPropPool.getProp('cane') cane2 = MovieUtil.copyProp(cane) canes = [cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propTrack = Sequence( Func(MovieUtil.showProps, hats, rightHands, Point3(0.23, 0.09, 0.69), Point3(180, 0, 0)), Func(MovieUtil.showProps, canes, leftHands, Point3(-0.28, 0., 0.14), Point3(0., 0., -150.)), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('happy-dance') - (2. * dScale)), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, hats + canes), ) mtrack = Parallel(propTrack, ActorInterval(toon, 'happy-dance'), __getSoundTrack(level, 0.2, duration=6.4, node=toon), targetTrack) # wait a split second before dancing track.append(Func(toon.loop, 'neutral')) track.append(Wait(0.1)) track.append(mtrack) track.append(__returnToBase(heal)) for target in targets: targetToon = target['toon'] track.append(Func(targetToon.clearChat)) return track
def __healTickle(heal, hasInteractivePropHealBonus): toon = heal["toon"] target = heal["target"]["toon"] hp = heal["target"]["hp"] ineffective = heal["sidestep"] level = heal["level"] track = Sequence(__runToHealSpot(heal)) feather = globalPropPool.getProp("feather") feather2 = MovieUtil.copyProp(feather) feathers = [feather, feather2] hands = toon.getRightHands() def scaleFeathers(feathers, toon=toon, target=target): toon.pose("tickle", 63) toon.update(0) hand = toon.getRightHands()[0] horizDistance = Vec3(hand.getPos(render) - target.getPos(render)) horizDistance.setZ(0) distance = horizDistance.length() if target.style.torso[0] == "s": distance -= 0.5 else: distance -= 0.3 featherLen = 2.4 scale = distance / (featherLen * hand.getScale(render)[0]) for feather in feathers: feather.setScale(scale) tFeatherScaleUp = 0.5 dFeatherScaleUp = 0.5 dFeatherScaleDown = 0.5 featherTrack = Parallel( MovieUtil.getActorIntervals(feathers, "feather"), Sequence( Wait(tFeatherScaleUp), Func(MovieUtil.showProps, feathers, hands), Func(scaleFeathers, feathers), MovieUtil.getScaleIntervals(feathers, dFeatherScaleUp, MovieUtil.PNT3_NEARZERO, feathers[0].getScale), ), Sequence( Wait(toon.getDuration("tickle") - dFeatherScaleDown), MovieUtil.getScaleIntervals(feathers, dFeatherScaleDown, None, MovieUtil.PNT3_NEARZERO), ), ) tHeal = 3.0 mtrack = Parallel( featherTrack, ActorInterval(toon, "tickle"), __getSoundTrack(level, 1, node=toon), Sequence( Wait(tHeal), Func(__healToon, target, hp, ineffective, hasInteractivePropHealBonus), ActorInterval(target, "cringe", startTime=20.0 / target.getFrameRate("cringe")), ), ) track.append(mtrack) track.append(Func(MovieUtil.removeProps, feathers)) track.append(__returnToBase(heal)) track.append(Func(target.clearChat)) return track
def __healDance(heal, hasInteractivePropHealBonus): npcId = 0 if "npcId" in heal: npcId = heal["npcId"] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal["toon"] targets = heal["target"] ineffective = heal["sidestep"] level = heal["level"] if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) delay = 3.0 first = 1 targetTrack = Sequence() for target in targets: targetToon = target["toon"] hp = target["hp"] reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus) if first: targetTrack.append(Wait(delay)) first = 0 targetTrack.append(reactIval) hat = globalPropPool.getProp("hat") hat2 = MovieUtil.copyProp(hat) hats = [hat, hat2] cane = globalPropPool.getProp("cane") cane2 = MovieUtil.copyProp(cane) canes = [cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propTrack = Sequence( Func(MovieUtil.showProps, hats, rightHands, Point3(0.23, 0.09, 0.69), Point3(180, 0, 0)), Func(MovieUtil.showProps, canes, leftHands, Point3(-0.28, 0.0, 0.14), Point3(0.0, 0.0, -150.0)), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration("happy-dance") - 2.0 * dScale), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, hats + canes), ) mtrack = Parallel( propTrack, ActorInterval(toon, "happy-dance"), __getSoundTrack(level, 0.2, duration=6.4, node=toon), targetTrack ) track.append(Func(toon.loop, "neutral")) track.append(Wait(0.1)) track.append(mtrack) if npcId != 0: track.append(MovieNPCSOS.teleportOut(heal, toon)) else: track.append(__returnToBase(heal)) for target in targets: targetToon = target["toon"] track.append(Func(targetToon.clearChat)) return track
def __doSmooch(attack, hp=0): toon = NPCToons.createLocalNPC(attack["npcId"]) if toon == None: return targets = attack["toons"] level = 2 battle = attack["battle"] track = Sequence(teleportIn(attack, toon)) lipstick = globalPropPool.getProp("lipstick") lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickTrack = Sequence( Func(MovieUtil.showProps, lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-118, -10.6, -25.9)), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration("smooch") - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), ) lips = globalPropPool.getProp("lips") dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate("smooch") dThrow = 0.5 def getLipPos(toon=toon): toon.pose("smooch", 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) effectTrack = Sequence() for target in targets: lipcopy = MovieUtil.copyProp(lips) lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lipcopy, render, getLipPos), Func(lipcopy.setBillboardPointWorld), LerpScaleInterval(lipcopy, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval(lipcopy, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lipcopy), ) delay = tThrow + dThrow mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), Sequence(ActorInterval(toon, "smooch")), Sequence(Wait(delay), ActorInterval(target, "conked")), Sequence(Wait(delay), Func(__healToon, target, hp)), ) effectTrack.append(mtrack) effectTrack.append(Func(MovieUtil.removeProps, lipsticks)) track.append(effectTrack) track.append(teleportOut(attack, toon)) track.append(Func(target.clearChat)) return track
def __healTickle(heal, hasInteractivePropHealBonus): toon = heal['toon'] target = heal['target']['toon'] hp = heal['target']['hp'] ineffective = heal['sidestep'] level = heal['level'] track = Sequence(__runToHealSpot(heal)) feather = globalPropPool.getProp('feather') feather2 = MovieUtil.copyProp(feather) feathers = [feather, feather2] hands = toon.getRightHands() def scaleFeathers(feathers, toon=toon, target=target): toon.pose('tickle', 63) toon.update(0) hand = toon.getRightHands()[0] horizDistance = Vec3(hand.getPos(render) - target.getPos(render)) horizDistance.setZ(0) distance = horizDistance.length() if target.style.torso[0] == 's': distance -= 0.5 else: distance -= 0.3 featherLen = 2.4 scale = distance / (featherLen * hand.getScale(render)[0]) for feather in feathers: feather.setScale(scale) tFeatherScaleUp = 0.5 dFeatherScaleUp = 0.5 dFeatherScaleDown = 0.5 featherTrack = Parallel( MovieUtil.getActorIntervals(feathers, 'feather'), Sequence( Wait(tFeatherScaleUp), Func(MovieUtil.showProps, feathers, hands), Func(scaleFeathers, feathers), MovieUtil.getScaleIntervals(feathers, dFeatherScaleUp, MovieUtil.PNT3_NEARZERO, feathers[0].getScale)), Sequence( Wait(toon.getDuration('tickle') - dFeatherScaleDown), MovieUtil.getScaleIntervals(feathers, dFeatherScaleDown, None, MovieUtil.PNT3_NEARZERO))) tHeal = 3.0 mtrack = Parallel( featherTrack, ActorInterval(toon, 'tickle'), __getSoundTrack(level, 1, node=toon), Sequence( Wait(tHeal), Func(__healToon, target, hp, ineffective, hasInteractivePropHealBonus), ActorInterval(target, 'cringe', startTime=20.0 / target.getFrameRate('cringe')))) track.append(mtrack) track.append(Func(MovieUtil.removeProps, feathers)) track.append(__returnToBase(heal)) track.append(Func(target.clearChat)) return track
def __healSmooch(heal, hasInteractivePropHealBonus): toon = heal['toon'] target = heal['target']['toon'] level = heal['level'] hp = heal['target']['hp'] ineffective = heal['sidestep'] track = Sequence(__runToHealSpot(heal)) lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickTrack = Sequence( Func(MovieUtil.showProps, lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-118, -10.6, -25.9)), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, lipsticks)) lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') dThrow = 0.5 def getLipPos(toon=toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lips, render, getLipPos), Func(lips.setBillboardPointWorld), LerpScaleInterval(lips, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval( lips, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lips)) delay = tThrow + dThrow mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), Sequence(ActorInterval(toon, 'smooch'), *__returnToBase(heal)), Sequence(Wait(delay), ActorInterval(target, 'conked'), Func(target.loop, 'neutral')), Sequence( Wait(delay), Func(__healToon, target, hp, ineffective, hasInteractivePropHealBonus))) track.append(mtrack) track.append(Func(target.clearChat)) return track
def __healSmooch(heal, hasInteractivePropHealBonus): toon = heal["toon"] target = heal["target"]["toon"] level = heal["level"] hp = heal["target"]["hp"] ineffective = heal["sidestep"] track = Sequence(__runToHealSpot(heal)) lipstick = globalPropPool.getProp("lipstick") lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickTrack = Sequence( Func(MovieUtil.showProps, lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-118, -10.6, -25.9)), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration("smooch") - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, lipsticks), ) lips = globalPropPool.getProp("lips") dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate("smooch") dThrow = 0.5 def getLipPos(toon=toon): toon.pose("smooch", 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lips, render, getLipPos), Func(lips.setBillboardPointWorld), LerpScaleInterval(lips, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval(lips, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lips), ) delay = tThrow + dThrow mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), Sequence(ActorInterval(toon, "smooch"), *__returnToBase(heal)), Sequence(Wait(delay), ActorInterval(target, "conked"), Func(target.loop, "neutral")), Sequence(Wait(delay), Func(__healToon, target, hp, ineffective, hasInteractivePropHealBonus)), ) track.append(mtrack) track.append(Func(target.clearChat)) return track
def __healJoke(heal, hasInteractivePropHealBonus): npcId = 0 if 'npcId' in heal: npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] jokeIndex = heal['hpbonus'] % len(TTLocalizer.ToonHealJokes) if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) tracks = Parallel() fSpeakPunchline = 58 tSpeakSetup = 0.0 tSpeakPunchline = 3.0 dPunchLine = 3.0 tTargetReact = tSpeakPunchline + 1.0 dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - float( fSpeakPunchline) / toon.getFrameRate('sound') megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [megaphone, megaphone2] hands = toon.getRightHands() dMegaphoneScale = 0.5 tracks.append( Sequence( Wait(tDoSoundAnimation), Func(MovieUtil.showProps, megaphones, hands), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('sound') - 2.0 * dMegaphoneScale), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, megaphones))) tracks.append( Sequence(Wait(tDoSoundAnimation), ActorInterval(toon, 'sound'))) soundTrack = __getSoundTrack(level, 2.0, node=toon) tracks.append(soundTrack) joke = TTLocalizer.ToonHealJokes[jokeIndex] tracks.append( Sequence(Wait(tSpeakSetup), Func(toon.setChatAbsolute, joke[0], CFSpeech | CFTimeout))) tracks.append( Sequence(Wait(tSpeakPunchline), Func(toon.setChatAbsolute, joke[1], CFSpeech | CFTimeout))) reactTrack = Sequence(Wait(tTargetReact)) for target in targets: targetToon = target['toon'] hp = target['hp'] reactTrack.append( Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)) reactTrack.append(Wait(dTargetLaugh)) for target in targets: targetToon = target['toon'] reactTrack.append(Func(targetToon.clearChat)) tracks.append(reactTrack) if npcId != 0: track.append( Sequence(Wait(tRunBack), Func(toon.clearChat), *MovieNPCSOS.teleportOut(heal, toon))) else: tracks.append( Sequence(Wait(tRunBack), Func(toon.clearChat), *__returnToBase(heal))) track.append(tracks) return track
def __healDance(heal): toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] ivals = __runToHealSpot(heal) delay = 3.0 first = 1 targetIvals = [] for target in targets: targetToon = target['toon'] hp = target['hp'] reactIval = FunctionInterval(__healToon, extraArgs = [ targetToon, hp, ineffective]) if first == 1: targetIvals.append((delay, reactIval, PREVIOUS_END)) first = 0 else: targetIvals.append(reactIval) hat = globalPropPool.getProp('hat') hat2 = MovieUtil.copyProp(hat) hats = [ hat, hat2] cane = globalPropPool.getProp('cane') cane2 = MovieUtil.copyProp(cane) canes = [ cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propIvals = [ FunctionInterval(MovieUtil.showProps, extraArgs = [ hats, rightHands, Point3(0.23000000000000001, 0.089999999999999997, 0.68999999999999995), Point3(180, 0, 0)]), FunctionInterval(MovieUtil.showProps, extraArgs = [ canes, leftHands, Point3(-0.28000000000000003, 0.0, 0.14000000000000001), Point3(0.0, 0.0, 150.0)]), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), WaitInterval(toon.getDuration('happy-dance') - 2.0 * dScale), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), FunctionInterval(MovieUtil.removeProps, extraArgs = [ hats + canes])] mtrack = MultiTrack([ Track(propIvals), Track([ ActorInterval(toon, 'happy-dance')]), __getSoundTrack(level, 0.20000000000000001, duration = 6.4000000000000004, node = toon), Track(targetIvals)]) ivals.append(FunctionInterval(toon.loop, extraArgs = [ 'neutral'])) ivals.append(WaitInterval(0.10000000000000001)) ivals.append(mtrack) ivals += __returnToBase(heal) for target in targets: targetToon = target['toon'] ivals.append(FunctionInterval(targetToon.clearChat)) return Track(ivals)
def __healSmooch(heal): toon = heal['toon'] target = heal['target']['toon'] level = heal['level'] hp = heal['target']['hp'] ineffective = heal['sidestep'] ivals = __runToHealSpot(heal) lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [ lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickIvals = [ FunctionInterval(MovieUtil.showProps, extraArgs = [ lipsticks, rightHands, Point3(-0.27000000000000002, -0.23999999999999999, -0.94999999999999996), Point3(-123.69, 33.689999999999998, -50.710000000000001)]), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), WaitInterval(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), FunctionInterval(MovieUtil.removeProps, extraArgs = [ lipsticks])] lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') dThrow = 0.5 def getLipPos(toon = toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) lipsIvals = [ WaitInterval(tLips), FunctionInterval(MovieUtil.showProp, extraArgs = [ lips, render, getLipPos]), LerpScaleInterval(lips, dScale, Point3(3, 3, 3), startScale = MovieUtil.PNT3_NEARZERO), WaitInterval(tThrow - tLips - dScale), LerpPosInterval(lips, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), FunctionInterval(MovieUtil.removeProp, extraArgs = [ lips])] delay = tThrow + dThrow mtrack = MultiTrack([ Track(lipstickIvals), Track(lipsIvals), __getSoundTrack(level, 2, node = toon), Track([ ActorInterval(toon, 'smooch')] + __returnToBase(heal)), Track([ (delay, ActorInterval(target, 'conked'))]), Track([ (delay, FunctionInterval(__healToon, extraArgs = [ target, hp, ineffective]))])]) ivals.append(mtrack) ivals.append(FunctionInterval(target.clearChat)) return Track(ivals)
def __healSmooch(heal): toon = heal['toon'] target = heal['target']['toon'] level = heal['level'] hp = heal['target']['hp'] ineffective = heal['sidestep'] ivals = __runToHealSpot(heal) lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickIvals = [ FunctionInterval(MovieUtil.showProps, extraArgs=[ lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-123.69, 33.69, -50.71) ]), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), WaitInterval(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), FunctionInterval(MovieUtil.removeProps, extraArgs=[lipsticks]) ] lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') dThrow = 0.5 def getLipPos(toon=toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) lipsIvals = [ WaitInterval(tLips), FunctionInterval(MovieUtil.showProp, extraArgs=[lips, render, getLipPos]), LerpScaleInterval(lips, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tThrow - tLips - dScale), LerpPosInterval( lips, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), FunctionInterval(MovieUtil.removeProp, extraArgs=[lips]) ] delay = tThrow + dThrow mtrack = MultiTrack([ Track(lipstickIvals), Track(lipsIvals), __getSoundTrack(level, 2, node=toon), Track([ActorInterval(toon, 'smooch')] + __returnToBase(heal)), Track([(delay, ActorInterval(target, 'conked'))]), Track([(delay, FunctionInterval(__healToon, extraArgs=[target, hp, ineffective]))]) ]) ivals.append(mtrack) ivals.append(FunctionInterval(target.clearChat)) return Track(ivals)
def __healDance(heal): toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] ivals = __runToHealSpot(heal) delay = 3.0 first = 1 targetIvals = [] for target in targets: targetToon = target['toon'] hp = target['hp'] reactIval = FunctionInterval(__healToon, extraArgs=[targetToon, hp, ineffective]) if first == 1: targetIvals.append((delay, reactIval, PREVIOUS_END)) first = 0 else: targetIvals.append(reactIval) hat = globalPropPool.getProp('hat') hat2 = MovieUtil.copyProp(hat) hats = [hat, hat2] cane = globalPropPool.getProp('cane') cane2 = MovieUtil.copyProp(cane) canes = [cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propIvals = [ FunctionInterval(MovieUtil.showProps, extraArgs=[ hats, rightHands, Point3(0.23, 0.09, 0.69), Point3(180, 0, 0) ]), FunctionInterval(MovieUtil.showProps, extraArgs=[ canes, leftHands, Point3(-0.28, 0.0, 0.14), Point3(0.0, 0.0, 150.0) ]), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), WaitInterval(toon.getDuration('happy-dance') - 2.0 * dScale), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), FunctionInterval(MovieUtil.removeProps, extraArgs=[hats + canes]) ] mtrack = MultiTrack([ Track(propIvals), Track([ActorInterval(toon, 'happy-dance')]), __getSoundTrack(level, 0.2, duration=6.4, node=toon), Track(targetIvals) ]) ivals.append(FunctionInterval(toon.loop, extraArgs=['neutral'])) ivals.append(WaitInterval(0.1)) ivals.append(mtrack) ivals += __returnToBase(heal) for target in targets: targetToon = target['toon'] ivals.append(FunctionInterval(targetToon.clearChat)) return Track(ivals)
def __healJoke(heal, hasInteractivePropHealBonus): npcId = 0 if heal.has_key('npcId'): npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal['toon'] if miniserver: targets = heal['target'] else: targets = heal['target']['toon'] ineffective = heal['sidestep'] level = heal['level'] if miniserver: jokeIndex = heal['hpbonus'] % len(HealJokes.toonHealJokes) else: jokeIndex = random.choice(xrange(len(HealJokes.toonHealJokes))) if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: if not miniserver: track = Sequence() else: track = Sequence(__runToHealSpot(heal)) tracks = Parallel() fSpeakPunchline = 58 if miniserver or npcId != 0: tSpeakSetup = 0.0 miniDelay = 1.0 msgType = CFSpeech | CFTimeout else: tSpeakSetup = 0.1 miniDelay = 1.5 msgType = CFThought tSpeakPunchline = 3.0 dPunchLine = 3.0 tTargetReact = tSpeakPunchline + miniDelay dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - float( fSpeakPunchline) / toon.getFrameRate('sound') megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [megaphone, megaphone2] hands = toon.getRightHands() if toon.isDisguised: for m in megaphones: m.setPos(-0.3, 0, 0.2) m.setR(90) if toon.suit.style.body != 'a': m.setHpr(0, -180, 230) hands = toon.suit.getRightHands() dMegaphoneScale = 0.5 if miniserver or npcId != 0: tracks.append( Sequence( Wait(tDoSoundAnimation), Func(MovieUtil.showProps, megaphones, hands), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('sound') - 2.0 * dMegaphoneScale), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, megaphones))) if toon.isDisguised: if toon.suit.style.body == 'a': anim = 'glower' waitTime = 1.6 operaNo = 1.0 else: anim = 'pen-squirt' waitTime = 1.4 operaNo = 1.2 suitIval = Sequence() if toon.suit.style.body == 'c': suitIval.append(Func(toon.suit.pose, anim, 0)) else: suitIval.append(Func(toon.suit.loop, 'neutral')) suitIval.append(Wait(tDoSoundAnimation)) suitIval.append(Wait(waitTime)) suitIval.append(ActorInterval(toon.suit, anim)) tracks.append(suitIval) else: tracks.append( Sequence(Func(toon.loop, 'neutral'), Wait(tDoSoundAnimation), ActorInterval(toon, 'sound'))) else: if toon.isDisguised: pass else: tracks.append( Sequence( ActorInterval(targets, 'think', playRate=0.638, startFrame=0, endFrame=46), ActorInterval(targets, 'think', startFrame=46), Func(toon.loop, 'neutral'))) soundTrack = __getSoundTrack(level, 2.0, node=toon) tracks.append(soundTrack) joke = HealJokes.toonHealJokes[jokeIndex] tracks.append( Sequence(Wait(tSpeakSetup), Func(toon.setChatAbsolute, joke[0], msgType))) tracks.append( Sequence(Wait(tSpeakPunchline), Func(toon.setChatAbsolute, joke[1], msgType))) reactTrack = Sequence(Wait(tTargetReact)) if miniserver: for target in targets: targetToon = target['toon'] hp = target['hp'] reactTrack.append( Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)) else: hp = heal['target']['hp'] reactTrack.append( Func(__healToon, targets, hp, ineffective, hasInteractivePropHealBonus)) reactTrack.append(Wait(dTargetLaugh)) if miniserver: for target in targets: targetToon = target['toon'] reactTrack.append(Func(targetToon.clearChat)) else: reactTrack.append(Func(targets.clearChat)) tracks.append(reactTrack) if npcId != 0: track.append( Sequence(Wait(tRunBack), Func(toon.clearChat), *MovieNPCSOS.teleportOut(heal, toon))) else: if not miniserver: tracks.append(Func(toon.clearChat)) else: tracks.append( Sequence(Wait(tRunBack), Func(toon.clearChat), *__returnToBase(heal))) track.append(tracks) return track
def __healJoke(heal): toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] jokeIndex = heal['hpbonus'] % len(HealJokes.toonHealJokes) ivals = __runToHealSpot(heal) tracks = [] fSpeakPunchline = 58 tSpeakSetup = 0.0 tSpeakPunchline = 3.0 dPunchLine = 3.0 tTargetReact = tSpeakPunchline + 1.0 dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - float( fSpeakPunchline) / toon.getFrameRate('sound') megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [megaphone, megaphone2] hands = toon.getRightHands() dMegaphoneScale = 0.5 tracks.append( Track([ WaitInterval(tDoSoundAnimation), FunctionInterval(MovieUtil.showProps, extraArgs=[megaphones, hands]), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), WaitInterval(toon.getDuration('sound') - 2.0 * dMegaphoneScale), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), FunctionInterval(MovieUtil.removeProps, extraArgs=[megaphones]) ])) tracks.append( Track([WaitInterval(tDoSoundAnimation), ActorInterval(toon, 'sound')])) soundTrack = __getSoundTrack(level, 2.0, node=toon) tracks.append(soundTrack) joke = HealJokes.toonHealJokes[jokeIndex] tracks.append( Track([ WaitInterval(tSpeakSetup), FunctionInterval(toon.setChatAbsolute, extraArgs=[joke[0], CFSpeech | CFTimeout]) ])) tracks.append( Track([ WaitInterval(tSpeakPunchline), FunctionInterval(toon.setChatAbsolute, extraArgs=[joke[1], CFSpeech | CFTimeout]) ])) reactIvals = [WaitInterval(tTargetReact)] for target in targets: targetToon = target['toon'] hp = target['hp'] reactIvals.append( FunctionInterval(__healToon, extraArgs=[targetToon, hp, ineffective])) reactIvals.append(WaitInterval(dTargetLaugh)) for target in targets: targetToon = target['toon'] reactIvals.append(FunctionInterval(targetToon.clearChat)) tracks.append(Track(reactIvals)) tracks.append( Track([WaitInterval(tRunBack), FunctionInterval(toon.clearChat)] + __returnToBase(heal))) ivals.append(MultiTrack(tracks)) return Track(ivals)
def __healJoke(heal): toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] jokeIndex = heal['hpbonus'] % len(HealJokes.toonHealJokes) ivals = __runToHealSpot(heal) tracks = [] fSpeakPunchline = 58 tSpeakSetup = 0.0 tSpeakPunchline = 3.0 dPunchLine = 3.0 tTargetReact = tSpeakPunchline + 1.0 dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - float(fSpeakPunchline) / toon.getFrameRate('sound') megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [ megaphone, megaphone2] hands = toon.getRightHands() dMegaphoneScale = 0.5 tracks.append(Track([ WaitInterval(tDoSoundAnimation), FunctionInterval(MovieUtil.showProps, extraArgs = [ megaphones, hands]), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), WaitInterval(toon.getDuration('sound') - 2.0 * dMegaphoneScale), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), FunctionInterval(MovieUtil.removeProps, extraArgs = [ megaphones])])) tracks.append(Track([ WaitInterval(tDoSoundAnimation), ActorInterval(toon, 'sound')])) soundTrack = __getSoundTrack(level, 2.0, node = toon) tracks.append(soundTrack) joke = HealJokes.toonHealJokes[jokeIndex] tracks.append(Track([ WaitInterval(tSpeakSetup), FunctionInterval(toon.setChatAbsolute, extraArgs = [ joke[0], CFSpeech | CFTimeout])])) tracks.append(Track([ WaitInterval(tSpeakPunchline), FunctionInterval(toon.setChatAbsolute, extraArgs = [ joke[1], CFSpeech | CFTimeout])])) reactIvals = [ WaitInterval(tTargetReact)] for target in targets: targetToon = target['toon'] hp = target['hp'] reactIvals.append(FunctionInterval(__healToon, extraArgs = [ targetToon, hp, ineffective])) reactIvals.append(WaitInterval(dTargetLaugh)) for target in targets: targetToon = target['toon'] reactIvals.append(FunctionInterval(targetToon.clearChat)) tracks.append(Track(reactIvals)) tracks.append(Track([ WaitInterval(tRunBack), FunctionInterval(toon.clearChat)] + __returnToBase(heal))) ivals.append(MultiTrack(tracks)) return Track(ivals)
def __healDance(heal, hasInteractivePropHealBonus): npcId = 0 if heal.has_key('npcId'): npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return None else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) delay = 3.0 first = 1 targetTrack = Sequence() for target in targets: targetToon = target['toon'] hp = target['hp'] reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus) if first: targetTrack.append(Wait(delay)) first = 0 targetTrack.append(reactIval) hat = globalPropPool.getProp('hat') hat2 = MovieUtil.copyProp(hat) hats = [ hat, hat2] cane = globalPropPool.getProp('cane') cane2 = MovieUtil.copyProp(cane) canes = [ cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propTrack = Sequence(Func(MovieUtil.showProps, hats, rightHands, Point3(0.23000000000000001, 0.089999999999999997, 0.68999999999999995), Point3(180, 0, 0)), Func(MovieUtil.showProps, canes, leftHands, Point3(-0.28000000000000003, 0.0, 0.14000000000000001), Point3(0.0, 0.0, -150.0)), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('happy-dance') - 2.0 * dScale), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, hats + canes)) mtrack = Parallel(propTrack, ActorInterval(toon, 'happy-dance'), __getSoundTrack(level, 0.20000000000000001, duration = 6.4000000000000004, node = toon), targetTrack) track.append(Func(toon.loop, 'neutral')) track.append(Wait(0.10000000000000001)) track.append(mtrack) if npcId != 0: track.append(MovieNPCSOS.teleportOut(heal, toon)) else: track.append(__returnToBase(heal)) for target in targets: targetToon = target['toon'] track.append(Func(targetToon.clearChat)) return track
def __healDance(heal, hasInteractivePropHealBonus): npcId = 0 if 'npcId' in heal: npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) delay = 3.0 first = 1 targetTrack = Sequence() for target in targets: targetToon = target['toon'] hp = target['hp'] reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus) if first: targetTrack.append(Wait(delay)) first = 0 targetTrack.append(reactIval) hat = globalPropPool.getProp('hat') hat2 = MovieUtil.copyProp(hat) hats = [hat, hat2] cane = globalPropPool.getProp('cane') cane2 = MovieUtil.copyProp(cane) canes = [cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propTrack = Sequence( Func(MovieUtil.showProps, hats, rightHands, Point3(0.23, 0.09, 0.69), Point3(180, 0, 0)), Func(MovieUtil.showProps, canes, leftHands, Point3(-0.28, 0.0, 0.14), Point3(0.0, 0.0, -150.0)), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('happy-dance') - 2.0 * dScale), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, hats + canes)) mtrack = Parallel(propTrack, ActorInterval(toon, 'happy-dance'), __getSoundTrack(level, 0.2, duration=6.4, node=toon), targetTrack) track.append(Func(toon.loop, 'neutral')) track.append(Wait(0.1)) track.append(mtrack) if npcId != 0: track.append(MovieNPCSOS.teleportOut(heal, toon)) else: track.append(__returnToBase(heal)) for target in targets: targetToon = target['toon'] track.append(Func(targetToon.clearChat)) return track
def __healSmooch(heal, hasInteractivePropHealBonus): toon = heal['toon'] target = heal['target']['toon'] level = heal['level'] hp = heal['target']['hp'] ineffective = heal['sidestep'] battle = heal['battle'] if miniserver: track = Sequence(__runToHealSpot(heal)) else: track = Sequence() lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() pos = Point3(-0.27, -0.24, -0.95) hpr = Point3(-118, -10.6, -25.9) if toon.isDisguised: rightHands = toon.suit.getRightHands() pos = Point3(-0.5, -0.24, -1.2) dScale = 0.5 lipstickTrack = Sequence( Func(MovieUtil.showProps, lipsticks, rightHands, pos, hpr), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, lipsticks)) lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') if miniserver: dThrow = 0.5 else: dThrow = 1.0 def getLipPos(toon=toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) if miniserver: lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lips, render, getLipPos), Func(lips.setBillboardPointWorld), LerpScaleInterval(lips, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval( lips, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lips)) else: lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lips, render, getLipPos), Func(lips.setBillboardPointWorld), LerpScaleInterval(lips, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval(lips, dThrow / 2, Point3(0, 0, target.getHeight()), other=battle, blendType='easeOut'), LerpPosInterval(lips, dThrow / 2, Point3(target.getPos() + Point3(0, 0, target.getHeight())), blendType='easeIn'), Func(MovieUtil.removeProp, lips)) delay = tThrow + dThrow jacob = Sequence(ActorInterval(toon, 'smooch')) if toon.isDisguised: rate = 1.5 start = 60 if toon.suit.style.body == 'c': rate = 1.0 start = 50 jacob = Sequence( ActorInterval(toon.suit, 'finger-wag', playRate=0.5, endFrame=16), Wait(3), ActorInterval(toon.suit, 'throw-paper', playRate=rate, startFrame=start)) paul = ActorInterval(target, 'conked') if target.isDisguised: paul = ActorInterval(target.suit, 'pie-small-react') if miniserver: jacob.append(Sequence(*__returnToBase(heal))) mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), jacob, Sequence(Wait(delay), paul), Sequence( Wait(delay), Func(__healToon, target, hp, ineffective, hasInteractivePropHealBonus))) else: mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), jacob, Sequence(Wait(delay), paul), Sequence( Wait(delay), Func(__healToon, target, hp, ineffective, hasInteractivePropHealBonus))) track.append(mtrack) track.append(Func(target.clearChat)) if not miniserver: track.append(Func(toon.loop, 'neutral')) if toon.isDisguised: track.append(Func(toon.suit.loop, 'neutral')) return track
def __healTickle(heal): toon = heal['toon'] target = heal['target']['toon'] hp = heal['target']['hp'] ineffective = heal['sidestep'] level = heal['level'] ivals = __runToHealSpot(heal) feather = globalPropPool.getProp('feather') feather2 = MovieUtil.copyProp(feather) feathers = [feather, feather2] hands = toon.getRightHands() def scaleFeathers(feathers, toon=toon, target=target): toon.pose('tickle', 63) toon.update(0) hand = toon.getRightHands()[0] horizDistance = Vec3(hand.getPos(render) - target.getPos(render)) horizDistance.setZ(0) distance = horizDistance.length() if target.style.torso[0] == 's': distance -= 0.5 else: distance -= 0.29999999999999999 featherLen = 2.3999999999999999 scale = distance / featherLen * hand.getScale(render)[0] for feather in feathers: feather.setScale(scale) tFeatherScaleUp = 0.5 dFeatherScaleUp = 0.5 dFeatherScaleDown = 0.5 featherTrack = MultiTrack([ MovieUtil.getActorIntervals(feathers, 'feather'), Track([ WaitInterval(tFeatherScaleUp), FunctionInterval(MovieUtil.showProps, extraArgs=[feathers, hands]), FunctionInterval(scaleFeathers, extraArgs=[feathers]), MovieUtil.getScaleIntervals(feathers, dFeatherScaleUp, MovieUtil.PNT3_NEARZERO, feathers[0].getScale) ]), Track([ WaitInterval(toon.getDuration('tickle') - dFeatherScaleDown), MovieUtil.getScaleIntervals(feathers, dFeatherScaleDown, None, MovieUtil.PNT3_NEARZERO) ]) ]) tHeal = 3.0 mtrack = MultiTrack([ featherTrack, Track([ActorInterval(toon, 'tickle')]), __getSoundTrack(level, 1, node=toon), Track([(tHeal, FunctionInterval(__healToon, extraArgs=[target, hp, ineffective])), ActorInterval(target, 'cringe', startTime=20.0 / target.getFrameRate('cringe'))]) ]) ivals.append(mtrack) ivals.append(FunctionInterval(MovieUtil.removeProps, extraArgs=[feathers])) ivals += __returnToBase(heal) ivals.append(FunctionInterval(target.clearChat)) return Track(ivals)
def __healJoke(heal, hasInteractivePropHealBonus): npcId = 0 if heal.has_key('npcId'): npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return None else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] jokeIndex = heal['hpbonus'] % len(HealJokes.toonHealJokes) if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) tracks = Parallel() fSpeakPunchline = 58 tSpeakSetup = 0.0 tSpeakPunchline = 3.0 dPunchLine = 3.0 tTargetReact = tSpeakPunchline + 1.0 dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - float(fSpeakPunchline) / toon.getFrameRate('sound') megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [ megaphone, megaphone2] hands = toon.getRightHands() dMegaphoneScale = 0.5 tracks.append(Sequence(Wait(tDoSoundAnimation), Func(MovieUtil.showProps, megaphones, hands), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('sound') - 2.0 * dMegaphoneScale), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, megaphones))) tracks.append(Sequence(Wait(tDoSoundAnimation), ActorInterval(toon, 'sound'))) soundTrack = __getSoundTrack(level, 2.0, node = toon) tracks.append(soundTrack) joke = HealJokes.toonHealJokes[jokeIndex] tracks.append(Sequence(Wait(tSpeakSetup), Func(toon.setChatAbsolute, joke[0], CFSpeech | CFTimeout))) tracks.append(Sequence(Wait(tSpeakPunchline), Func(toon.setChatAbsolute, joke[1], CFSpeech | CFTimeout))) reactTrack = Sequence(Wait(tTargetReact)) for target in targets: targetToon = target['toon'] hp = target['hp'] reactTrack.append(Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)) reactTrack.append(Wait(dTargetLaugh)) for target in targets: targetToon = target['toon'] reactTrack.append(Func(targetToon.clearChat)) tracks.append(reactTrack) if npcId != 0: track.append(Sequence(Wait(tRunBack), Func(toon.clearChat), *MovieNPCSOS.teleportOut(heal, toon))) else: tracks.append(Sequence(Wait(tRunBack), Func(toon.clearChat), *__returnToBase(heal))) track.append(tracks) return track
def __healJoke(heal, hasInteractivePropHealBonus): """ __healJoke(heal) """ toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] jokeIndex = heal['hpbonus'] % len(HealJokes.toonHealJokes) # Make a 'sandwich' around the track specific interval track = Sequence(__runToHealSpot(heal)) # start a multitrack tracks = Parallel() # frame fSpeakPunchline = 58 tSpeakSetup = 0. tSpeakPunchline = 3. dPunchLine = 3. tTargetReact = tSpeakPunchline + 1. dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - \ (float(fSpeakPunchline) / toon.getFrameRate('sound')) # megaphone track megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [megaphone, megaphone2] hands = toon.getRightHands() dMegaphoneScale = 0.5 tracks.append( Sequence( Wait(tDoSoundAnimation), Func(MovieUtil.showProps, megaphones, hands), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('sound') - (2.0 * dMegaphoneScale)), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, megaphones))) # toon track tracks.append( Sequence(Wait(tDoSoundAnimation), ActorInterval(toon, 'sound'))) # add sound soundTrack = __getSoundTrack(level, 2.0, node=toon) tracks.append(soundTrack) assert (jokeIndex < len(HealJokes.toonHealJokes)) joke = HealJokes.toonHealJokes[jokeIndex] # the set-up tracks.append( Sequence( Wait(tSpeakSetup), Func(toon.setChatAbsolute, joke[0], CFSpeech | CFTimeout), )) # the punchline tracks.append( Sequence( Wait(tSpeakPunchline), Func(toon.setChatAbsolute, joke[1], CFSpeech | CFTimeout), )) # do the target toon reaction(s) reactTrack = Sequence(Wait(tTargetReact), ) for target in targets: targetToon = target['toon'] hp = target['hp'] reactTrack.append( Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)) reactTrack.append(Wait(dTargetLaugh)) for target in targets: targetToon = target['toon'] reactTrack.append(Func(targetToon.clearChat)) tracks.append(reactTrack) tracks.append( Sequence(Wait(tRunBack), Func(toon.clearChat), *__returnToBase(heal))) # lay down the multitrack track.append(tracks) return track
def __doSmooch(attack, hp=0): toon = NPCToons.createLocalNPC(attack['npcId']) if toon == None: return targets = attack['toons'] level = 2 battle = attack['battle'] track = Sequence(teleportIn(attack, toon)) lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickTrack = Sequence( Func(MovieUtil.showProps, lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-118, -10.6, -25.9)), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO)) lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') dThrow = 0.5 def getLipPos(toon=toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) effectTrack = Sequence() for target in targets: lipcopy = MovieUtil.copyProp(lips) lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lipcopy, render, getLipPos), Func(lipcopy.setBillboardPointWorld), LerpScaleInterval(lipcopy, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval( lipcopy, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lipcopy)) delay = tThrow + dThrow mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), Sequence(ActorInterval(toon, 'smooch')), Sequence(Wait(delay), ActorInterval(target, 'conked')), Sequence(Wait(delay), Func(__healToon, target, hp))) effectTrack.append(mtrack) effectTrack.append(Func(MovieUtil.removeProps, lipsticks)) track.append(effectTrack) track.append(teleportOut(attack, toon)) track.append(Func(target.clearChat)) return track
def __healTickle(heal): toon = heal['toon'] target = heal['target']['toon'] hp = heal['target']['hp'] ineffective = heal['sidestep'] level = heal['level'] ivals = __runToHealSpot(heal) feather = globalPropPool.getProp('feather') feather2 = MovieUtil.copyProp(feather) feathers = [ feather, feather2] hands = toon.getRightHands() def scaleFeathers(feathers, toon = toon, target = target): toon.pose('tickle', 63) toon.update(0) hand = toon.getRightHands()[0] horizDistance = Vec3(hand.getPos(render) - target.getPos(render)) horizDistance.setZ(0) distance = horizDistance.length() if target.style.torso[0] == 's': distance -= 0.5 else: distance -= 0.29999999999999999 featherLen = 2.3999999999999999 scale = distance / featherLen * hand.getScale(render)[0] for feather in feathers: feather.setScale(scale) tFeatherScaleUp = 0.5 dFeatherScaleUp = 0.5 dFeatherScaleDown = 0.5 featherTrack = MultiTrack([ MovieUtil.getActorIntervals(feathers, 'feather'), Track([ WaitInterval(tFeatherScaleUp), FunctionInterval(MovieUtil.showProps, extraArgs = [ feathers, hands]), FunctionInterval(scaleFeathers, extraArgs = [ feathers]), MovieUtil.getScaleIntervals(feathers, dFeatherScaleUp, MovieUtil.PNT3_NEARZERO, feathers[0].getScale)]), Track([ WaitInterval(toon.getDuration('tickle') - dFeatherScaleDown), MovieUtil.getScaleIntervals(feathers, dFeatherScaleDown, None, MovieUtil.PNT3_NEARZERO)])]) tHeal = 3.0 mtrack = MultiTrack([ featherTrack, Track([ ActorInterval(toon, 'tickle')]), __getSoundTrack(level, 1, node = toon), Track([ (tHeal, FunctionInterval(__healToon, extraArgs = [ target, hp, ineffective])), ActorInterval(target, 'cringe', startTime = 20.0 / target.getFrameRate('cringe'))])]) ivals.append(mtrack) ivals.append(FunctionInterval(MovieUtil.removeProps, extraArgs = [ feathers])) ivals += __returnToBase(heal) ivals.append(FunctionInterval(target.clearChat)) return Track(ivals)