def __healDive(heal, hasInteractivePropHealBonus):
    splash = Splash.Splash(render)
    splash.reparentTo(render)
    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 = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target['toon']
        hp = target['hp']
        reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)
        if first == 1:
            targetTrack.append(Wait(delay))
            first = 0
        
        targetTrack.append(reactIval)
    
    thisBattle = heal['battle']
    toonsInBattle = thisBattle.toons
    glass = globalPropPool.getProp('glass')
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp('ladder')
    placeNode = NodePath('lookNode')
    diveProps = [
        glass,
        ladder]
    ladderScale = toon.getBodyScale() / 0.66000000000000003
    scaleUpPoint = Point3(0.5, 0.5, 0.45000000000000001) * ladderScale
    basePos = toon.getPos()
    glassOffset = Point3(0, 1.1000000000000001, 0.20000000000000001)
    glassToonOffset = Point3(0, 1.2, 0.20000000000000001)
    splashOffset = Point3(0, 1.0, 0.40000000000000002)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(toon, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(toon, add3(ladderOffset, ladderToonSep))
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)
    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    LookGlass = render.getRelativePoint(toon, glassOffset)
    splash.setPos(splashOffset)
    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))
    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()
    propTrack = Sequence(Func(MovieUtil.showProp, glass, render, glassPos), Func(MovieUtil.showProp, ladder, render, ladderPos), Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)), Func(placeNode.setPos, lookBase), LerpScaleInterval(ladder, ladderGrowTime, scaleUpPoint, startScale = MovieUtil.PNT3_NEARZERO), Func(placeNode.setPos, lookTop), Wait(2.1000000000000001), MovieCamera.toonGroupHighShot(None, 0), Wait(2.1000000000000001), Func(placeNode.setPos, LookGlass), Wait(0.40000000000000002), MovieCamera.allGroupLowShot(None, 0), Wait(1.8), LerpScaleInterval(ladder, ladderGrowTime, MovieUtil.PNT3_NEARZERO, startScale = scaleUpPoint), Func(MovieUtil.removeProps, diveProps))
    mtrack = Parallel(propTrack, __getSoundTrack(level, 0.59999999999999998, duration = 9.0, node = toon), Sequence(Parallel(Sequence(ActorInterval(toon, 'walk', loop = 0, duration = walkToLadderTime), ActorInterval(toon, 'neutral', loop = 0, duration = 0.10000000000000001)), LerpPosInterval(toon, walkToLadderTime, climbladderPos), Wait(ladderGrowTime)), Parallel(ActorInterval(toon, 'climb', loop = 0, endFrame = 116), Sequence(Wait(4.5999999999999996), Func(toonNode.setTransparency, 1), LerpColorScaleInterval(toonNode, 0.25, VBase4(1, 1.0, 1, 0.0), blendType = 'easeInOut'), LerpScaleInterval(toonNode, 0.01, 0.10000000000000001, startScale = toonscale), LerpHprInterval(toon, 0.01, toonFacing), LerpPosInterval(toon, 0.0, glassToonPos), Func(toonNode.clearTransparency), Func(toonNode.clearColorScale), Parallel(ActorInterval(toon, 'swim', loop = 1, startTime = 0.0, endTime = 1.0), Wait(1.0))), Sequence(Wait(4.5999999999999996), Func(splash.play), Wait(1.0), Func(splash.destroy))), Wait(0.5), Parallel(ActorInterval(toon, 'jump', loop = 0, startTime = 0.20000000000000001), LerpScaleInterval(toonNode, 0.5, toonscale, startScale = 0.10000000000000001), Func(stopLook, toonsInBattle))), targetTrack)
    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
