def __doWaterGun(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tPistol = 0.0 dPistolScale = 0.5 dPistolHold = 1.8 tSpray = 48.0 / toon.getFrameRate('water-gun') sprayPoseFrame = 63 dSprayScale = 0.1 dSprayHold = 0.3 tContact = tSpray + dSprayScale tSuitDodges = 1.1 tracks = Parallel() toonTrack = Sequence(Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'water-gun'), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, 1.8, toon) tracks.append(soundTrack) pistol = globalPropPool.getProp('water-gun') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) targetPoint = lambda suit = suit: __suitTargetPoint(suit) def getSprayStartPos(pistol = pistol, toon = toon): toon.update(0) joint = pistol.find('**/joint_nozzle') p = joint.getPos(render) return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) pistolPos = Point3(0.28, 0.1, 0.08) pistolHpr = VBase3(85.6, -4.44, 94.43) pistolTrack = Sequence(Func(MovieUtil.showProp, pistol, hand_jointpath0, pistolPos, pistolHpr), LerpScaleInterval(pistol, dPistolScale, pistol.getScale(), startScale=MovieUtil.PNT3_NEARZERO), Wait(tSpray - dPistolScale)) pistolTrack.append(sprayTrack) pistolTrack.append(Wait(dPistolHold)) pistolTrack.append(LerpScaleInterval(pistol, dPistolScale, MovieUtil.PNT3_NEARZERO)) pistolTrack.append(Func(hand_jointpath1.removeNode)) pistolTrack.append(Func(hand_jointpath0.removeNode)) pistolTrack.append(Func(MovieUtil.removeProp, pistol)) tracks.append(pistolTrack) if hp > 0: tracks.append(__getSplashTrack(targetPoint, 0.3, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doFireHose(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = 0.3 tAppearDelay = 0.7 dHoseHold = 0.7 dAnimHold = 5.1 tSprayDelay = 2.8 tSpray = 0.2 dSprayScale = 0.1 dSprayHold = 1.8 tContact = 2.9 tSuitDodges = 2.1 tracks = Parallel() toonTrack = Sequence(Wait(tAppearDelay), Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'firehose'), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, tSprayDelay, toon) tracks.append(soundTrack) hose = globalPropPool.getProp('firehose') hydrant = globalPropPool.getProp('hydrant') hose.reparentTo(hydrant) (hose.pose('firehose', 2), ) hydrantNode = toon.attachNewNode('hydrantNode') hydrantNode.clearTransform(toon.getGeomNode().getChild(0)) hydrantScale = hydrantNode.attachNewNode('hydrantScale') hydrant.reparentTo(hydrantScale) toon.pose('firehose', 30) toon.update(0) torso = toon.getPart('torso', '1000') if toon.style.torso[0] == 'm': hydrant.setPos(torso, 0, 0, -1.85) else: hydrant.setPos(torso, 0, 0, -1.45) hydrant.setPos(0, 0, hydrant.getZ()) base = hydrant.find('**/base') base.setColor(1, 1, 1, 0.5) base.setPos(toon, 0, 0, 0) toon.loop('neutral') targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(hose=hose, toon=toon, targetPoint=targetPoint): toon.update(0) if hose.isEmpty() == 1: if callable(targetPoint): return targetPoint() else: return targetPoint joint = hose.find('**/joint_water_stream') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.55, 0)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = Sequence() sprayTrack.append(Wait(tSprayDelay)) sprayTrack.append( MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale)) tracks.append(sprayTrack) hydrantNode.detachNode() propTrack = Sequence( Func(battle.movie.needRestoreRenderProp, hydrantNode), Func(hydrantNode.reparentTo, toon), LerpScaleInterval(hydrantScale, tAppearDelay * 0.5, Point3(1, 1, 1.4), startScale=Point3(1, 1, 0.01)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.3, Point3(1, 1, 0.8), startScale=Point3(1, 1, 1.4)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.1, Point3(1, 1, 1.2), startScale=Point3(1, 1, 0.8)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.1, Point3(1, 1, 1), startScale=Point3(1, 1, 1.2)), ActorInterval(hose, 'firehose', duration=dAnimHold), Wait(dHoseHold - 0.2), LerpScaleInterval(hydrantScale, 0.2, Point3(1, 1, 0.01), startScale=Point3(1, 1, 1)), Func(MovieUtil.removeProps, [hydrantNode, hose]), Func(battle.movie.clearRenderProp, hydrantNode)) tracks.append(propTrack) if hp > 0: tracks.append( __getSplashTrack(targetPoint, 0.4, 2.7, battle, splashHold=1.5)) # TODO: We added in an unused animation for the cogs reaction where the cog pushes against the gush from a fire hose. # The stream from the fire hose needs to be scaled with the cog's animation - right now it is static. if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-large-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doSeltzerBottle(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tBottle = 0.0 dBottleScale = 0.5 dBottleHold = 3.0 tSpray = 53.0 / toon.getFrameRate('hold-bottle') + 0.05 dSprayScale = 0.2 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tContact - 0.7, 0.0) tracks = Parallel() toonTrack = Sequence(Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'hold-bottle'), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, tSpray - 0.1, toon) tracks.append(soundTrack) bottle = globalPropPool.getProp('bottle') hands = toon.getRightHands() targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(bottle=bottle, toon=toon): toon.update(0) joint = bottle.find('**/joint_toSpray') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.4, 0)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) bottleTrack = Sequence( Func(MovieUtil.showProp, bottle, hand_jointpath0), LerpScaleInterval(bottle, dBottleScale, bottle.getScale(), startScale=MovieUtil.PNT3_NEARZERO), Wait(tSpray - dBottleScale)) bottleTrack.append(sprayTrack) bottleTrack.append(Wait(dBottleHold)) bottleTrack.append( LerpScaleInterval(bottle, dBottleScale, MovieUtil.PNT3_NEARZERO)) bottleTrack.append(Func(hand_jointpath1.removeNode)) bottleTrack.append(Func(hand_jointpath0.removeNode)) bottleTrack.append(Func(MovieUtil.removeProp, bottle)) tracks.append(bottleTrack) if hp > 0: tracks.append( __getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if (hp > 0 or delay <= 0) and suit: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doWaterGlass(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] dGlassHold = 5.0 dGlassScale = 0.5 tSpray = 82.0 / toon.getFrameRate('spit') sprayPoseFrame = 88 dSprayScale = 0.1 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tSpray - 0.5, 0.0) tracks = Parallel() toonTrack = Sequence(ActorInterval(toon, 'spit'), Func(toon.loop, 'neutral')) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, 1.7, toon) tracks.append(soundTrack) glass = globalPropPool.getProp('glass') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) glassTrack = Sequence(Func(MovieUtil.showProp, glass, hand_jointpath0), ActorInterval(glass, 'glass'), Func(hand_jointpath1.removeNode), Func(hand_jointpath0.removeNode), Func(MovieUtil.removeProp, glass)) tracks.append(glassTrack) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(toon=toon): toon.update(0) lod0 = toon.getLOD(toon.getLODNames()[0]) if config.GetBool('want-new-anims', 1): if not lod0.find('**/def_head').isEmpty(): joint = lod0.find('**/def_head') else: joint = lod0.find('**/joint_head') else: joint = lod0.find('**/joint_head') n = hidden.attachNewNode('pointInFrontOfHead') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, 0.3, -0.2)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) tracks.append(Sequence(Wait(tSpray), sprayTrack)) if hp > 0: tracks.append( __getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doFlower(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tTotalFlowerToonAnimationTime = 2.5 tFlowerFirstAppears = 1.0 dFlowerScaleTime = 0.5 tSprayStarts = tTotalFlowerToonAnimationTime dSprayScale = 0.2 dSprayHold = 0.1 tContact = tSprayStarts + dSprayScale tSuitDodges = tTotalFlowerToonAnimationTime tracks = Parallel() button = globalPropPool.getProp('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonTrack = Sequence(Func(MovieUtil.showProps, buttons, hands), Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'pushbutton'), Func(MovieUtil.removeProps, buttons), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) tracks.append( __getSoundTrack(level, hitSuit, tTotalFlowerToonAnimationTime - 0.4, toon)) flower = globalPropPool.getProp('squirting-flower') flower.setScale(1.5, 1.5, 1.5) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(flower=flower): toon.update(0) return flower.getPos(render) sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) lodnames = toon.getLODNames() toonlod0 = toon.getLOD(lodnames[0]) toonlod1 = toon.getLOD(lodnames[1]) if config.GetBool('want-new-anims', 1): if not toonlod0.find('**/def_joint_attachFlower').isEmpty(): flower_joint0 = toonlod0.find('**/def_joint_attachFlower') else: flower_joint0 = toonlod0.find('**/joint_attachFlower') if config.GetBool('want-new-anims', 1): if not toonlod1.find('**/def_joint_attachFlower').isEmpty(): flower_joint1 = toonlod1.find('**/def_joint_attachFlower') else: flower_joint1 = toonlod1.find('**/joint_attachFlower') flower_jointpath0 = flower_joint0.attachNewNode( 'attachFlower-InstanceNode') flower_jointpath1 = flower_jointpath0.instanceTo(flower_joint1) flowerTrack = Sequence( Wait(tFlowerFirstAppears), Func(flower.reparentTo, flower_jointpath0), LerpScaleInterval(flower, dFlowerScaleTime, flower.getScale(), startScale=MovieUtil.PNT3_NEARZERO), Wait(tTotalFlowerToonAnimationTime - dFlowerScaleTime - tFlowerFirstAppears)) if hp <= 0: flowerTrack.append(Wait(0.5)) flowerTrack.append(sprayTrack) flowerTrack.append( LerpScaleInterval(flower, dFlowerScaleTime, MovieUtil.PNT3_NEARZERO)) flowerTrack.append(Func(flower_jointpath1.removeNode)) flowerTrack.append(Func(flower_jointpath0.removeNode)) flowerTrack.append(Func(MovieUtil.removeProp, flower)) tracks.append(flowerTrack) if hp > 0: tracks.append( __getSplashTrack(targetPoint, scale, tSprayStarts + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doFireHose(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = 0.3 tAppearDelay = 0.7 dHoseHold = 0.7 dAnimHold = 5.1 tSprayDelay = 2.8 tSpray = 0.2 dSprayScale = 0.1 dSprayHold = 1.8 tContact = 2.9 tSuitDodges = 2.1 tracks = Parallel() toonTrack = Sequence(Wait(tAppearDelay), Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'firehose'), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, tSprayDelay, toon) tracks.append(soundTrack) hose = globalPropPool.getProp('firehose') hydrant = globalPropPool.getProp('hydrant') hose.reparentTo(hydrant) (hose.pose('firehose', 2),) hydrantNode = toon.attachNewNode('hydrantNode') hydrantNode.clearTransform(toon.getGeomNode().getChild(0)) hydrantScale = hydrantNode.attachNewNode('hydrantScale') hydrant.reparentTo(hydrantScale) toon.pose('firehose', 30) toon.update(0) torso = toon.getPart('torso', '1000') if toon.style.torso[0] == 'm': hydrant.setPos(torso, 0, 0, -1.85) else: hydrant.setPos(torso, 0, 0, -1.45) hydrant.setPos(0, 0, hydrant.getZ()) base = hydrant.find('**/base') base.setColor(1, 1, 1, 0.5) base.setPos(toon, 0, 0, 0) toon.loop('neutral') targetPoint = lambda suit = suit: __suitTargetPoint(suit) def getSprayStartPos(hose = hose, toon = toon, targetPoint = targetPoint): toon.update(0) if hose.isEmpty() == 1: if callable(targetPoint): return targetPoint() else: return targetPoint joint = hose.find('**/joint_water_stream') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.55, 0)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = Sequence() sprayTrack.append(Wait(tSprayDelay)) sprayTrack.append(MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale)) tracks.append(sprayTrack) hydrantNode.detachNode() propTrack = Sequence(Func(battle.movie.needRestoreRenderProp, hydrantNode), Func(hydrantNode.reparentTo, toon), LerpScaleInterval(hydrantScale, tAppearDelay * 0.5, Point3(1, 1, 1.4), startScale=Point3(1, 1, 0.01)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.3, Point3(1, 1, 0.8), startScale=Point3(1, 1, 1.4)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.1, Point3(1, 1, 1.2), startScale=Point3(1, 1, 0.8)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.1, Point3(1, 1, 1), startScale=Point3(1, 1, 1.2)), ActorInterval(hose, 'firehose', duration=dAnimHold), Wait(dHoseHold - 0.2), LerpScaleInterval(hydrantScale, 0.2, Point3(1, 1, 0.01), startScale=Point3(1, 1, 1)), Func(MovieUtil.removeProps, [hydrantNode, hose]), Func(battle.movie.clearRenderProp, hydrantNode)) tracks.append(propTrack) if hp > 0: tracks.append(__getSplashTrack(targetPoint, 0.4, 2.7, battle, splashHold=1.5)) if hp > 0 or delay <= 0: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doSeltzerBottle(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tBottle = 0.0 dBottleScale = 0.5 dBottleHold = 3.0 tSpray = 53.0 / toon.getFrameRate('hold-bottle') + 0.05 dSprayScale = 0.2 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tContact - 0.7, 0.0) tracks = Parallel() toonTrack = Sequence(Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'hold-bottle'), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, tSpray - 0.1, toon) tracks.append(soundTrack) bottle = globalPropPool.getProp('bottle') hands = toon.getRightHands() targetPoint = lambda suit = suit: __suitTargetPoint(suit) def getSprayStartPos(bottle = bottle, toon = toon): toon.update(0) joint = bottle.find('**/joint_toSpray') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.4, 0)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) bottleTrack = Sequence(Func(MovieUtil.showProp, bottle, hand_jointpath0), LerpScaleInterval(bottle, dBottleScale, bottle.getScale(), startScale=MovieUtil.PNT3_NEARZERO), Wait(tSpray - dBottleScale)) bottleTrack.append(sprayTrack) bottleTrack.append(Wait(dBottleHold)) bottleTrack.append(LerpScaleInterval(bottle, dBottleScale, MovieUtil.PNT3_NEARZERO)) bottleTrack.append(Func(hand_jointpath1.removeNode)) bottleTrack.append(Func(hand_jointpath0.removeNode)) bottleTrack.append(Func(MovieUtil.removeProp, bottle)) tracks.append(bottleTrack) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if (hp > 0 or delay <= 0) and suit: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doWaterGlass(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] dGlassHold = 5.0 dGlassScale = 0.5 tSpray = 82.0 / toon.getFrameRate('spit') sprayPoseFrame = 88 dSprayScale = 0.1 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tSpray - 0.5, 0.0) tracks = Parallel() tracks.append(ActorInterval(toon, 'spit')) soundTrack = __getSoundTrack(level, hitSuit, 1.7, toon) tracks.append(soundTrack) glass = globalPropPool.getProp('glass') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) glassTrack = Sequence(Func(MovieUtil.showProp, glass, hand_jointpath0), ActorInterval(glass, 'glass'), Func(hand_jointpath1.removeNode), Func(hand_jointpath0.removeNode), Func(MovieUtil.removeProp, glass)) tracks.append(glassTrack) targetPoint = lambda suit = suit: __suitTargetPoint(suit) def getSprayStartPos(toon = toon): toon.update(0) lod0 = toon.getLOD(toon.getLODNames()[0]) if base.config.GetBool('want-new-anims', 1): if not lod0.find('**/def_head').isEmpty(): joint = lod0.find('**/def_head') else: joint = lod0.find('**/joint_head') else: joint = lod0.find('**/joint_head') n = hidden.attachNewNode('pointInFrontOfHead') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, 0.3, -0.2)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) tracks.append(Sequence(Wait(tSpray), sprayTrack)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doFlower(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tTotalFlowerToonAnimationTime = 2.5 tFlowerFirstAppears = 1.0 dFlowerScaleTime = 0.5 tSprayStarts = tTotalFlowerToonAnimationTime dSprayScale = 0.2 dSprayHold = 0.1 tContact = tSprayStarts + dSprayScale tSuitDodges = tTotalFlowerToonAnimationTime tracks = Parallel() button = globalPropPool.getProp('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonTrack = Sequence(Func(MovieUtil.showProps, buttons, hands), Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'pushbutton'), Func(MovieUtil.removeProps, buttons), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) tracks.append(__getSoundTrack(level, hitSuit, tTotalFlowerToonAnimationTime - 0.4, toon)) flower = globalPropPool.getProp('squirting-flower') flower.setScale(1.5, 1.5, 1.5) targetPoint = lambda suit = suit: __suitTargetPoint(suit) def getSprayStartPos(flower = flower): toon.update(0) return flower.getPos(render) sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) lodnames = toon.getLODNames() toonlod0 = toon.getLOD(lodnames[0]) toonlod1 = toon.getLOD(lodnames[1]) if base.config.GetBool('want-new-anims', 1): if not toonlod0.find('**/def_joint_attachFlower').isEmpty(): flower_joint0 = toonlod0.find('**/def_joint_attachFlower') else: flower_joint0 = toonlod0.find('**/joint_attachFlower') if base.config.GetBool('want-new-anims', 1): if not toonlod1.find('**/def_joint_attachFlower').isEmpty(): flower_joint1 = toonlod1.find('**/def_joint_attachFlower') else: flower_joint1 = toonlod1.find('**/joint_attachFlower') flower_jointpath0 = flower_joint0.attachNewNode('attachFlower-InstanceNode') flower_jointpath1 = flower_jointpath0.instanceTo(flower_joint1) flowerTrack = Sequence(Wait(tFlowerFirstAppears), Func(flower.reparentTo, flower_jointpath0), LerpScaleInterval(flower, dFlowerScaleTime, flower.getScale(), startScale=MovieUtil.PNT3_NEARZERO), Wait(tTotalFlowerToonAnimationTime - dFlowerScaleTime - tFlowerFirstAppears)) if hp <= 0: flowerTrack.append(Wait(0.5)) flowerTrack.append(sprayTrack) flowerTrack.append(LerpScaleInterval(flower, dFlowerScaleTime, MovieUtil.PNT3_NEARZERO)) flowerTrack.append(Func(flower_jointpath1.removeNode)) flowerTrack.append(Func(flower_jointpath0.removeNode)) flowerTrack.append(Func(MovieUtil.removeProp, flower)) tracks.append(flowerTrack) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSprayStarts + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doBalloon(zap, delay, fShowStun): toon = zap['toon'] level = zap['level'] hpbonus = zap['hpbonus'] target = zap['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = zap['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tPistol = 0.0 dPistolScale = 3 dPistolHold = 1.8 tSpray = 3 sprayPoseFrame = 63 dSprayScale = 0.1 dSprayHold = 0.3 tContact = tSpray + dSprayScale tSuitDodges = 1.1 tracks = Parallel() toonTrack = Sequence( Func(toon.headsUp, battle, suitPos), Func(toon.pingpong, 'smooch', fromFrame=40, toFrame=45), Wait(2.5), Func(toon.stop), Func(toon.pingpong, 'cast', fromFrame=30, toFrame=40), Wait(2), Func(toon.stop), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, 0.2, toon) tracks.append(soundTrack) pistol = globalPropPool.getProp('balloon') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(pistol=pistol, toon=toon): toon.update(0) p = pistol.getPos(render) return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) pistolPos = Point3(0.28, 0.1, 0.08) pistolHpr = VBase3(85.6, -4.44, 94.43) pistolTrack = Sequence( Func(MovieUtil.showProp, pistol, hand_jointpath0, pistolPos, pistolHpr), LerpScaleInterval(pistol, dPistolScale, dPistolScale, startScale=MovieUtil.PNT3_NEARZERO), Wait(tSpray - dPistolScale)) pistolTrack.append(sprayTrack) pistolTrack.append(Wait(dPistolHold)) pistolTrack.append( LerpScaleInterval(pistol, 0.4, MovieUtil.PNT3_NEARZERO, dPistolScale)) pistolTrack.append(Func(hand_jointpath1.removeNode)) pistolTrack.append(Func(hand_jointpath0.removeNode)) pistolTrack.append(Func(MovieUtil.removeProp, pistol)) tracks.append(pistolTrack) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'shock', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doFireHose(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = 0.3 tAppearDelay = 0.7 dHoseHold = 0.7 dAnimHold = 5.1 tSprayDelay = 2.8 if toon.isDisguised: tSprayDelay = 2.45 tSpray = 0.2 dSprayScale = 0.1 dSprayHold = 1.8 tContact = 2.9 if toon.isDisguised: tContact = 2.55 tSuitDodges = 2.1 tSprayWait = 2.25 tracks = Parallel() if not toon.isDisguised: toonTrack = Sequence(Wait(tAppearDelay), Func(toon.headsUp, battle, suitPos), ActorInterval(toon, 'firehose'), Func(toon.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) else: if toon.suit.style.body == 'c': playRate = 1 else: playRate = 1.2778 toonTrack = Sequence(ActorInterval(toon.suit, 'throw-paper', playRate=playRate), Func(toon.suit.loop, 'neutral'), Func(toon.setHpr, battle, origHpr)) tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, tSprayDelay, toon) tracks.append(soundTrack) if not toon.isDisguised: hose = globalPropPool.getProp('firehose') hoseValue = True hydrant = globalPropPool.getProp('hydrant') hose.reparentTo(hydrant) (hose.pose('firehose', 2),) hydrantNode = toon.attachNewNode('hydrantNode') hydrantNode.clearTransform(toon.getGeomNode().getChild(0)) hydrantScale = hydrantNode.attachNewNode('hydrantScale') hydrant.reparentTo(hydrantScale) toon.pose('firehose', 30) toon.update(0) torso = toon.getPart('torso', '1000') if toon.style.torso[0] == 'm': hydrant.setPos(torso, 0, 0, -1.85) else: hydrant.setPos(torso, 0, 0, -1.45) hydrant.setPos(0, 0, hydrant.getZ()) base = hydrant.find('**/base') base.setColor(1, 1, 1, 0.5) base.setPos(toon, 0, 0, 0) toon.loop('neutral') else: hose = globalPropPool.getProp('hydrant-cog') hose.reparentTo(toon.suit.getRightHand()) hoseValue = False targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(hose=hose, toon=toon, targetPoint=targetPoint, hoseValue=hoseValue): toon.update(0) if hose.isEmpty() == 1: if callable(targetPoint): return targetPoint() return targetPoint if hoseValue: joint = hose.find('**/joint_water_stream') else: joint = hose.find('**/newHydrant') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.55, 0)) p = n.getPos(render) n.removeNode() del n return p def setHydrantHpr(hose=hose): hose.lookAt(suit) hose.setHpr(hose.getH(battle) + 180, 0, 0) sprayTrack = Sequence() sprayTrack.append(Wait(tSprayDelay)) sprayTrack.append(MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale)) tracks.append(sprayTrack) if not toon.isDisguised: hydrantNode.detachNode() propTrack = Sequence(Func(battle.movie.needRestoreRenderProp, hydrantNode), Func(hydrantNode.reparentTo, toon), LerpScaleInterval(hydrantScale, tAppearDelay * 0.5, Point3(1, 1, 1.4), startScale=Point3(1, 1, 0.01)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.3, Point3(1, 1, 0.8), startScale=Point3(1, 1, 1.4)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.1, Point3(1, 1, 1.2), startScale=Point3(1, 1, 0.8)), LerpScaleInterval(hydrantScale, tAppearDelay * 0.1, Point3(1, 1, 1), startScale=Point3(1, 1, 1.2)), ActorInterval(hose, 'firehose', duration=dAnimHold), Wait(dHoseHold - 0.2), LerpScaleInterval(hydrantScale, 0.2, Point3(1, 1, 0.01), startScale=Point3(1, 1, 1)), Func(MovieUtil.removeProps, [hydrantNode, hose]), Func(battle.movie.clearRenderProp, hydrantNode)) else: propTrack = Sequence(Wait(tSprayWait), Func(hose.wrtReparentTo, battle), Func(hose.setScale, 1), Func(hose.lookAt, battle.getPos() + Point3(toon.getX(battle), 0, 0)), Parallel(LerpPosInterval(hose, tSprayDelay - tSprayWait, (toon.getX(battle), 0, 0), other=battle), LerpHprInterval(hose, 0.2, (-720, 0, 0), other=battle)), Func(setHydrantHpr), Wait(dSprayHold + 0.25), LerpScaleInterval(hose, 1, (0, 0, 0)), Func(battle.movie.clearRenderProp, hose)) tracks.append(propTrack) if hp > 0: tracks.append(__getSplashTrack(targetPoint, 0.4, 2.7, battle, splashHold=1.5)) if hp > 0 or delay <= 0: if config.GetBool('want-retro-mode', False): tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) else: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-large-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks
def __doWaterGlass(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] if toon.isDisguised: pen = globalPropPool.getProp('bluepen') def getPenTip(pen=pen): tip = pen.find('**/joint_toSpray') return tip.getPos(render) hitPoint = lambda suit=suit: __suitTargetPoint(suit) hitSprayTrack = MovieUtil.getSprayTrack(battle, VBase4(WaterSprayColor), getPenTip, hitPoint, 0.2, 0.2, 0.2, horizScale=0.1, vertScale=0.1) toonTrack = Sequence(ActorInterval(toon.suit, 'pen-squirt'), Func(toon.suit.loop, 'neutral')) propTrack = Sequence(Wait(0.01), Func(MovieUtil.showProp, pen, toon.suit.getRightHand(), MovieUtil.PNT3_ZERO), LerpScaleInterval(pen, 0.5, Point3(1.5, 1.5, 1.5)), Wait(1.05)) propTrack.append(hitSprayTrack) propTrack += [LerpScaleInterval(pen, 0.5, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProp, pen)] splashTrack = Sequence() tSpray = 1.3 dSprayScale = 0.5 tContact = tSpray + dSprayScale tSuitDodges = max(tSpray - 0.5, 0.0) if hp > 0: scale = sprayScales[level] splash = globalPropPool.getProp('splash-from-splat') splash.setColor(WaterSprayColor) splash.setScale(0.15) splashTrack = Sequence(Func(battle.movie.needRestoreRenderProp, splash), Wait(1.65), Func(prepSplash, splash, __suitTargetPoint(suit)), ActorInterval(splash, 'splash-from-splat'), Func(MovieUtil.removeProp, splash), Func(battle.movie.clearRenderProp, splash)) soundTrack = getSoundTrack('SA_fountain_pen.ogg', delay=1.6, node=toon) tracks = Parallel(toonTrack, propTrack, soundTrack, splashTrack) if hp > 0 or delay <= 0: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) else: suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] dGlassHold = 5.0 dGlassScale = 0.5 tSpray = 82.0 / toon.getFrameRate('spit') sprayPoseFrame = 88 dSprayScale = 0.1 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tSpray - 0.5, 0.0) toonTrack = Sequence(ActorInterval(toon, 'spit'), Func(toon.loop, 'neutral')) tracks = Parallel() tracks.append(toonTrack) soundTrack = __getSoundTrack(level, hitSuit, 1.7, toon) tracks.append(soundTrack) glass = globalPropPool.getProp('glass') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) glassTrack = Sequence(Func(MovieUtil.showProp, glass, hand_jointpath0), ActorInterval(glass, 'glass'), Func(hand_jointpath1.removeNode), Func(hand_jointpath0.removeNode), Func(MovieUtil.removeProp, glass)) tracks.append(glassTrack) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(toon=toon): toon.update(0) lod0 = toon.getLOD(toon.getLODNames()[0]) if config.GetBool('want-new-anims', 1): if not lod0.find('**/def_head').isEmpty(): joint = lod0.find('**/def_head') else: joint = lod0.find('**/joint_head') else: joint = lod0.find('**/joint_head') n = hidden.attachNewNode('pointInFrontOfHead') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, 0.3, -0.2)) p = n.getPos(render) n.removeNode() del n return p sprayTrack = MovieUtil.getSprayTrack(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) tracks.append(Sequence(Wait(tSpray), sprayTrack)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append(__getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun, revived=revived)) return tracks