630 lines
29 KiB
Python
630 lines
29 KiB
Python
from direct.interval.IntervalGlobal import *
|
|
from BattleBase import *
|
|
from BattleProps import *
|
|
from BattleSounds import *
|
|
import BattleParticles
|
|
from RewardPanel import *
|
|
import MovieCamera
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
import MovieUtil
|
|
import MovieNPCSOS
|
|
from toontown.toonbase import ToontownBattleGlobals
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('MovieSound')
|
|
soundFiles = ('AA_sound_bikehorn.ogg', 'AA_sound_whistle.ogg', 'AA_sound_bugle.ogg', 'AA_sound_aoogah.ogg', 'AA_sound_elephant.ogg', 'SZ_DD_foghorn.ogg', 'AA_sound_Opera_Singer.ogg')
|
|
appearSoundFiles = ('MG_tag_1.ogg', 'LB_receive_evidence.ogg', 'm_match_trumpet.ogg', 'TL_step_on_rake.ogg', 'toonbldg_grow.ogg', 'mailbox_full_wobble.ogg', 'mailbox_full_wobble.ogg')
|
|
hitSoundFiles = ('AA_sound_Opera_Singer_Cog_Glass.ogg',)
|
|
tSound = 2.45
|
|
tSuitReact = 2.8
|
|
DISTANCE_TO_WALK_BACK = MovieUtil.SUIT_LURE_DISTANCE * 0.75
|
|
TIME_TO_WALK_BACK = 0.5
|
|
if DISTANCE_TO_WALK_BACK == 0:
|
|
TIME_TO_WALK_BACK = 0
|
|
INSTRUMENT_SCALE_MODIFIER = 0.5
|
|
BEFORE_STARS = 0.5
|
|
AFTER_STARS = 1.75
|
|
|
|
def doSounds(sounds):
|
|
if len(sounds) == 0:
|
|
return (None, None)
|
|
npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(sounds)
|
|
mtrack = Parallel()
|
|
hitCount = 0
|
|
prevLevel = 0
|
|
prevSounds = [[],
|
|
[],
|
|
[],
|
|
[],
|
|
[],
|
|
[],
|
|
[]]
|
|
for sound in sounds:
|
|
level = sound['level']
|
|
prevSounds[level].append(sound)
|
|
for target in sound['target']:
|
|
if target['hp'] > 0:
|
|
hitCount += 1
|
|
break
|
|
|
|
delay = 0.0
|
|
for soundList in prevSounds:
|
|
if len(soundList) > 0:
|
|
mtrack.append(__doSoundsLevel(soundList, delay, hitCount, npcs))
|
|
delay += TOON_SOUND_DELAY
|
|
|
|
soundTrack = Sequence(npcArrivals, mtrack, npcDepartures)
|
|
targets = sounds[0]['target']
|
|
camDuration = mtrack.getDuration()
|
|
enterDuration = npcArrivals.getDuration()
|
|
exitDuration = npcDepartures.getDuration()
|
|
camTrack = MovieCamera.chooseSoundShot(sounds, targets, camDuration, enterDuration, exitDuration)
|
|
return (soundTrack, camTrack)
|
|
|
|
|
|
def __getSuitTrack(sound, lastSoundThatHit, delay, hitCount, targets, totalDamage, hpbonus, toon, npcs):
|
|
tracks = Parallel()
|
|
attacks = 0
|
|
uberDelay = 0.0
|
|
isUber = 0
|
|
if sound['level'] >= ToontownBattleGlobals.UBER_GAG_LEVEL_INDEX:
|
|
uberDelay = 3.0
|
|
isUber = 1
|
|
for target in targets:
|
|
suit = target['suit']
|
|
if totalDamage > 0 and sound == lastSoundThatHit:
|
|
hp = target['hp']
|
|
died = target['died']
|
|
battle = sound['battle']
|
|
kbbonus = target['kbbonus']
|
|
suitTrack = Sequence()
|
|
showDamage = Func(suit.showHpText, -totalDamage, openEnded=0)
|
|
updateHealthBar = Func(suit.updateHealthBar, totalDamage)
|
|
if isUber:
|
|
breakEffect = BattleParticles.createParticleEffect(file='soundBreak')
|
|
breakEffect.setDepthWrite(0)
|
|
breakEffect.setDepthTest(0)
|
|
breakEffect.setTwoSided(1)
|
|
soundEffect = globalBattleSoundCache.getSound(hitSoundFiles[0])
|
|
suitTrack.append(Wait(delay + tSuitReact))
|
|
if isUber:
|
|
delayTime = random.random()
|
|
suitTrack.append(Wait(delayTime + 2.0))
|
|
suitTrack.append(Func(setPosFromOther, breakEffect, suit, Point3(0, 0.0, suit.getHeight() - 1.0)))
|
|
suitTrack.append(Parallel(showDamage, updateHealthBar, SoundInterval(soundEffect, node=suit), __getPartTrack(breakEffect, 0.0, 1.0, [breakEffect, suit, 0], softStop=-0.5)))
|
|
else:
|
|
suitTrack.append(showDamage)
|
|
suitTrack.append(updateHealthBar)
|
|
if hitCount == 1:
|
|
suitTrack.append(Parallel(ActorInterval(suit, 'squirt-small-react'), MovieUtil.createSuitStunInterval(suit, 0.5, 1.8)))
|
|
else:
|
|
suitTrack.append(ActorInterval(suit, 'squirt-small-react'))
|
|
if kbbonus == 0:
|
|
suitTrack.append(__createSuitResetPosTrack(suit, battle))
|
|
suitTrack.append(Func(battle.unlureSuit, suit))
|
|
bonusTrack = None
|
|
if hpbonus > 0:
|
|
bonusTrack = Sequence(Wait(delay + tSuitReact + delay + 0.75 + uberDelay), Func(suit.showHpText, -hpbonus, 1, openEnded=0))
|
|
suitTrack.append(Func(suit.loop, 'neutral'))
|
|
if bonusTrack == None:
|
|
tracks.append(suitTrack)
|
|
else:
|
|
tracks.append(Parallel(suitTrack, bonusTrack))
|
|
elif totalDamage <= 0:
|
|
tracks.append(Sequence(Wait(2.9), Func(MovieUtil.indicateMissed, suit, 1.0)))
|
|
|
|
return tracks
|
|
|
|
|
|
def __doSoundsLevel(sounds, delay, hitCount, npcs):
|
|
lastSoundThatHit = None
|
|
totalDamage = 0
|
|
for sound in sounds:
|
|
for target in sound['target']:
|
|
if target['hp'] > 0:
|
|
lastSoundThatHit = sound
|
|
totalDamage += target['hp']
|
|
break
|
|
|
|
mainTrack = Sequence()
|
|
tracks = Parallel()
|
|
deathTracks = Parallel()
|
|
for sound in sounds:
|
|
toon = sound['toon']
|
|
if sound.has_key('npc'):
|
|
toon = sound['npc']
|
|
level = sound['level']
|
|
targets = sound['target']
|
|
hpbonus = sound['hpbonus']
|
|
attackMTrack = soundfn_array[sound['level']](sound, delay, toon, targets, level)
|
|
tracks.append(Sequence(Wait(delay), attackMTrack))
|
|
tracks.append(__getSuitTrack(sound, lastSoundThatHit, delay, hitCount, targets, totalDamage, hpbonus, toon, npcs))
|
|
for target in targets:
|
|
battle = sound['battle']
|
|
suit = target['suit']
|
|
died = target['died']
|
|
revived = target['revived']
|
|
if revived:
|
|
deathTracks.append(MovieUtil.createSuitReviveTrack(suit, toon, battle, npcs))
|
|
elif died:
|
|
deathTracks.append(MovieUtil.createSuitDeathTrack(suit, toon, battle, npcs))
|
|
|
|
mainTrack.append(tracks)
|
|
mainTrack.append(deathTracks)
|
|
return mainTrack
|
|
|
|
|
|
def __createSuitResetPosTrack(suit, battle):
|
|
resetPos, resetHpr = battle.getActorPosHpr(suit)
|
|
moveDist = Vec3(suit.getPos(battle) - resetPos).length()
|
|
moveDuration = 0.5
|
|
walkTrack = Sequence(Func(suit.setHpr, battle, resetHpr), ActorInterval(suit, 'walk', startTime=1, duration=moveDuration, endTime=0.0001), Func(suit.loop, 'neutral'))
|
|
moveTrack = LerpPosInterval(suit, moveDuration, resetPos, other=battle)
|
|
return Parallel(walkTrack, moveTrack)
|
|
|
|
|
|
def createSuitResetPosTrack(suit, battle):
|
|
return __createSuitResetPosTrack(suit, battle)
|
|
|
|
|
|
def __createToonInterval(sound, delay, toon, operaInstrument = None):
|
|
isNPC = 0
|
|
if sound.get('npc'):
|
|
isNPC = 1
|
|
battle = sound['battle']
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
if not isNPC:
|
|
oldPos, oldHpr = battle.getActorPosHpr(toon)
|
|
newPos = Point3(oldPos)
|
|
newPos.setY(newPos.getY() - DISTANCE_TO_WALK_BACK)
|
|
retval = Sequence(Wait(delay))
|
|
if DISTANCE_TO_WALK_BACK and hasLuredSuits and not isNPC:
|
|
retval.append(Parallel(ActorInterval(toon, 'walk', startTime=1, duration=TIME_TO_WALK_BACK, endTime=0.0001), LerpPosInterval(toon, TIME_TO_WALK_BACK, newPos, other=battle)))
|
|
if operaInstrument:
|
|
sprayEffect = BattleParticles.createParticleEffect(file='soundWave')
|
|
sprayEffect.setDepthWrite(0)
|
|
sprayEffect.setDepthTest(0)
|
|
sprayEffect.setTwoSided(1)
|
|
I1 = 2.8
|
|
retval.append(ActorInterval(toon, 'sound', playRate=1.0, startTime=0.0, endTime=I1))
|
|
retval.append(Func(setPosFromOther, sprayEffect, operaInstrument, Point3(0, 1.6, -0.18)))
|
|
retval.append(__getPartTrack(sprayEffect, 0.0, 6.0, [sprayEffect, toon, 0], softStop=-3.5))
|
|
retval.append(ActorInterval(toon, 'sound', playRate=1.0, startTime=I1))
|
|
else:
|
|
retval.append(ActorInterval(toon, 'sound'))
|
|
if DISTANCE_TO_WALK_BACK and hasLuredSuits and not isNPC:
|
|
retval.append(Parallel(ActorInterval(toon, 'walk', startTime=0.0001, duration=TIME_TO_WALK_BACK, endTime=1), LerpPosInterval(toon, TIME_TO_WALK_BACK, oldPos, other=battle)))
|
|
retval.append(Func(toon.loop, 'neutral'))
|
|
return retval
|
|
|
|
|
|
def __hasLuredSuits(sound):
|
|
retval = False
|
|
targets = sound['target']
|
|
for target in targets:
|
|
kbbonus = target['kbbonus']
|
|
if kbbonus == 0:
|
|
retval = True
|
|
break
|
|
|
|
return retval
|
|
|
|
|
|
def __doBikehorn(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax = Vec3(0.65, 0.65, 0.65)
|
|
instrMax *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch = Vec3(0.6, 1.1, 0.6)
|
|
instrStretch *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('bikehorn')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
instrument.setPos(-1.1, -1.4, 0.1)
|
|
instrument.setHpr(145, 0, 0)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(-1.1, -1.4, 0.1)
|
|
instrument2.setHpr(145, 0, 0)
|
|
instrument2.setScale(instrMin)
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow = getScaleIntervals(instruments, duration=0.2, startScale=instrMin, endScale=instrMax)
|
|
instrumentAppear = Parallel(grow, Sequence(Wait(0.15), SoundInterval(instrumentAppearSfx, node=toon)))
|
|
stretchInstr = getScaleBlendIntervals(instruments, duration=0.2, startScale=instrMax, endScale=instrStretch, blendType='easeOut')
|
|
backInstr = getScaleBlendIntervals(instruments, duration=0.2, startScale=instrStretch, endScale=instrMax, blendType='easeIn')
|
|
stretchMega = getScaleBlendIntervals(megaphones, duration=0.2, startScale=megaphone.getScale(), endScale=0.9, blendType='easeOut')
|
|
backMega = getScaleBlendIntervals(megaphones, duration=0.2, startScale=0.9, endScale=megaphone.getScale(), blendType='easeIn')
|
|
attackTrack = Parallel(Sequence(stretchInstr, backInstr), Sequence(stretchMega, backMega))
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
megaphoneTrack = Sequence(Wait(delayTime), megaphoneShow, Wait(1.0), instrumentAppear, Wait(3.0), megaphoneHide)
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon)
|
|
tracks.append(toonTrack)
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
instrumentshrink = getScaleIntervals(instruments, duration=0.1, startScale=instrMax, endScale=instrMin)
|
|
if soundEffect:
|
|
delayTime = delay + tSound
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Sequence(Wait(delayTime), Parallel(attackTrack, SoundInterval(soundEffect, node=toon)), Wait(0.2), instrumentshrink)
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def __doWhistle(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax = Vec3(0.2, 0.2, 0.2)
|
|
instrMax *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch = Vec3(0.25, 0.25, 0.25)
|
|
instrStretch *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('whistle')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
instrument.setPos(-1.2, -1.3, 0.1)
|
|
instrument.setHpr(145, 0, 85)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(-1.2, -1.3, 0.1)
|
|
instrument2.setHpr(145, 0, 85)
|
|
instrument2.setScale(instrMin)
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow = getScaleIntervals(instruments, duration=0.2, startScale=instrMin, endScale=instrMax)
|
|
instrumentAppear = Parallel(grow, Sequence(Wait(0.05), SoundInterval(instrumentAppearSfx, node=toon)))
|
|
stretchInstr = getScaleBlendIntervals(instruments, duration=0.2, startScale=instrMax, endScale=instrStretch, blendType='easeOut')
|
|
backInstr = getScaleBlendIntervals(instruments, duration=0.2, startScale=instrStretch, endScale=instrMax, blendType='easeIn')
|
|
attackTrack = Sequence(stretchInstr, backInstr)
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
megaphoneTrack = Sequence(Wait(delayTime), megaphoneShow, Wait(1.0), instrumentAppear, Wait(3.0), megaphoneHide)
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon)
|
|
tracks.append(toonTrack)
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
instrumentshrink = getScaleIntervals(instruments, duration=0.1, startScale=instrMax, endScale=instrMin)
|
|
if soundEffect:
|
|
delayTime = delay + tSound
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Sequence(Wait(delayTime), Parallel(attackTrack, SoundInterval(soundEffect, node=toon)), Wait(0.2), instrumentshrink)
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def __doBugle(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax = Vec3(0.4, 0.4, 0.4)
|
|
instrMax *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch = Vec3(0.5, 0.5, 0.5)
|
|
instrStretch *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('bugle')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
instrument.setPos(-1.3, -1.4, 0.1)
|
|
instrument.setHpr(145, 0, 85)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(-1.3, -1.4, 0.1)
|
|
instrument2.setHpr(145, 0, 85)
|
|
instrument2.setScale(instrMin)
|
|
|
|
def longshake(models, num):
|
|
inShake = getScaleBlendIntervals(models, duration=0.2, startScale=instrMax, endScale=instrStretch, blendType='easeInOut')
|
|
outShake = getScaleBlendIntervals(models, duration=0.2, startScale=instrStretch, endScale=instrMax, blendType='easeInOut')
|
|
i = 1
|
|
seq = Sequence()
|
|
while i < num:
|
|
if i % 2 == 0:
|
|
seq.append(inShake)
|
|
else:
|
|
seq.append(outShake)
|
|
i += 1
|
|
|
|
seq.start()
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow = getScaleBlendIntervals(instruments, duration=1, startScale=instrMin, endScale=instrMax, blendType='easeInOut')
|
|
instrumentshrink = getScaleIntervals(instruments, duration=0.1, startScale=instrMax, endScale=instrMin)
|
|
instrumentAppear = Sequence(grow, Wait(0), Func(longshake, instruments, 5))
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
megaphoneTrack = Parallel(Sequence(Wait(delay + 1.7), SoundInterval(soundEffect, node=toon)), Sequence(Wait(delayTime), megaphoneShow, Wait(1.7), instrumentAppear, Wait(1), instrumentshrink, Wait(1.5), megaphoneHide))
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon)
|
|
tracks.append(toonTrack)
|
|
if soundEffect:
|
|
delayTime = delay + tSound
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Wait(delayTime)
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def __doAoogah(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax = Vec3(0.5, 0.5, 0.5)
|
|
instrMax *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch = Vec3(1.1, 0.9, 0.4)
|
|
instrStretch *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('aoogah')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
instrument.setPos(-1.0, -1.5, 0.2)
|
|
instrument.setHpr(145, 0, 85)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(-1.0, -1.5, 0.2)
|
|
instrument2.setHpr(145, 0, 85)
|
|
instrument2.setScale(instrMin)
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow = getScaleIntervals(instruments, duration=0.2, startScale=instrMin, endScale=instrMax)
|
|
instrumentAppear = Parallel(grow, Sequence(Wait(0.05), SoundInterval(instrumentAppearSfx, node=toon)))
|
|
stretchInstr = getScaleBlendIntervals(instruments, duration=0.2, startScale=instrMax, endScale=instrStretch, blendType='easeOut')
|
|
backInstr = getScaleBlendIntervals(instruments, duration=0.2, startScale=instrStretch, endScale=instrMax, blendType='easeInOut')
|
|
attackTrack = Sequence(stretchInstr, Wait(1), backInstr)
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
megaphoneTrack = Sequence(Wait(delayTime), megaphoneShow, Wait(1.0), instrumentAppear, Wait(3.0), megaphoneHide)
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon)
|
|
tracks.append(toonTrack)
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
instrumentshrink = getScaleIntervals(instruments, duration=0.1, startScale=instrMax, endScale=instrMin)
|
|
if soundEffect:
|
|
delayTime = delay + tSound
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Sequence(Wait(delayTime), Parallel(attackTrack, SoundInterval(soundEffect, node=toon), Sequence(Wait(1.5), instrumentshrink)))
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def __doElephant(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax1 = Vec3(0.3, 0.4, 0.2)
|
|
instrMax1 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrMax2 = Vec3(0.3, 0.3, 0.3)
|
|
instrMax2 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch1 = Vec3(0.3, 0.5, 0.25)
|
|
instrStretch1 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch2 = Vec3(0.3, 0.7, 0.3)
|
|
instrStretch2 *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('elephant')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
instrument.setPos(-.6, -.9, 0.15)
|
|
instrument.setHpr(145, 0, 85)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(-.6, -.9, 0.15)
|
|
instrument2.setHpr(145, 0, 85)
|
|
instrument2.setScale(instrMin)
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow1 = getScaleIntervals(instruments, duration=0.3, startScale=instrMin, endScale=instrMax1)
|
|
grow2 = getScaleIntervals(instruments, duration=0.3, startScale=instrMax1, endScale=instrMax2)
|
|
instrumentAppear = Parallel(Sequence(grow1, grow2), Sequence(Wait(0.05), SoundInterval(instrumentAppearSfx, node=toon)))
|
|
stretchInstr1 = getScaleBlendIntervals(instruments, duration=0.1, startScale=instrMax2, endScale=instrStretch1, blendType='easeOut')
|
|
stretchInstr2 = getScaleBlendIntervals(instruments, duration=0.1, startScale=instrStretch1, endScale=instrStretch2, blendType='easeOut')
|
|
stretchInstr = Sequence(stretchInstr1, stretchInstr2)
|
|
backInstr = getScaleBlendIntervals(instruments, duration=0.1, startScale=instrStretch2, endScale=instrMax2, blendType='easeOut')
|
|
attackTrack = Sequence(stretchInstr, Wait(1), backInstr)
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
megaphoneTrack = Sequence(Wait(delayTime), megaphoneShow, Wait(1.0), instrumentAppear, Wait(3.0), megaphoneHide)
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon)
|
|
tracks.append(toonTrack)
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
instrumentshrink = getScaleIntervals(instruments, duration=0.1, startScale=instrMax2, endScale=instrMin)
|
|
if soundEffect:
|
|
delayTime = delay + tSound
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Sequence(Wait(delayTime), Parallel(attackTrack, SoundInterval(soundEffect, node=toon), Sequence(Wait(1.5), instrumentshrink)))
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def __doFoghorn(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax1 = Vec3(0.1, 0.1, 0.1)
|
|
instrMax1 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrMax2 = Vec3(0.3, 0.3, 0.3)
|
|
instrMax2 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch = Vec3(0.4, 0.4, 0.4)
|
|
instrStretch *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('fog_horn')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
instrument.setPos(-.8, -.9, 0.2)
|
|
instrument.setHpr(145, 0, 0)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(-.8, -.9, 0.2)
|
|
instrument2.setHpr(145, 0, 0)
|
|
instrument2.setScale(instrMin)
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow1 = getScaleIntervals(instruments, duration=1, startScale=instrMin, endScale=instrMax1)
|
|
grow2 = getScaleIntervals(instruments, duration=0.1, startScale=instrMax1, endScale=instrMax2)
|
|
instrumentAppear = Parallel(Sequence(grow1, grow2), Sequence(Wait(0.05), SoundInterval(instrumentAppearSfx, node=toon)))
|
|
stretchInstr = getScaleBlendIntervals(instruments, duration=0.3, startScale=instrMax2, endScale=instrStretch, blendType='easeOut')
|
|
backInstr = getScaleBlendIntervals(instruments, duration=1.0, startScale=instrStretch, endScale=instrMin, blendType='easeIn')
|
|
spinInstr1 = LerpHprInterval(instrument, duration=1.5, startHpr=Vec3(145, 0, 0), hpr=Vec3(145, 0, 90), blendType='easeInOut')
|
|
spinInstr2 = LerpHprInterval(instrument2, duration=1.5, startHpr=Vec3(145, 0, 0), hpr=Vec3(145, 0, 90), blendType='easeInOut')
|
|
spinInstr = Parallel(spinInstr1, spinInstr2)
|
|
attackTrack = Parallel(Sequence(Wait(0.2), spinInstr), Sequence(stretchInstr, Wait(0.5), backInstr))
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
megaphoneTrack = Sequence(Wait(delayTime), megaphoneShow, Wait(1.0), instrumentAppear, Wait(3.0), megaphoneHide)
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon)
|
|
tracks.append(toonTrack)
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
if soundEffect:
|
|
delayTime = delay + tSound
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Sequence(Wait(delayTime), Parallel(attackTrack, SoundInterval(soundEffect, node=toon)))
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def __doOpera(sound, delay, toon, targets, level):
|
|
tracks = Parallel()
|
|
delay = delay
|
|
instrMin = Vec3(0.001, 0.001, 0.001)
|
|
instrMax1 = Vec3(1.7, 1.7, 1.7)
|
|
instrMax1 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrMax2 = Vec3(2.2, 2.2, 2.2)
|
|
instrMax2 *= INSTRUMENT_SCALE_MODIFIER
|
|
instrStretch = Vec3(0.4, 0.4, 0.4)
|
|
instrStretch *= INSTRUMENT_SCALE_MODIFIER
|
|
megaphone = globalPropPool.getProp('megaphone')
|
|
megaphone2 = MovieUtil.copyProp(megaphone)
|
|
megaphones = [megaphone, megaphone2]
|
|
instrument = globalPropPool.getProp('singing')
|
|
instrument2 = MovieUtil.copyProp(instrument)
|
|
instruments = [instrument, instrument2]
|
|
head = instrument2.find('**/opera_singer')
|
|
head.setPos(0, 0, 0)
|
|
|
|
def setInstrumentStats(instrument = instrument, instrument2 = instrument2):
|
|
notify.debug('setInstrumentStats')
|
|
newPos = Vec3(-0.8, -0.9, 0.2)
|
|
newPos *= 1.3
|
|
instrument.setPos(newPos[0], newPos[1], newPos[2])
|
|
instrument.setHpr(145, 0, 90)
|
|
instrument.setScale(instrMin)
|
|
instrument2.setPos(newPos[0], newPos[1], newPos[2])
|
|
instrument2.setHpr(145, 0, 90)
|
|
instrument2.setScale(instrMin)
|
|
|
|
hands = toon.getRightHands()
|
|
megaphoneShow = Sequence(Func(MovieUtil.showProps, megaphones, hands), Func(MovieUtil.showProps, instruments, hands), Func(setInstrumentStats))
|
|
megaphoneHide = Sequence(Func(MovieUtil.removeProps, megaphones), Func(MovieUtil.removeProps, instruments))
|
|
instrumentAppearSfx = globalBattleSoundCache.getSound(appearSoundFiles[level])
|
|
grow1 = getScaleBlendIntervals(instruments, duration=1, startScale=instrMin, endScale=instrMax1, blendType='easeOut')
|
|
grow2 = getScaleBlendIntervals(instruments, duration=1.1, startScale=instrMax1, endScale=instrMax2, blendType='easeIn')
|
|
shrink2 = getScaleIntervals(instruments, duration=0.1, startScale=instrMax2, endScale=instrMin)
|
|
instrumentAppear = Parallel(Sequence(grow1, grow2, Wait(6.0), shrink2), Sequence(Wait(0.0), SoundInterval(instrumentAppearSfx, node=toon)))
|
|
hasLuredSuits = __hasLuredSuits(sound)
|
|
delayTime = delay
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
megaphoneTrack = Sequence(Wait(delayTime), megaphoneShow, Wait(1.0), instrumentAppear, Wait(2.0), megaphoneHide)
|
|
tracks.append(megaphoneTrack)
|
|
toonTrack = __createToonInterval(sound, delay, toon, operaInstrument=instrument)
|
|
tracks.append(toonTrack)
|
|
soundEffect = globalBattleSoundCache.getSound(soundFiles[level])
|
|
if soundEffect:
|
|
delayTime = delay + tSound - 0.3
|
|
if hasLuredSuits:
|
|
delayTime += TIME_TO_WALK_BACK
|
|
soundTrack = Sequence(Wait(delayTime), SoundInterval(soundEffect, node=toon))
|
|
tracks.append(Sequence(Wait(0)))
|
|
tracks.append(soundTrack)
|
|
return tracks
|
|
|
|
|
|
def setPosFromOther(dest, source, offset = Point3(0, 0, 0)):
|
|
pos = render.getRelativePoint(source, offset)
|
|
dest.setPos(pos)
|
|
dest.reparentTo(render)
|
|
|
|
|
|
def getScaleIntervals(props, duration, startScale, endScale):
|
|
tracks = Parallel()
|
|
for prop in props:
|
|
tracks.append(LerpScaleInterval(prop, duration, endScale, startScale=startScale))
|
|
|
|
return tracks
|
|
|
|
|
|
def getScaleBlendIntervals(props, duration, startScale, endScale, blendType):
|
|
tracks = Parallel()
|
|
for prop in props:
|
|
tracks.append(LerpScaleInterval(prop, duration, endScale, startScale=startScale, blendType=blendType))
|
|
|
|
return tracks
|
|
|
|
|
|
soundfn_array = (__doBikehorn,
|
|
__doWhistle,
|
|
__doBugle,
|
|
__doAoogah,
|
|
__doElephant,
|
|
__doFoghorn,
|
|
__doOpera)
|
|
|
|
def __getPartTrack(particleEffect, startDelay, durationDelay, partExtraArgs, softStop = 0):
|
|
pEffect = partExtraArgs[0]
|
|
parent = partExtraArgs[1]
|
|
if len(partExtraArgs) == 3:
|
|
worldRelative = partExtraArgs[2]
|
|
else:
|
|
worldRelative = 1
|
|
return Sequence(Wait(startDelay), ParticleInterval(pEffect, parent, worldRelative, duration=durationDelay, cleanup=True, softStopT=softStop))
|