def __makeShopOwnerNpc(self): if self.shopOwnerNpc: return self.shopOwnerNpc = NPCToons.createLocalNPC(self.shopOwnerNpcId) if not self.shopOwnerNpc: self.notify.warning('No shopkeeper in this cogdominium, using ForestGrove Sellbot FO NPCToons') random.seed(self.doId) shopkeeper = random.randint(7001, 7009) self.shopOwnerNpc = NPCToons.createLocalNPC(shopkeeper) self.shopOwnerNpc.addActive() self.shopOwnerNpc.reparentTo(self.cage) self.shopOwnerNpc.setPosHpr(0, -2, 0, 180, 0, 0) self.shopOwnerNpc.loop('neutral')
def doNPCTeleports(attacks): npcs = [] npcDatas = [] arrivals = Sequence() departures = Parallel() for attack in attacks: if 'npcId' in attack: npcId = attack['npcId'] npc = NPCToons.createLocalNPC(npcId) if npc != None: npcs.append(npc) attack['npc'] = npc toon = attack['toon'] battle = attack['battle'] pos = toon.getPos(battle) + offset hpr = toon.getHpr(battle) npcDatas.append((npc, battle, hpr)) arrival = teleportIn(attack, npc, pos=pos) arrivals.append(arrival) departure = teleportOut(attack, npc) departures.append(departure) turns = Parallel() unturns = Parallel() hpr = Vec3(180.0, 0, 0) for npc in npcDatas: turns.append(Func(npc[0].setHpr, npc[1], npc[2])) unturns.append(Func(npc[0].setHpr, npc[1], hpr)) arrivals.append(turns) unturns.append(departures) return (arrivals, unturns, npcs)
def load(self): SafeZoneLoader.SafeZoneLoader.load(self) self.seagullSound = base.loadSfx('phase_6/audio/sfx/SZ_DD_Seagull.ogg') self.underwaterSound = base.loadSfx('phase_4/audio/sfx/AV_ambient_water.ogg') self.swimSound = base.loadSfx('phase_4/audio/sfx/AV_swim_single_stroke.ogg') self.submergeSound = base.loadSfx('phase_5.5/audio/sfx/AV_jump_in_water.ogg') self.boat = self.geom.find('**/donalds_boat') self.dockSound = base.loadSfx('phase_6/audio/sfx/SZ_DD_dockcreak.ogg') self.foghornSound = base.loadSfx('phase_5/audio/sfx/SZ_DD_foghorn.ogg') self.bellSound = base.loadSfx('phase_6/audio/sfx/SZ_DD_shipbell.ogg') self.waterSound = base.loadSfx('phase_6/audio/sfx/SZ_DD_waterlap.ogg') if not self.boat.isEmpty(): wheel = self.boat.find('**/wheel') if not wheel.isEmpty(): wheel.hide() self.boat.stash() self.donald = NPCToons.createLocalNPC(7011) self.donald.setPos(0, -1, 3.95) self.donald.reparentTo(self.boat) self.donald.setHat(48, 0, 0) self.donald.hideShadow() random.shuffle(TTLocalizer.DonaldChatter) self.donaldSpeech = self.donald.createTalkSequence(TTLocalizer.DonaldChatter, 15) self.donaldSpeech.loop(0) water = self.geom.find('**/water') water.setColorScale(1, 1, 1, 0.7) water.setTransparency(1)
def __doSprinkle(attack, recipients, hp = 0): toon = NPCToons.createLocalNPC(attack['npcId']) if toon == None: return targets = attack[recipients] level = 4 battle = attack['battle'] track = Sequence(teleportIn(attack, toon)) def face90(target, toon, battle): vec = Point3(target.getPos(battle) - toon.getPos(battle)) vec.setZ(0) temp = vec[0] vec.setX(-vec[1]) vec.setY(temp) targetPoint = Point3(toon.getPos(battle) + vec) toon.headsUp(battle, targetPoint) delay = 2.5 effectTrack = Sequence() for target in targets: sprayEffect = BattleParticles.createParticleEffect(file='pixieSpray') dropEffect = BattleParticles.createParticleEffect(file='pixieDrop') explodeEffect = BattleParticles.createParticleEffect(file='pixieExplode') poofEffect = BattleParticles.createParticleEffect(file='pixiePoof') wallEffect = BattleParticles.createParticleEffect(file='pixieWall') mtrack = Parallel(__getPartTrack(sprayEffect, 1.5, 0.5, [sprayEffect, toon, 0]), __getPartTrack(dropEffect, 1.9, 2.0, [dropEffect, target, 0]), __getPartTrack(explodeEffect, 2.7, 1.0, [explodeEffect, toon, 0]), __getPartTrack(poofEffect, 3.4, 1.0, [poofEffect, target, 0]), __getPartTrack(wallEffect, 4.05, 1.2, [wallEffect, toon, 0]), __getSoundTrack(level, 2, duration=3.1, node=toon), Sequence(Func(face90, target, toon, battle), ActorInterval(toon, 'sprinkle-dust')), Sequence(Wait(delay), Func(__healToon, target, hp))) effectTrack.append(mtrack) track.append(effectTrack) track.append(Func(toon.setHpr, Vec3(180.0, 0.0, 0.0))) track.append(teleportOut(attack, toon)) return track
def announceGenerate(self): PurchaseManager.PurchaseManager.announceGenerate(self) if self.hasLocalToon: self.npc = NPCToons.createLocalNPC(2011) self.npc.addActive() def getDoId(): return 0 self.npc.getDoId = getDoId def acquireDelayDelete(name): return serialNum() self.npc.acquireDelayDelete = acquireDelayDelete def releaseDelayDelete(token): pass self.npc.releaseDelayDelete = releaseDelayDelete def uniqueName(string): return string self.npc.uniqueName = uniqueName self.accept('gagScreenIsUp', self.playMovie) self.purchase = base.cr.playGame.hood.purchase self.purchase.enterTutorialMode(self.ownedNewbieId)
def __healJoke(heal, hasInteractivePropHealBonus): npcId = 0 if 'npcId' in heal: npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] jokeIndex = heal['hpbonus'] % len(TTLocalizer.ToonHealJokes) if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) tracks = Parallel() fSpeakPunchline = 58 tSpeakSetup = 0.0 tSpeakPunchline = 3.0 dPunchLine = 3.0 tTargetReact = tSpeakPunchline + 1.0 dTargetLaugh = 1.5 tRunBack = tSpeakPunchline + dPunchLine tDoSoundAnimation = tSpeakPunchline - float(fSpeakPunchline) / toon.getFrameRate('sound') megaphone = globalPropPool.getProp('megaphone') megaphone2 = MovieUtil.copyProp(megaphone) megaphones = [megaphone, megaphone2] hands = toon.getRightHands() dMegaphoneScale = 0.5 tracks.append(Sequence(Wait(tDoSoundAnimation), Func(MovieUtil.showProps, megaphones, hands), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('sound') - 2.0 * dMegaphoneScale), MovieUtil.getScaleIntervals(megaphones, dMegaphoneScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, megaphones))) tracks.append(Sequence(Wait(tDoSoundAnimation), ActorInterval(toon, 'sound'))) soundTrack = __getSoundTrack(level, 2.0, node=toon) tracks.append(soundTrack) joke = TTLocalizer.ToonHealJokes[jokeIndex] tracks.append(Sequence(Wait(tSpeakSetup), Func(toon.setChatAbsolute, joke[0], CFSpeech | CFTimeout))) tracks.append(Sequence(Wait(tSpeakPunchline), Func(toon.setChatAbsolute, joke[1], CFSpeech | CFTimeout))) reactTrack = Sequence(Wait(tTargetReact)) for target in targets: targetToon = target['toon'] hp = target['hp'] reactTrack.append(Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)) reactTrack.append(Wait(dTargetLaugh)) for target in targets: targetToon = target['toon'] reactTrack.append(Func(targetToon.clearChat)) tracks.append(reactTrack) if npcId != 0: track.append(Sequence(Wait(tRunBack), Func(toon.clearChat), *MovieNPCSOS.teleportOut(heal, toon))) else: tracks.append(Sequence(Wait(tRunBack), Func(toon.clearChat), *__returnToBase(heal))) track.append(tracks) return track
def __createToonModels(self): self.model_Created = 1 self.jurorToon = NPCToons.createLocalNPC(ToontownGlobals.LawbotBossBaseJurorNpcId + self.index) self.toonScale = self.jurorToon.getScale() jurorToonParent = render.attachNewNode('toonOriginChange') self.jurorToon.wrtReparentTo(jurorToonParent) self.jurorToon.setPosHpr(0, 0, -(self.jurorToon.getHeight() / 2.0), 0, -90, 0) self.toonModel = jurorToonParent self.toonHead = ToonHead.ToonHead() self.toonHead.setupHead(self.jurorToon.style) self.toonHead.reparentTo(hidden) self.__loadToonInCannon()
def __healDance(heal, hasInteractivePropHealBonus): npcId = 0 if 'npcId' in heal: npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) delay = 3.0 first = 1 targetTrack = Sequence() for target in targets: targetToon = target['toon'] hp = target['hp'] reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus) if first: targetTrack.append(Wait(delay)) first = 0 targetTrack.append(reactIval) hat = globalPropPool.getProp('hat') hat2 = MovieUtil.copyProp(hat) hats = [hat, hat2] cane = globalPropPool.getProp('cane') cane2 = MovieUtil.copyProp(cane) canes = [cane, cane2] leftHands = toon.getLeftHands() rightHands = toon.getRightHands() dScale = 0.5 propTrack = Sequence(Func(MovieUtil.showProps, hats, rightHands, Point3(0.23, 0.09, 0.69), Point3(180, 0, 0)), Func(MovieUtil.showProps, canes, leftHands, Point3(-0.28, 0.0, 0.14), Point3(0.0, 0.0, -150.0)), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('happy-dance') - 2.0 * dScale), MovieUtil.getScaleIntervals(hats + canes, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO), Func(MovieUtil.removeProps, hats + canes)) mtrack = Parallel(propTrack, ActorInterval(toon, 'happy-dance'), __getSoundTrack(level, 0.2, duration=6.4, node=toon), targetTrack) track.append(Func(toon.loop, 'neutral')) track.append(Wait(0.1)) track.append(mtrack) if npcId != 0: track.append(MovieNPCSOS.teleportOut(heal, toon)) else: track.append(__returnToBase(heal)) for target in targets: targetToon = target['toon'] track.append(Func(targetToon.clearChat)) return track
def __healJuggle(heal, hasInteractivePropHealBonus): npcId = 0 if 'npcId' in heal: npcId = heal['npcId'] toon = NPCToons.createLocalNPC(npcId) if toon == None: return else: toon = heal['toon'] targets = heal['target'] ineffective = heal['sidestep'] level = heal['level'] if npcId != 0: track = Sequence(MovieNPCSOS.teleportIn(heal, toon)) else: track = Sequence(__runToHealSpot(heal)) delay = 4.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) cube = globalPropPool.getProp('cubes') cube2 = MovieUtil.copyProp(cube) cubes = [cube, cube2] hips = [toon.getLOD(toon.getLODNames()[0]).find('**/joint_hips'), toon.getLOD(toon.getLODNames()[1]).find('**/joint_hips')] cubeTrack = Sequence(Func(MovieUtil.showProps, cubes, hips), MovieUtil.getActorIntervals(cubes, 'cubes'), Func(MovieUtil.removeProps, cubes)) mtrack = Parallel(cubeTrack, __getSoundTrack(level, 0.7, duration=7.7, node=toon), ActorInterval(toon, 'juggle'), 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 __doSprinkle(attack, recipients, hp=0): toon = NPCToons.createLocalNPC(attack['npcId']) if toon == None: return targets = attack[recipients] level = 4 battle = attack['battle'] track = Sequence(teleportIn(attack, toon)) def face90(target, toon, battle): vec = Point3(target.getPos(battle) - toon.getPos(battle)) vec.setZ(0) temp = vec[0] vec.setX(-vec[1]) vec.setY(temp) targetPoint = Point3(toon.getPos(battle) + vec) toon.headsUp(battle, targetPoint) delay = 2.5 effectTrack = Sequence() for target in targets: sprayEffect = BattleParticles.createParticleEffect(file='pixieSpray') dropEffect = BattleParticles.createParticleEffect(file='pixieDrop') explodeEffect = BattleParticles.createParticleEffect( file='pixieExplode') poofEffect = BattleParticles.createParticleEffect(file='pixiePoof') wallEffect = BattleParticles.createParticleEffect(file='pixieWall') mtrack = Parallel( __getPartTrack(sprayEffect, 1.5, 0.5, [sprayEffect, toon, 0]), __getPartTrack(dropEffect, 1.9, 2.0, [dropEffect, target, 0]), __getPartTrack(explodeEffect, 2.7, 1.0, [explodeEffect, toon, 0]), __getPartTrack(poofEffect, 3.4, 1.0, [poofEffect, target, 0]), __getPartTrack(wallEffect, 4.05, 1.2, [wallEffect, toon, 0]), __getSoundTrack(level, 2, duration=3.1, node=toon), Sequence(Func(face90, target, toon, battle), ActorInterval(toon, 'sprinkle-dust')), Sequence(Wait(delay), Func(__healToon, target, hp))) effectTrack.append(mtrack) track.append(effectTrack) track.append(Func(toon.setHpr, Vec3(180.0, 0.0, 0.0))) track.append(teleportOut(attack, toon)) return track
def __doSmooch(attack, hp = 0): toon = NPCToons.createLocalNPC(attack['npcId']) if toon == None: return targets = attack['toons'] level = 2 battle = attack['battle'] track = Sequence(teleportIn(attack, toon)) lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickTrack = Sequence(Func(MovieUtil.showProps, lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-118, -10.6, -25.9)), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO)) lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') dThrow = 0.5 def getLipPos(toon = toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) effectTrack = Sequence() for target in targets: lipcopy = MovieUtil.copyProp(lips) lipsTrack = Sequence(Wait(tLips), Func(MovieUtil.showProp, lipcopy, render, getLipPos), Func(lipcopy.setBillboardPointWorld), LerpScaleInterval(lipcopy, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval(lipcopy, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lipcopy)) delay = tThrow + dThrow mtrack = Parallel(lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), Sequence(ActorInterval(toon, 'smooch')), Sequence(Wait(delay), ActorInterval(target, 'conked')), Sequence(Wait(delay), Func(__healToon, target, hp))) effectTrack.append(mtrack) effectTrack.append(Func(MovieUtil.removeProps, lipsticks)) track.append(effectTrack) track.append(teleportOut(attack, toon)) track.append(Func(target.clearChat)) return track
def loadToonJuror(self): self.cleanupToonJuror() self.toonJuror = NPCToons.createLocalNPC( ToontownGlobals.LawbotBossBaseJurorNpcId + self.toonJurorIndex) self.toonJuror.hide()
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
def loadToonJuror(self): self.cleanupToonJuror() self.toonJuror = NPCToons.createLocalNPC(ToontownGlobals.LawbotBossBaseJurorNpcId + self.toonJurorIndex) self.toonJuror.hide()
def load(self): self.notify.debug('load') DistributedMinigame.load(self) self.timer = ToontownTimer.ToontownTimer() self.timer.posInTopRightCorner() self.timer.hide() self.room = loader.loadModel('phase_4/models/minigames/matching_room') self.buttonSounds = [] for soundName in self.ButtonSoundNames: self.buttonSounds.append(base.loadSfx(soundName)) self.correctSound = base.loadSfx('phase_4/audio/sfx/MG_pos_buzzer.ogg') self.incorrectSound = base.loadSfx('phase_4/audio/sfx/MG_neg_buzzer.ogg') self.perfectSound = base.loadSfx('phase_4/audio/sfx/MG_win.ogg') self.fallSound = base.loadSfx('phase_4/audio/sfx/MG_Tag_A.ogg') self.music = base.loadMusic(self.bgm) self.waitingText = DirectLabel(text=self.strPleaseWait, text_fg=(0.9, 0.9, 0.9, 1.0), frameColor=(1, 1, 1, 0), text_font=ToontownGlobals.getSignFont(), pos=(0, 0, -.78), scale=0.12) self.roundText = DirectLabel(text=self.strRound % 1, text_fg=self.normalTextColor, frameColor=(1, 1, 1, 0), text_font=ToontownGlobals.getSignFont(), pos=(0.014, 0, -.84), scale=0.12) self.roundText.hide() self.waitingText.hide() matchingGameGui = loader.loadModel('phase_3.5/models/gui/matching_game_gui') minnieArrow = matchingGameGui.find('**/minnieArrow') minnieX = matchingGameGui.find('**/minnieX') minnieCircle = matchingGameGui.find('**/minnieCircle') self.arrows = [None] * 5 for x in xrange(0, 5): self.arrows[x] = minnieArrow.copyTo(hidden) self.arrows[x].hide() self.xs = [None] * 5 for x in xrange(0, 5): self.xs[x] = minnieX.copyTo(hidden) self.xs[x].hide() self.statusBalls = [] self.totalMoves = PatternGameGlobals.INITIAL_ROUND_LENGTH + PatternGameGlobals.ROUND_LENGTH_INCREMENT * (PatternGameGlobals.NUM_ROUNDS - 1) for x in xrange(0, 4): self.statusBalls.append([None] * self.totalMoves) for x in xrange(0, 4): for y in xrange(0, self.totalMoves): self.statusBalls[x][y] = minnieCircle.copyTo(hidden) self.statusBalls[x][y].hide() minnieArrow.removeNode() minnieX.removeNode() minnieCircle.removeNode() matchingGameGui.removeNode() self.toon = NPCToons.createLocalNPC(7010) self.toon.reparentTo(hidden) self.backRowHome = Point3(3, 11, 0) self.backRowXSpacing = 1.8 self.frontRowHome = Point3(0, 18, 0) self.frontRowXSpacing = 3.0 self.stdNumDanceStepPingFrames = self.toon.getNumFrames(self.toonAnimNames[0]) self.stdNumDanceStepPingPongFrames = self.__numPingPongFrames(self.stdNumDanceStepPingFrames) self.buttonPressDelayPercent = (self.stdNumDanceStepPingFrames - 1.0) / self.stdNumDanceStepPingPongFrames self.animPlayRates = [] animPlayRate = 1.4 animPlayRateMult = 1.06 for i in xrange(PatternGameGlobals.NUM_ROUNDS): self.animPlayRates.append(animPlayRate) animPlayRate *= animPlayRateMult return
def load(self): self.notify.debug('load') DistributedMinigame.load(self) self.timer = ToontownTimer.ToontownTimer() self.timer.posInTopRightCorner() self.timer.hide() self.room = loader.loadModel('phase_4/models/minigames/matching_room') self.buttonSounds = [] for soundName in self.ButtonSoundNames: self.buttonSounds.append(base.loadSfx(soundName)) self.correctSound = base.loadSfx('phase_4/audio/sfx/MG_pos_buzzer.ogg') self.incorrectSound = base.loadSfx( 'phase_4/audio/sfx/MG_neg_buzzer.ogg') self.perfectSound = base.loadSfx('phase_4/audio/sfx/MG_win.ogg') self.fallSound = base.loadSfx('phase_4/audio/sfx/MG_Tag_A.ogg') self.music = base.loadMusic(self.bgm) self.waitingText = DirectLabel(text=self.strPleaseWait, text_fg=(0.9, 0.9, 0.9, 1.0), frameColor=(1, 1, 1, 0), text_font=ToontownGlobals.getSignFont(), pos=(0, 0, -.78), scale=0.12) self.roundText = DirectLabel(text=self.strRound % 1, text_fg=self.normalTextColor, frameColor=(1, 1, 1, 0), text_font=ToontownGlobals.getSignFont(), pos=(0.014, 0, -.84), scale=0.12) self.roundText.hide() self.waitingText.hide() matchingGameGui = loader.loadModel( 'phase_3.5/models/gui/matching_game_gui') minnieArrow = matchingGameGui.find('**/minnieArrow') minnieX = matchingGameGui.find('**/minnieX') minnieCircle = matchingGameGui.find('**/minnieCircle') self.arrows = [None] * 5 for x in xrange(0, 5): self.arrows[x] = minnieArrow.copyTo(hidden) self.arrows[x].hide() self.xs = [None] * 5 for x in xrange(0, 5): self.xs[x] = minnieX.copyTo(hidden) self.xs[x].hide() self.statusBalls = [] self.totalMoves = PatternGameGlobals.INITIAL_ROUND_LENGTH + PatternGameGlobals.ROUND_LENGTH_INCREMENT * ( PatternGameGlobals.NUM_ROUNDS - 1) for x in xrange(0, 4): self.statusBalls.append([None] * self.totalMoves) for x in xrange(0, 4): for y in xrange(0, self.totalMoves): self.statusBalls[x][y] = minnieCircle.copyTo(hidden) self.statusBalls[x][y].hide() minnieArrow.removeNode() minnieX.removeNode() minnieCircle.removeNode() matchingGameGui.removeNode() self.toon = NPCToons.createLocalNPC(7010) self.toon.reparentTo(hidden) self.backRowHome = Point3(3, 11, 0) self.backRowXSpacing = 1.8 self.frontRowHome = Point3(0, 18, 0) self.frontRowXSpacing = 3.0 self.stdNumDanceStepPingFrames = self.toon.getNumFrames( self.toonAnimNames[0]) self.stdNumDanceStepPingPongFrames = self.__numPingPongFrames( self.stdNumDanceStepPingFrames) self.buttonPressDelayPercent = (self.stdNumDanceStepPingFrames - 1.0 ) / self.stdNumDanceStepPingPongFrames self.animPlayRates = [] animPlayRate = 1.4 animPlayRateMult = 1.06 for i in xrange(PatternGameGlobals.NUM_ROUNDS): self.animPlayRates.append(animPlayRate) animPlayRate *= animPlayRateMult return
def __doSmooch(attack, hp=0): toon = NPCToons.createLocalNPC(attack['npcId']) if toon == None: return targets = attack['toons'] level = 2 battle = attack['battle'] track = Sequence(teleportIn(attack, toon)) lipstick = globalPropPool.getProp('lipstick') lipstick2 = MovieUtil.copyProp(lipstick) lipsticks = [lipstick, lipstick2] rightHands = toon.getRightHands() dScale = 0.5 lipstickTrack = Sequence( Func(MovieUtil.showProps, lipsticks, rightHands, Point3(-0.27, -0.24, -0.95), Point3(-118, -10.6, -25.9)), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_NEARZERO, MovieUtil.PNT3_ONE), Wait(toon.getDuration('smooch') - 2.0 * dScale), MovieUtil.getScaleIntervals(lipsticks, dScale, MovieUtil.PNT3_ONE, MovieUtil.PNT3_NEARZERO)) lips = globalPropPool.getProp('lips') dScale = 0.5 tLips = 2.5 tThrow = 115.0 / toon.getFrameRate('smooch') dThrow = 0.5 def getLipPos(toon=toon): toon.pose('smooch', 57) toon.update(0) hand = toon.getRightHands()[0] return hand.getPos(render) effectTrack = Sequence() for target in targets: lipcopy = MovieUtil.copyProp(lips) lipsTrack = Sequence( Wait(tLips), Func(MovieUtil.showProp, lipcopy, render, getLipPos), Func(lipcopy.setBillboardPointWorld), LerpScaleInterval(lipcopy, dScale, Point3(3, 3, 3), startScale=MovieUtil.PNT3_NEARZERO), Wait(tThrow - tLips - dScale), LerpPosInterval( lipcopy, dThrow, Point3(target.getPos() + Point3(0, 0, target.getHeight()))), Func(MovieUtil.removeProp, lipcopy)) delay = tThrow + dThrow mtrack = Parallel( lipstickTrack, lipsTrack, __getSoundTrack(level, 2, node=toon), Sequence(ActorInterval(toon, 'smooch')), Sequence(Wait(delay), ActorInterval(target, 'conked')), Sequence(Wait(delay), Func(__healToon, target, hp))) effectTrack.append(mtrack) effectTrack.append(Func(MovieUtil.removeProps, lipsticks)) track.append(effectTrack) track.append(teleportOut(attack, toon)) track.append(Func(target.clearChat)) return track