Beispiel #2
0
def __healDive(heal, hasInteractivePropHealBonus):
    """ __healJuggle(heal)
    """
    # Determine if this is an NPC heal
    #print("heal Dive Anim")
    # Splash object for when toon hits the water
    splash = Splash.Splash(render)  #remember to destroy
    splash.reparentTo(render)
    #import pdb; pdb.set_trace()
    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']

    #print("toonScale %s" % (toon.getBodyScale()))

    # Make a 'sandwich' around the track specific interval
    if (npcId != 0):
        track = Sequence(MovieNPCSOS.teleportIn(heal, toon))
    else:
        track = Sequence(__runToHealSpot(heal))
    delay = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target['toon']
        #hp = min(targetToon.hp + target['hp'], targetToon.maxHp)
        hp = target['hp']
        reactIval = Func(__healToon, targetToon, hp, ineffective,
                         hasInteractivePropHealBonus)
        if (first == 1):
            targetTrack.append(Wait(delay))
            first = 0

        targetTrack.append(reactIval)

    thisBattle = heal['battle']
    toonsInBattle = thisBattle.toons

    glass = globalPropPool.getProp('glass')
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp('ladder')  #MovieUtil.copyProp(cube)
    #placeNode = MovieUtil.copyProp(glass)
    placeNode = NodePath("lookNode")
    diveProps = [glass, ladder]  #, placeNode]
    ladderScale = (toon.getBodyScale() / 0.66)
    scaleUpPoint = Point3(.50, .5, .45) * ladderScale
    basePos = toon.getPos()

    glassOffset = Point3(0, 1.1, 0.2)
    glassToonOffset = Point3(0, 1.2, 0.2)
    splashOffset = Point3(0, 1.0, 0.4)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(
        toon, glassOffset)  #add3(basePos, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(
        toon, add3(ladderOffset, ladderToonSep))  #add3(basePos, ladderOffset)
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)

    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    LookGlass = render.getRelativePoint(toon, glassOffset)

    splash.setPos(splashOffset)

    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    #nameTagNode =  NodePath(toon.nametag.getNametag3d())
    #nameTagNode =  NodePath(toon.getHeadParts()[0])
    #placeNode =  NodePath("lookNode")

    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    #placeNode.attachNewNode("lookNode")
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))

    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()

    #for someToon in toonsInBattle:
    #    someToon.startStareAt(nameTagNode, Point3(0,0,3))
    #toonsLook(toonsInBattle, placeNode, Point3(0,0,3))

    propTrack = Sequence(
        #Func(MovieUtil.showProps, cubes, hips),
        Func(MovieUtil.showProp, glass, render, glassPos),
        Func(MovieUtil.showProp, ladder, render, ladderPos),
        Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
        Func(placeNode.setPos, lookBase),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          scaleUpPoint,
                          startScale=MovieUtil.PNT3_NEARZERO),
        Func(placeNode.setPos, lookTop),
        Wait(2.1),
        MovieCamera.toonGroupHighShot(None, 0),
        Wait(2.1),
        Func(placeNode.setPos, LookGlass),
        Wait(0.4),
        MovieCamera.allGroupLowShot(None, 0),
        Wait(1.8),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          MovieUtil.PNT3_NEARZERO,
                          startScale=scaleUpPoint),
        Func(MovieUtil.removeProps, diveProps),
        #Func(MovieUtil.removeProps, placeNode),
    )

    mtrack = Parallel(
        propTrack,
        __getSoundTrack(level, 0.6, duration=9.0, node=toon),
        Sequence(
            Parallel(
                Sequence(
                    ActorInterval(toon,
                                  'walk',
                                  loop=0,
                                  duration=walkToLadderTime),
                    ActorInterval(toon, 'neutral', loop=0, duration=0.1),
                ),
                LerpPosInterval(toon, walkToLadderTime, climbladderPos),
                Wait(ladderGrowTime),
            ),
            Parallel(
                ActorInterval(toon, 'climb', loop=0, endFrame=116),
                Sequence(
                    Wait(4.6),
                    #LerpScaleInterval(toon, diveTime*0.1, 0.1),
                    #Func(toon.doToonAlphaColorScale, VBase4(1, 0.0, 1, 0.0), 0.5),
                    Func(toonNode.setTransparency, 1),
                    LerpColorScaleInterval(toonNode,
                                           0.25,
                                           VBase4(1, 1.0, 1, 0.0),
                                           blendType='easeInOut'),
                    LerpScaleInterval(toonNode,
                                      0.01,
                                      0.1,
                                      startScale=toonscale),
                    LerpHprInterval(toon, 0.01, toonFacing),
                    LerpPosInterval(toon, 0.0, glassToonPos),
                    Func(toonNode.clearTransparency),
                    Func(toonNode.clearColorScale),
                    Parallel(
                        ActorInterval(toon,
                                      'swim',
                                      loop=1,
                                      startTime=0.0,
                                      endTime=1.00),
                        Wait(1.0),
                    ),
                    #
                ),
                Sequence(
                    Wait(4.6),
                    Func(splash.play),
                    Wait(1.0),
                    Func(splash.destroy),
                ),
            ),
            #ActorInterval(toon, 'walk', loop = 1, duration=walkToLadderTime),
            #ActorInterval(toon, 'swim', loop = 1, duration=climbTime),
            #ActorInterval(toon, 'swim', loop = 1, duration=diveTime*1.0),
            #LerpScaleInterval(toon, diveTime*0.1, 0.1),
            Wait(0.5),
            Parallel(
                #LerpHprInterval(toon, 0.1, Point3(0,0,0)),
                ActorInterval(toon, 'jump', loop=0, startTime=0.2),
                LerpScaleInterval(toonNode, 0.5, toonscale, startScale=0.1),
                Func(stopLook, toonsInBattle),
            )),
        targetTrack)
    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 __healDive(heal, hasInteractivePropHealBonus):
    splash = Splash.Splash(render)
    splash.reparentTo(render)
    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 = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target['toon']
        hp = target['hp']
        reactIval = Func(__healToon, targetToon, hp, ineffective,
                         hasInteractivePropHealBonus)
        if first == 1:
            targetTrack.append(Wait(delay))
            first = 0
        targetTrack.append(reactIval)

    thisBattle = heal['battle']
    toonsInBattle = thisBattle.toons
    glass = globalPropPool.getProp('glass')
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp('ladder')
    placeNode = NodePath('lookNode')
    diveProps = [glass, ladder]
    ladderScale = toon.getBodyScale() / 0.66
    scaleUpPoint = Point3(0.5, 0.5, 0.45) * ladderScale
    basePos = toon.getPos()
    glassOffset = Point3(0, 1.1, 0.2)
    glassToonOffset = Point3(0, 1.2, 0.2)
    splashOffset = Point3(0, 1.0, 0.4)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(toon, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(toon,
                                             add3(ladderOffset, ladderToonSep))
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)
    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    LookGlass = render.getRelativePoint(toon, glassOffset)
    splash.setPos(splashOffset)
    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))
    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()
    propTrack = Sequence(
        Func(MovieUtil.showProp, glass, render, glassPos),
        Func(MovieUtil.showProp, ladder, render, ladderPos),
        Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
        Func(placeNode.setPos, lookBase),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          scaleUpPoint,
                          startScale=MovieUtil.PNT3_NEARZERO),
        Func(placeNode.setPos, lookTop), Wait(2.1),
        MovieCamera.toonGroupHighShot(None, 0), Wait(2.1),
        Func(placeNode.setPos, LookGlass), Wait(0.4),
        MovieCamera.allGroupLowShot(None, 0), Wait(1.8),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          MovieUtil.PNT3_NEARZERO,
                          startScale=scaleUpPoint),
        Func(MovieUtil.removeProps, diveProps))
    mtrack = Parallel(
        propTrack, __getSoundTrack(level, 0.6, duration=9.0, node=toon),
        Sequence(
            Parallel(
                Sequence(
                    ActorInterval(toon,
                                  'walk',
                                  loop=0,
                                  duration=walkToLadderTime),
                    ActorInterval(toon, 'neutral', loop=0, duration=0.1)),
                LerpPosInterval(toon, walkToLadderTime, climbladderPos),
                Wait(ladderGrowTime)),
            Parallel(
                ActorInterval(toon, 'climb', loop=0, endFrame=116),
                Sequence(
                    Wait(4.6), Func(toonNode.setTransparency, 1),
                    LerpColorScaleInterval(toonNode,
                                           0.25,
                                           VBase4(1, 1.0, 1, 0.0),
                                           blendType='easeInOut'),
                    LerpScaleInterval(toonNode,
                                      0.01,
                                      0.1,
                                      startScale=toonscale),
                    LerpHprInterval(toon, 0.01, toonFacing),
                    LerpPosInterval(toon, 0.0, glassToonPos),
                    Func(toonNode.clearTransparency),
                    Func(toonNode.clearColorScale),
                    Parallel(
                        ActorInterval(toon,
                                      'swim',
                                      loop=1,
                                      startTime=0.0,
                                      endTime=1.0), Wait(1.0))),
                Sequence(Wait(4.6), Func(splash.play), Wait(1.0),
                         Func(splash.destroy))), Wait(0.5),
            Parallel(
                ActorInterval(toon, 'jump', loop=0, startTime=0.2),
                LerpScaleInterval(toonNode, 0.5, toonscale, startScale=0.1),
                Func(stopLook, toonsInBattle))), targetTrack)
    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
