Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 9
0
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)
Esempio n. 10
0
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)
Esempio n. 11
0
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)
Esempio n. 12
0
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)
Esempio n. 13
0
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
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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
Esempio n. 17
0
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
Esempio n. 18
0
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)
Esempio n. 20
0
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
Esempio n. 21
0
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
Esempio n. 22
0
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
Esempio n. 23
0
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)