def __createSuitTrack(drop, delay, level, alreadyDodged, alreadyTeased, target, npcs): toon = drop['toon'] if drop.has_key('npc'): toon = drop['npc'] battle = drop['battle'] majorObject = level >= 3 suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] hpbonus = drop['hpbonus'] if hp > 0: suitTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded = 0) updateHealthBar = Func(suit.updateHealthBar, hp) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitTrack.append(Wait(delay + tObjectAppears)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) suitGettingHit = Parallel(suitReact) if level == UBER_GAG_LEVEL_INDEX: gotHitSound = globalBattleSoundCache.getSound('AA_drop_boat_cog.mp3') suitGettingHit.append(SoundInterval(gotHitSound, node = toon)) suitTrack.append(suitGettingHit) bonusTrack = None if hpbonus > 0: bonusTrack = Sequence(Wait(delay + tObjectAppears + 0.75), Func(suit.showHpText, -hpbonus, 1, openEnded = 0)) if revived != 0: suitTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs)) elif died != 0: suitTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs)) else: suitTrack.append(Func(suit.loop, 'neutral')) if bonusTrack != None: suitTrack = Parallel(suitTrack, bonusTrack) elif kbbonus == 0: suitTrack = Sequence(Wait(delay + tObjectAppears), Func(MovieUtil.indicateMissed, suit, 0.59999999999999998), Func(suit.loop, 'neutral')) elif alreadyDodged > 0: return None if level >= 3: if alreadyTeased > 0: return None else: suitTrack = MovieUtil.createSuitTeaseMultiTrack(suit, delay = delay + tObjectAppears) else: suitTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) return suitTrack
def __createSuitTrack(drop, delay, level, alreadyDodged, alreadyTeased, target, npcs): toon = drop["toon"] if drop.has_key("npc"): toon = drop["npc"] battle = drop["battle"] majorObject = level >= 3 suit = target["suit"] hp = target["hp"] hitSuit = hp > 0 died = target["died"] revived = target["revived"] leftSuits = target["leftSuits"] rightSuits = target["rightSuits"] kbbonus = target["kbbonus"] hpbonus = drop["hpbonus"] if hp > 0: suitTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) if majorObject: anim = "flatten" else: anim = "drop-react" suitReact = ActorInterval(suit, anim) suitTrack.append(Wait(delay + tObjectAppears)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) suitGettingHit = Parallel(suitReact) if level == UBER_GAG_LEVEL_INDEX: gotHitSound = globalBattleSoundCache.getSound("AA_drop_boat_cog.mp3") suitGettingHit.append(SoundInterval(gotHitSound, node=toon)) suitTrack.append(suitGettingHit) bonusTrack = None if hpbonus > 0: bonusTrack = Sequence(Wait(delay + tObjectAppears + 0.75), Func(suit.showHpText, -hpbonus, 1, openEnded=0)) if revived != 0: suitTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs)) elif died != 0: suitTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs)) else: suitTrack.append(Func(suit.loop, "neutral")) if bonusTrack != None: suitTrack = Parallel(suitTrack, bonusTrack) elif kbbonus == 0: suitTrack = Sequence( Wait(delay + tObjectAppears), Func(MovieUtil.indicateMissed, suit, 0.6), Func(suit.loop, "neutral") ) else: if alreadyDodged > 0: return if level >= 3: if alreadyTeased > 0: return else: suitTrack = MovieUtil.createSuitTeaseMultiTrack(suit, delay=delay + tObjectAppears) else: suitTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) return suitTrack
def __createSuitTrack(drop, delay, level, alreadyDodged, alreadyTeased, target, npcs): toon = drop['toon'] if (drop.has_key('npc')): toon = drop['npc'] battle = drop['battle'] majorObject = (level >= 3) suit = target['suit'] hp = target['hp'] hitSuit = (hp > 0) died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] hpbonus = drop['hpbonus'] # 4 options for a suit in a drop attack: # 1) It takes damage and reacts (hp > 0) # 2) It is lured, thus drop misses so suit does nothing (kbbonus == 0). This is # detected using a hack in the kbbonus. There is no actual kickback bonus involved # for drops, but if this kbbonus value is set to 0 instead of -1 (in the battle # calculator), then we've specified that the suit is lured # 3) The suit dodges and is reacting to the first drop to dodge, detected when the # variable alreadyDodged == 0 # 4) The suit would dodge but is already dodging first drop, detected when the # variable alreadyDodged == 1 if (hp > 0): # Suit takes damage (for each drop that hits) suitTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitTrack.append(Wait(delay + tObjectAppears)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) suitGettingHit = Parallel(suitReact) if level == UBER_GAG_LEVEL_INDEX: gotHitSound = globalBattleSoundCache.getSound( 'AA_drop_boat_cog.mp3') suitGettingHit.append(SoundInterval(gotHitSound, node=toon)) suitTrack.append(suitGettingHit) # Create a bonus track if there is an hp bonus bonusTrack = None if (hpbonus > 0): bonusTrack = Sequence( Wait(delay + tObjectAppears + 0.75), Func(suit.showHpText, -hpbonus, 1, openEnded=0)) if (revived != 0): suitTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs)) elif (died != 0): suitTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs)) else: suitTrack.append(Func(suit.loop, 'neutral')) if (bonusTrack != None): suitTrack = Parallel(suitTrack, bonusTrack) elif (kbbonus == 0): # If suit is lured, doesn't need to dodge and certainly won't get hit suitTrack = Sequence( Wait(delay + tObjectAppears), Func(MovieUtil.indicateMissed, suit, 0.6), Func(suit.loop, 'neutral'), ) else: # Conditions regarding dodging: # 1) The suit will dodge only once with multiple drops in the same attack, # so we only dodge if we haven't already (alreadyDodged==0) # 2) The suit will not NEED to dodge if attacked by a larger drop (which fall # behind the suit on a miss rather than having the suit dodge # Special conditions: # 1) If there's a large drop followed by a small one at some point, we can allow # the suit to start teasing and then dogde, this looks fine # 2) If there's a small drop followed by a large drop at some point, we don't allow # the suit to tease, doesn't look right # other suits may need to dodge as well # First check if suit started dodging, if so, do not add any another reaction if (alreadyDodged > 0): return None #Parallel(toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack) # Check for large drops if (level >= 3): # the larger drops, suit doesn't dodge, but teases instead # But if we've already started to tease, don't tease more than once if (alreadyTeased > 0): return None #Parallel(toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack) else: suitTrack = MovieUtil.createSuitTeaseMultiTrack(suit, delay=delay + tObjectAppears) else: # small drop, so dodge suitTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) return suitTrack
def __createSuitTrack(drop, delay, level, alreadyDodged, alreadyTeased, target, npcs): toon = drop['toon'] if 'npc' in drop: toon = drop['npc'] battle = drop['battle'] majorObject = level >= 3 suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] hpbonus = drop['hpbonus'] if hp > 0: suitTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitTrack.append(Wait(delay + tObjectAppears)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) suitGettingHit = Parallel(suitReact) if level == UBER_GAG_LEVEL_INDEX: node = suit.getGeomNode().getChild(0) suitFlatten = Sequence( Parallel( LerpHprInterval(node, 2, Vec3(0.0, 0.0, 0.0), blendType='easeInOut'), LerpScaleInterval(node, 2, VBase3(1, 0.05, 1), blendType='easeInOut') ) ) gotHitSound = globalBattleSoundCache.getSound('AA_drop_boat_cog.ogg') suitGettingHit.append(SoundInterval(gotHitSound, node=toon)) suitGettingHit.append(suitFlatten) suitGettingHit.append(Sequence( Wait(2.7), LerpScaleInterval(node, 2, VBase3(1, 1, 1), blendType='easeInOut')) ) suitTrack.append(suitGettingHit) bonusTrack = None if hpbonus > 0: bonusTrack = Sequence(Wait(delay + tObjectAppears + 0.75), Func(suit.showHpText, -hpbonus, 1, openEnded=0), Func(suit.updateHealthBar, hpbonus)) if revived != 0: suitTrack.append(MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs)) elif died != 0: suitTrack.append(MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs)) else: suitTrack.append(Func(suit.loop, 'neutral')) if bonusTrack != None: suitTrack = Parallel(suitTrack, bonusTrack) elif kbbonus == 0: suitTrack = Sequence(Wait(delay + tObjectAppears), Func(MovieUtil.indicateMissed, suit, 0.6), Func(suit.loop, 'neutral')) else: if alreadyDodged > 0: return if level >= 3: if alreadyTeased > 0: return else: suitTrack = MovieUtil.createSuitTeaseMultiTrack(suit, delay=delay + tObjectAppears) else: suitTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) return suitTrack
def __createSuitTrack(drop, delay, level, alreadyDodged, alreadyTeased, target, npcs): toon = drop['toon'] if 'npc' in drop: toon = drop['npc'] battle = drop['battle'] majorObject = level >= 3 suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] revived = target['revived'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] hpbonus = drop['hpbonus'] if hp > 0: suitTrack = Sequence() showDamage = Func(suit.showHpText, -hp, openEnded=0) updateHealthBar = Func(suit.updateHealthBar, hp) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitTrack.append(Wait(delay + tObjectAppears)) suitTrack.append(showDamage) suitTrack.append(updateHealthBar) suitGettingHit = Parallel(suitReact) if level == UBER_GAG_LEVEL_INDEX: node = suit.getGeomNode().getChild(0) suitFlatten = Sequence( Parallel( LerpHprInterval(node, 2, Vec3(0.0, 0.0, 0.0), blendType='easeInOut'), LerpScaleInterval(node, 2, VBase3(1, 0.05, 1), blendType='easeInOut'))) gotHitSound = globalBattleSoundCache.getSound( 'AA_drop_boat_cog.ogg') suitGettingHit.append(SoundInterval(gotHitSound, node=toon)) suitGettingHit.append(suitFlatten) suitGettingHit.append( Sequence( Wait(2.7), LerpScaleInterval(node, 2, VBase3(1, 1, 1), blendType='easeInOut'))) suitTrack.append(suitGettingHit) bonusTrack = None if hpbonus > 0: bonusTrack = Sequence( Wait(delay + tObjectAppears + 0.75), Func(suit.showHpText, -hpbonus, 1, openEnded=0), Func(suit.updateHealthBar, hpbonus)) if revived != 0: suitTrack.append( MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs)) elif died != 0: suitTrack.append( MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs)) else: suitTrack.append(Func(suit.loop, 'neutral')) if bonusTrack != None: suitTrack = Parallel(suitTrack, bonusTrack) elif kbbonus == 0: suitTrack = Sequence(Wait(delay + tObjectAppears), Func(MovieUtil.indicateMissed, suit, 0.6), Func(suit.loop, 'neutral')) else: if alreadyDodged > 0: return if level >= 3: if alreadyTeased > 0: return else: suitTrack = MovieUtil.createSuitTeaseMultiTrack(suit, delay=delay + tObjectAppears) else: suitTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) return suitTrack
def __dropObject(drop, delay, objName, level, alreadyDodged, alreadyTeased): toon = drop['toon'] hpbonus = drop['hpbonus'] target = drop['target'] suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] battle = drop['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) majorObject = level >= 3 button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() object = globalPropPool.getProp(objName) objectType = globalPropPool.getPropType(objName) if objName == 'weight': object.setScale(object.getScale() * 0.75) elif objName == 'safe': object.setScale(object.getScale() * 0.84999999999999998) node = object.node() node.setBound(OmniBoundingVolume()) node.setFinal(1) soundTrack = __getSoundTrack(level, hitSuit, toon) toonIntervals = [] toonFace = FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]) toonIntervals.append((delay, toonFace)) toonIntervals.append(ActorInterval(toon, 'pushbutton')) toonIntervals.append(FunctionInterval(toon.loop, extraArgs=['neutral'])) toonIntervals.append( FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr])) toonTrack = Track(toonIntervals) buttonIntervals = [] buttonShow = FunctionInterval(MovieUtil.showProps, extraArgs=[buttons, hands]) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = FunctionInterval(MovieUtil.removeProps, extraArgs=[buttons]) buttonIntervals.append((delay, buttonShow)) buttonIntervals.append(buttonScaleUp) buttonIntervals.append(WaitInterval(2.5)) buttonIntervals.append(buttonScaleDown) buttonIntervals.append(buttonHide) buttonTrack = Track(buttonIntervals) objIntervals = [] def posObject(object, suit, level, majorObject, miss, battle=battle): object.reparentTo(battle) if battle.isSuitLured(suit): (suitPos, suitHpr) = battle.getActorPosHpr(suit) object.setPos(suitPos) object.setHpr(suitHpr) if level >= 3: object.setY(object.getY() + 2) else: object.setPos(suit.getPos(battle)) object.setHpr(suit.getHpr(battle)) if miss and level >= 3: object.setY(object.getY(battle) + 5) if not majorObject: if not miss: shoulderHeight = shoulderHeights[suit.style.body] * suit.scale object.setZ(object.getPos(battle)[2] + shoulderHeight) object.setZ(object.getPos(battle)[2] + objZOffsets[level]) objIntervals.append( FunctionInterval(battle.movie.needRestoreRenderProp, extraArgs=[object])) objInit = FunctionInterval( posObject, extraArgs=[object, suit, level, majorObject, hp <= 0]) objIntervals.append((delay + tObjectAppears, objInit)) if hp > 0 and level == 1 or level == 2: animProp = ActorInterval(object, objName) trackObjAnimate = Track([animProp]) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) trackObjShrink = Track([(animProp.getDuration() - dShrink, shrinkProp) ]) objAnimShrink = MultiTrack([trackObjAnimate, trackObjShrink]) objIntervals.append(objAnimShrink) else: animProp = ActorInterval(object, objName, duration=landFrames[level] / 24.0) def poseProp(prop, animName, level): prop.pose(animName, landFrames[level]) poseProp = FunctionInterval(poseProp, extraArgs=[object, objName, level]) wait = WaitInterval(1.0) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objIntervals.append(animProp) objIntervals.append(poseProp) objIntervals.append(wait) objIntervals.append(shrinkProp) objIntervals.append( FunctionInterval(MovieUtil.removeProp, extraArgs=[object])) objIntervals.append( FunctionInterval(battle.movie.clearRenderProp, extraArgs=[object])) objectTrack = Track(objIntervals) dropShadow = MovieUtil.copyProp(suit.getShadowJoints()[0]) if level == 0: dropShadow.setScale(0.5) elif level <= 2: dropShadow.setScale(0.80000000000000004) elif level == 3: dropShadow.setScale(2.0) elif level == 4: dropShadow.setScale(2.2999999999999998) else: dropShadow.setScale(3.6000000000000001) def posShadow(dropShadow=dropShadow, suit=suit, battle=battle, hp=hp, level=level): dropShadow.reparentTo(battle) if battle.isSuitLured(suit): (suitPos, suitHpr) = battle.getActorPosHpr(suit) dropShadow.setPos(suitPos) dropShadow.setHpr(suitHpr) if level >= 3: dropShadow.setY(dropShadow.getY() + 2) else: dropShadow.setPos(suit.getPos(battle)) dropShadow.setHpr(suit.getHpr(battle)) if hp <= 0 and level >= 3: dropShadow.setY(dropShadow.getY(battle) + 5) dropShadow.setZ(dropShadow.getZ() + 0.5) shadowTrack = Track([ WaitInterval(delay + tButtonPressed), FunctionInterval(battle.movie.needRestoreRenderProp, extraArgs=[dropShadow]), FunctionInterval(posShadow), LerpScaleInterval(dropShadow, tObjectAppears - tButtonPressed, dropShadow.getScale(), startScale=Point3(0.01, 0.01, 0.01)), WaitInterval(0.29999999999999999), FunctionInterval(MovieUtil.removeProp, extraArgs=[dropShadow]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[dropShadow]) ]) if hp > 0: suitIntervals = [] showDamage = FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hp]) updateHealthBar = FunctionInterval(suit.updateHealthBar, extraArgs=[hp]) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitIntervals.append((delay + tObjectAppears, showDamage)) suitIntervals.append(updateHealthBar) suitIntervals.append(suitReact) bonusTrack = None if hpbonus > 0: bonusTrack = Track([(delay + tObjectAppears + 0.75, FunctionInterval(suit.showLaffNumber, openEnded=0, extraArgs=[-hpbonus, 1]))]) if died != 0: suitIntervals.append( MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitIntervals.append( FunctionInterval(suit.loop, extraArgs=['neutral'])) if bonusTrack == None: suitTrack = Track(suitIntervals) else: suitTrack = MultiTrack([Track(suitIntervals), bonusTrack]) elif kbbonus == 0: suitTrack = Track([ (delay + tObjectAppears, FunctionInterval(MovieUtil.indicateMissed, extraArgs=[suit, 0.59999999999999998])), FunctionInterval(suit.loop, extraArgs=['neutral']) ]) elif alreadyDodged > 0: return [toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack] if level >= 3: if alreadyTeased > 0: return [ toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack ] else: suitTrack = Track([ MovieUtil.createSuitTeaseMultiTrack(suit, delay=delay + tObjectAppears) ]) else: suitTrack = MovieUtil.createSuitDodgeMultitrack( delay + tSuitDodges, suit, leftSuits, rightSuits) return [ toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack, suitTrack ]
def __dropObject(drop, delay, objName, level, alreadyDodged, alreadyTeased): toon = drop['toon'] hpbonus = drop['hpbonus'] target = drop['target'] suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] battle = drop['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) majorObject = level >= 3 button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [ button, button2] hands = toon.getLeftHands() object = globalPropPool.getProp(objName) objectType = globalPropPool.getPropType(objName) if objName == 'weight': object.setScale(object.getScale() * 0.75) elif objName == 'safe': object.setScale(object.getScale() * 0.84999999999999998) node = object.node() node.setBound(OmniBoundingVolume()) node.setFinal(1) soundTrack = __getSoundTrack(level, hitSuit, toon) toonIntervals = [] toonFace = FunctionInterval(toon.headsUp, extraArgs = [ battle, suitPos]) toonIntervals.append((delay, toonFace)) toonIntervals.append(ActorInterval(toon, 'pushbutton')) toonIntervals.append(FunctionInterval(toon.loop, extraArgs = [ 'neutral'])) toonIntervals.append(FunctionInterval(toon.setHpr, extraArgs = [ battle, origHpr])) toonTrack = Track(toonIntervals) buttonIntervals = [] buttonShow = FunctionInterval(MovieUtil.showProps, extraArgs = [ buttons, hands]) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale = Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale = button.getScale()) buttonHide = FunctionInterval(MovieUtil.removeProps, extraArgs = [ buttons]) buttonIntervals.append((delay, buttonShow)) buttonIntervals.append(buttonScaleUp) buttonIntervals.append(WaitInterval(2.5)) buttonIntervals.append(buttonScaleDown) buttonIntervals.append(buttonHide) buttonTrack = Track(buttonIntervals) objIntervals = [] def posObject(object, suit, level, majorObject, miss, battle = battle): object.reparentTo(battle) if battle.isSuitLured(suit): (suitPos, suitHpr) = battle.getActorPosHpr(suit) object.setPos(suitPos) object.setHpr(suitHpr) if level >= 3: object.setY(object.getY() + 2) else: object.setPos(suit.getPos(battle)) object.setHpr(suit.getHpr(battle)) if miss and level >= 3: object.setY(object.getY(battle) + 5) if not majorObject: if not miss: shoulderHeight = shoulderHeights[suit.style.body] * suit.scale object.setZ(object.getPos(battle)[2] + shoulderHeight) object.setZ(object.getPos(battle)[2] + objZOffsets[level]) objIntervals.append(FunctionInterval(battle.movie.needRestoreRenderProp, extraArgs = [ object])) objInit = FunctionInterval(posObject, extraArgs = [ object, suit, level, majorObject, hp <= 0]) objIntervals.append((delay + tObjectAppears, objInit)) if hp > 0 and level == 1 or level == 2: animProp = ActorInterval(object, objName) trackObjAnimate = Track([ animProp]) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale = object.getScale()) trackObjShrink = Track([ (animProp.getDuration() - dShrink, shrinkProp)]) objAnimShrink = MultiTrack([ trackObjAnimate, trackObjShrink]) objIntervals.append(objAnimShrink) else: animProp = ActorInterval(object, objName, duration = landFrames[level] / 24.0) def poseProp(prop, animName, level): prop.pose(animName, landFrames[level]) poseProp = FunctionInterval(poseProp, extraArgs = [ object, objName, level]) wait = WaitInterval(1.0) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale = object.getScale()) objIntervals.append(animProp) objIntervals.append(poseProp) objIntervals.append(wait) objIntervals.append(shrinkProp) objIntervals.append(FunctionInterval(MovieUtil.removeProp, extraArgs = [ object])) objIntervals.append(FunctionInterval(battle.movie.clearRenderProp, extraArgs = [ object])) objectTrack = Track(objIntervals) dropShadow = MovieUtil.copyProp(suit.getShadowJoints()[0]) if level == 0: dropShadow.setScale(0.5) elif level <= 2: dropShadow.setScale(0.80000000000000004) elif level == 3: dropShadow.setScale(2.0) elif level == 4: dropShadow.setScale(2.2999999999999998) else: dropShadow.setScale(3.6000000000000001) def posShadow(dropShadow = dropShadow, suit = suit, battle = battle, hp = hp, level = level): dropShadow.reparentTo(battle) if battle.isSuitLured(suit): (suitPos, suitHpr) = battle.getActorPosHpr(suit) dropShadow.setPos(suitPos) dropShadow.setHpr(suitHpr) if level >= 3: dropShadow.setY(dropShadow.getY() + 2) else: dropShadow.setPos(suit.getPos(battle)) dropShadow.setHpr(suit.getHpr(battle)) if hp <= 0 and level >= 3: dropShadow.setY(dropShadow.getY(battle) + 5) dropShadow.setZ(dropShadow.getZ() + 0.5) shadowTrack = Track([ WaitInterval(delay + tButtonPressed), FunctionInterval(battle.movie.needRestoreRenderProp, extraArgs = [ dropShadow]), FunctionInterval(posShadow), LerpScaleInterval(dropShadow, tObjectAppears - tButtonPressed, dropShadow.getScale(), startScale = Point3(0.01, 0.01, 0.01)), WaitInterval(0.29999999999999999), FunctionInterval(MovieUtil.removeProp, extraArgs = [ dropShadow]), FunctionInterval(battle.movie.clearRenderProp, extraArgs = [ dropShadow])]) if hp > 0: suitIntervals = [] showDamage = FunctionInterval(suit.showLaffNumber, openEnded = 0, extraArgs = [ -hp]) updateHealthBar = FunctionInterval(suit.updateHealthBar, extraArgs = [ hp]) if majorObject: anim = 'flatten' else: anim = 'drop-react' suitReact = ActorInterval(suit, anim) suitIntervals.append((delay + tObjectAppears, showDamage)) suitIntervals.append(updateHealthBar) suitIntervals.append(suitReact) bonusTrack = None if hpbonus > 0: bonusTrack = Track([ (delay + tObjectAppears + 0.75, FunctionInterval(suit.showLaffNumber, openEnded = 0, extraArgs = [ -hpbonus, 1]))]) if died != 0: suitIntervals.append(MovieUtil.createSuitDeathTrack(suit, toon, battle)) else: suitIntervals.append(FunctionInterval(suit.loop, extraArgs = [ 'neutral'])) if bonusTrack == None: suitTrack = Track(suitIntervals) else: suitTrack = MultiTrack([ Track(suitIntervals), bonusTrack]) elif kbbonus == 0: suitTrack = Track([ (delay + tObjectAppears, FunctionInterval(MovieUtil.indicateMissed, extraArgs = [ suit, 0.59999999999999998])), FunctionInterval(suit.loop, extraArgs = [ 'neutral'])]) elif alreadyDodged > 0: return [ toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack] if level >= 3: if alreadyTeased > 0: return [ toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack] else: suitTrack = Track([ MovieUtil.createSuitTeaseMultiTrack(suit, delay = delay + tObjectAppears)]) else: suitTrack = MovieUtil.createSuitDodgeMultitrack(delay + tSuitDodges, suit, leftSuits, rightSuits) return [ toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack, suitTrack]