Beispiel #4
0
def __healDive(heal, hasInteractivePropHealBonus):
    splash = Splash.Splash(render)
    splash.reparentTo(render)
    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 = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target["toon"]
        hp = target["hp"]
        reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)
        if first == 1:
            targetTrack.append(Wait(delay))
            first = 0
        targetTrack.append(reactIval)

    thisBattle = heal["battle"]
    toonsInBattle = thisBattle.toons
    glass = globalPropPool.getProp("glass")
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp("ladder")
    placeNode = NodePath("lookNode")
    diveProps = [glass, ladder]
    ladderScale = toon.getBodyScale() / 0.66
    scaleUpPoint = Point3(0.5, 0.5, 0.45) * ladderScale
    basePos = toon.getPos()
    glassOffset = Point3(0, 1.1, 0.2)
    glassToonOffset = Point3(0, 1.2, 0.2)
    splashOffset = Point3(0, 1.0, 0.4)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(toon, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(toon, add3(ladderOffset, ladderToonSep))
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)
    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    lookGlass = render.getRelativePoint(toon, glassOffset)
    splash.setPos(splashOffset)
    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))
    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()
    if base.localAvatar in thisBattle.activeToons:
        propTrack = Sequence(
            Func(MovieUtil.showProp, glass, render, glassPos),
            Func(MovieUtil.showProp, ladder, render, ladderPos),
            Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
            Func(placeNode.setPos, lookBase),
            LerpScaleInterval(ladder, ladderGrowTime, scaleUpPoint, startScale=MovieUtil.PNT3_NEARZERO),
            Func(placeNode.setPos, lookTop),
            Wait(2.1),
            MovieCamera.toonGroupHighShot(None, 0),
            Wait(2.1),
            Func(placeNode.setPos, lookGlass),
            Wait(0.4),
            MovieCamera.allGroupLowShot(None, 0),
            Wait(1.8),
            LerpScaleInterval(ladder, ladderGrowTime, MovieUtil.PNT3_NEARZERO, startScale=scaleUpPoint),
            Func(MovieUtil.removeProps, diveProps),
        )
    else:
        propTrack = Sequence(
            Func(MovieUtil.showProp, glass, render, glassPos),
            Func(MovieUtil.showProp, ladder, render, ladderPos),
            Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
            Func(placeNode.setPos, lookBase),
            LerpScaleInterval(ladder, ladderGrowTime, scaleUpPoint, startScale=MovieUtil.PNT3_NEARZERO),
            Func(placeNode.setPos, lookTop),
            Wait(4.2),
            Func(placeNode.setPos, lookGlass),
            Wait(2.2),
            LerpScaleInterval(ladder, ladderGrowTime, MovieUtil.PNT3_NEARZERO, startScale=scaleUpPoint),
            Func(MovieUtil.removeProps, diveProps),
        )
    mtrack = Parallel(
        propTrack,
        __getSoundTrack(level, 0.6, duration=9.0, node=toon),
        Sequence(
            Parallel(
                Sequence(
                    ActorInterval(toon, "walk", loop=0, duration=walkToLadderTime),
                    ActorInterval(toon, "neutral", loop=0, duration=0.1),
                ),
                LerpPosInterval(toon, walkToLadderTime, climbladderPos),
                Wait(ladderGrowTime),
            ),
            Parallel(
                ActorInterval(toon, "climb", loop=0, endFrame=116),
                Sequence(
                    Wait(4.6),
                    Func(toonNode.setTransparency, 1),
                    LerpColorScaleInterval(toonNode, 0.25, VBase4(1, 1.0, 1, 0.0), blendType="easeInOut"),
                    LerpScaleInterval(toonNode, 0.01, 0.1, startScale=toonscale),
                    LerpHprInterval(toon, 0.01, toonFacing),
                    LerpPosInterval(toon, 0.0, glassToonPos),
                    Func(toonNode.clearTransparency),
                    Func(toonNode.clearColorScale),
                    Parallel(ActorInterval(toon, "swim", loop=1, startTime=0.0, endTime=1.0), Wait(1.0)),
                ),
                Sequence(Wait(4.6), Func(splash.play), Wait(1.0), Func(splash.destroy)),
            ),
            Wait(0.5),
            Parallel(
                ActorInterval(toon, "jump", loop=0, startTime=0.2),
                LerpScaleInterval(toonNode, 0.5, toonscale, startScale=0.1),
                Func(stopLook, toonsInBattle),
            ),
        ),
        targetTrack,
    )
    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