Ejemplo n.º 1
0
 def getSafezoneId(self):
     if self.trolleyZoneOverride is not None:
         return self.trolleyZoneOverride
     if hasattr(toonbase, 'minigameSafezoneId'):
         return MinigameGlobals.getSafezoneId(toonbase.minigameSafezoneId)
     return MinigameGlobals.getSafezoneId(self.trolleyZone)
     return
Ejemplo n.º 2
0
    def setEveryoneDone(self):
        if not self.hasLocalToon:
            return
        if self.gameFSM.getCurrentState().getName() != 'play':
            self.notify.warning('ignoring setEveryoneDone msg')
            return
        self.notify.debug('setEveryoneDone')

        def endGame(task, self=self):
            if not CatchGameGlobals.EndlessGame:
                self.gameOver()
            return Task.done

        self.notify.debug('num fruits: %s' % self.numFruits)
        self.notify.debug('num catches: %s' % self.fruitsCaught)
        self.timer.hide()
        if config.GetBool('want-blueprint4-ARG', False):
            MinigameGlobals.generateDebugARGPhrase()
        if self.fruitsCaught >= self.numFruits:
            self.notify.debug('perfect game!')
            perfectTextSubnode = hidden.attachNewNode(
                self.__genText(TTLocalizer.CatchGamePerfect))
            perfectText = hidden.attachNewNode('perfectText')
            perfectTextSubnode.reparentTo(perfectText)
            frame = self.__textGen.getCardActual()
            offsetY = -abs(frame[2] + frame[3]) / 2.0
            perfectTextSubnode.setPos(0, 0, offsetY)
            perfectText.setColor(1, 0.1, 0.1, 1)

            def fadeFunc(t, text=perfectText):
                text.setColorScale(1, 1, 1, t)

            def destroyText(text=perfectText):
                text.removeNode()

            textTrack = Sequence(
                Func(perfectText.reparentTo, aspect2d),
                Parallel(
                    LerpScaleInterval(perfectText,
                                      duration=0.5,
                                      scale=0.3,
                                      startScale=0.0),
                    LerpFunctionInterval(fadeFunc,
                                         fromData=0.0,
                                         toData=1.0,
                                         duration=0.5)), Wait(2.0),
                Parallel(
                    LerpScaleInterval(perfectText, duration=0.5, scale=1.0),
                    LerpFunctionInterval(fadeFunc,
                                         fromData=1.0,
                                         toData=0.0,
                                         duration=0.5,
                                         blendType='easeIn')),
                Func(destroyText), WaitInterval(0.5), Func(endGame, None))
            soundTrack = SoundInterval(self.sndPerfect)
            self.perfectIval = Parallel(textTrack, soundTrack)
            self.perfectIval.start()
        else:
            taskMgr.doMethodLater(1, endGame, self.EndGameTaskName)
        return
    def enterShowScores(self):
        self.notify.debug('enterShowScores')
        lerpTrack = Parallel()
        lerpDur = 0.5
        lerpTrack.append(Parallel(LerpPosInterval(self.goalBar, lerpDur, Point3(0, 0, -.6), blendType='easeInOut'), LerpScaleInterval(self.goalBar, lerpDur, Vec3(self.goalBar.getScale()) * 2.0, blendType='easeInOut')))
        tY = 0.6
        bY = -.05
        lX = -.5
        cX = 0
        rX = 0.5
        scorePanelLocs = (((cX, bY),),
         ((lX, bY), (rX, bY)),
         ((cX, tY), (lX, bY), (rX, bY)),
         ((lX, tY),
          (rX, tY),
          (lX, bY),
          (rX, bY)))
        scorePanelLocs = scorePanelLocs[self.numPlayers - 1]
        for i in xrange(self.numPlayers):
            panel = self.scorePanels[i]
            pos = scorePanelLocs[i]
            panel.wrtReparentTo(aspect2d)
            lerpTrack.append(Parallel(LerpPosInterval(panel, lerpDur, Point3(pos[0], 0, pos[1]), blendType='easeInOut'), LerpScaleInterval(panel, lerpDur, Vec3(panel.getScale()) * 2.0, blendType='easeInOut')))

        self.showScoreTrack = Parallel(lerpTrack, Sequence(Wait(MazeGameGlobals.SHOWSCORES_DURATION), Func(self.gameOver)))
        self.showScoreTrack.start()

        #For the Alpha Blueprint ARG
        if config.GetBool('want-blueprint4-ARG', False):
            MinigameGlobals.generateDebugARGPhrase()
Ejemplo n.º 4
0
    def enterShowScores(self):
        self.notify.debug('enterShowScores')
        lerpTrack = Parallel()
        lerpDur = 0.5
        lerpTrack.append(Parallel(LerpPosInterval(self.goalBar, lerpDur, Point3(0, 0, -.6), blendType='easeInOut'), LerpScaleInterval(self.goalBar, lerpDur, Vec3(self.goalBar.getScale()) * 2.0, blendType='easeInOut')))
        tY = 0.6
        bY = -.05
        lX = -.5
        cX = 0
        rX = 0.5
        scorePanelLocs = (((cX, bY),),
         ((lX, bY), (rX, bY)),
         ((cX, tY), (lX, bY), (rX, bY)),
         ((lX, tY),
          (rX, tY),
          (lX, bY),
          (rX, bY)))
        scorePanelLocs = scorePanelLocs[self.numPlayers - 1]
        for i in xrange(self.numPlayers):
            panel = self.scorePanels[i]
            pos = scorePanelLocs[i]
            panel.wrtReparentTo(aspect2d)
            lerpTrack.append(Parallel(LerpPosInterval(panel, lerpDur, Point3(pos[0], 0, pos[1]), blendType='easeInOut'), LerpScaleInterval(panel, lerpDur, Vec3(panel.getScale()) * 2.0, blendType='easeInOut')))

        self.showScoreTrack = Parallel(lerpTrack, Sequence(Wait(MazeGameGlobals.SHOWSCORES_DURATION), Func(self.gameOver)))
        self.showScoreTrack.start()

        #For the Alpha Blueprint ARG
        if base.config.GetBool('want-blueprint4-ARG', False):
            MinigameGlobals.generateDebugARGPhrase()
Ejemplo n.º 5
0
 def getSafezoneId(self):
     if self.trolleyZoneOverride is not None:
         return self.trolleyZoneOverride
     else:
         if hasattr(self.air, 'minigameSafezoneId'):
             return MinigameGlobals.getSafezoneId(
                 self.air.minigameSafezoneId)
         return MinigameGlobals.getSafezoneId(self.trolleyZone)
 def getSafezoneId(self):
     if self.trolleyZoneOverride is not None:
         return self.trolleyZoneOverride
     
     if hasattr(self.air, 'minigameSafezoneId'):
         return MinigameGlobals.getSafezoneId(self.air.minigameSafezoneId)
     
     return MinigameGlobals.getSafezoneId(self.trolleyZone)
Ejemplo n.º 7
0
    def setEveryoneDone(self):
        if not self.hasLocalToon:
            return
        if self.gameFSM.getCurrentState().getName() != "play":
            self.notify.warning("ignoring setEveryoneDone msg")
            return
        self.notify.debug("setEveryoneDone")

        def endGame(task, self=self):
            if not CatchGameGlobals.EndlessGame:
                self.gameOver()
            return Task.done

        self.notify.debug("num fruits: %s" % self.numFruits)
        self.notify.debug("num catches: %s" % self.fruitsCaught)
        self.timer.hide()

        # For the Alpha Blueprint ARG
        if base.config.GetBool("want-blueprint4-ARG", False):
            MinigameGlobals.generateDebugARGPhrase()

        if self.fruitsCaught >= self.numFruits:
            self.notify.debug("perfect game!")
            perfectTextSubnode = hidden.attachNewNode(self.__genText(TTLocalizer.CatchGamePerfect))
            perfectText = hidden.attachNewNode("perfectText")
            perfectTextSubnode.reparentTo(perfectText)
            frame = self.__textGen.getCardActual()
            offsetY = -abs(frame[2] + frame[3]) / 2.0
            perfectTextSubnode.setPos(0, 0, offsetY)
            perfectText.setColor(1, 0.1, 0.1, 1)

            def fadeFunc(t, text=perfectText):
                text.setColorScale(1, 1, 1, t)

            def destroyText(text=perfectText):
                text.removeNode()

            textTrack = Sequence(
                Func(perfectText.reparentTo, aspect2d),
                Parallel(
                    LerpScaleInterval(perfectText, duration=0.5, scale=0.3, startScale=0.0),
                    LerpFunctionInterval(fadeFunc, fromData=0.0, toData=1.0, duration=0.5),
                ),
                Wait(2.0),
                Parallel(
                    LerpScaleInterval(perfectText, duration=0.5, scale=1.0),
                    LerpFunctionInterval(fadeFunc, fromData=1.0, toData=0.0, duration=0.5, blendType="easeIn"),
                ),
                Func(destroyText),
                WaitInterval(0.5),
                Func(endGame, None),
            )
            soundTrack = SoundInterval(self.sndPerfect)
            self.perfectIval = Parallel(textTrack, soundTrack)
            self.perfectIval.start()
        else:
            taskMgr.doMethodLater(1, endGame, self.EndGameTaskName)
        return
Ejemplo n.º 8
0
 def getSafezoneId(self):
     """
     returns 1000-multiple safezone zoneId;
     can be matched to safezone IDs in ToontownGlobals.py
     """
     if self.trolleyZoneOverride is not None:
         return self.trolleyZoneOverride
     if hasattr(base, 'minigameSafezoneId'):
         return MinigameGlobals.getSafezoneId(base.minigameSafezoneId)
     return MinigameGlobals.getSafezoneId(self.trolleyZone)
Ejemplo n.º 9
0
 def getDifficulty(self):
     if self.difficultyOverride is not None:
         return self.difficultyOverride
     if hasattr(toonbase, 'minigameDifficulty'):
         return float(toonbase.minigameDifficulty)
     return MinigameGlobals.getDifficulty(self.getSafezoneId())
     return
Ejemplo n.º 10
0
 def getDifficulty(self):
     if self.difficultyOverride is not None:
         return self.difficultyOverride
     else:
         if hasattr(self.air, 'minigameDifficulty'):
             return float(self.air.minigameDifficulty)
         return MinigameGlobals.getDifficulty(self.getSafezoneId())
    def enterFrameworkCleanup(self):
        self.notify.debug('BASE: enterFrameworkCleanup: normalExit=%s' % self.normalExit)
        scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId())
        if not self.hasScoreMult():
            scoreMult = 1.0
        self.notify.debug('score multiplier: %s' % scoreMult)
        for avId in self.avIdList:
            self.scoreDict[avId] *= scoreMult

        scoreList = []
        for avId in self.avIdList:
            if self.normalExit:
                score = int(self.scoreDict[avId] + 0.5)
            else:
                score = 0
            if simbase.air.newsManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY) or simbase.air.newsManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH):
                score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier
            logEvent = False
            if score > 255:
                score = 255
                logEvent = True
            elif score < 0:
                score = 0
                logEvent = True
            if logEvent:
                self.air.writeServerEvent('suspicious', avId, 'got %s jellybeans playing minigame %s in zone %s' % (score, self.minigameId, self.getSafezoneId()))
            scoreList.append(score)

        self.requestDelete()
        self.handleRegularPurchaseManager(scoreList)
        self.frameworkFSM.request('frameworkOff')
Ejemplo n.º 12
0
 def setDifficultyOverrides(self, difficultyOverride, trolleyZoneOverride):
     self.difficultyOverride = difficultyOverride
     if self.difficultyOverride is not None:
         self.difficultyOverride = MinigameGlobals.QuantizeDifficultyOverride(
             difficultyOverride)
     self.trolleyZoneOverride = trolleyZoneOverride
     return
 def getDifficulty(self):
     if self.difficultyOverride is not None:
         return self.difficultyOverride
     
     if hasattr(self.air, 'minigameDifficulty'):
         return float(self.air.minigameDifficulty)
     
     return MinigameGlobals.getDifficulty(self.getSafezoneId())
Ejemplo n.º 14
0
 def setDifficultyOverrides(self, difficultyOverride, trolleyZoneOverride):
     """
     This must be called before the object is generated
     difficultyOverride is the difficulty value that should be used
     and sent to the clients
     trolleyZoneOverride is similar
     """
     self.difficultyOverride = difficultyOverride
     if self.difficultyOverride is not None:
         # modify difficultyOverride so that it will convert to an
         # integer and back without losing any precision
         self.difficultyOverride = (
             MinigameGlobals.QuantizeDifficultyOverride(difficultyOverride))
     self.trolleyZoneOverride = trolleyZoneOverride
Ejemplo n.º 15
0
    def enterFrameworkCleanup(self):
        self.notify.debug("BASE: enterFrameworkCleanup: normalExit=%s" %
                          self.normalExit)

        # scale the scores based on the neighborhood
        # use self.getSafezoneId to pick up debug overrides
        scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId())
        if not self.hasScoreMult():
            scoreMult = 1.0
        self.notify.debug('score multiplier: %s' % scoreMult)
        for avId in self.avIdList:
            assert avId not in [0, None]
            self.scoreDict[avId] *= scoreMult

        # create a score list that parallels the avIdList
        scoreList = []
        if not self.normalExit:
            # if game exited abnormally, pick a uniform number of points
            # for all toons
            randReward = random.randrange(DEFAULT_POINTS, MAX_POINTS + 1)
        for avId in self.avIdList:
            assert avId not in [0, None]
            # put in some bogus points if we have requested abort
            if self.normalExit:
                score = int(self.scoreDict[avId] + .5)
                if score > 255:
                    self.notify.warning(
                        'avatar %s got %s jellybeans playing minigame %s in zone %s'
                        % (avId, score, self.minigameId, self.getSafezoneId()))
                    score = 255
                elif score < 0:
                    # RAU just in case I miss something in ice game
                    score = 0
                scoreList.append(score)
            else:
                scoreList.append(randReward)

        # Delete yourself
        self.requestDelete()

        if self.metagameRound > -1:
            self.handleMetagamePurchaseManager(scoreList)
        else:
            self.handleRegularPurchaseManager(scoreList)

        self.frameworkFSM.request('frameworkOff')
    def enterFrameworkCleanup(self):
        self.notify.debug('BASE: enterFrameworkCleanup: normalExit=%s' %
                          self.normalExit)
        scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId())
        if not self.hasScoreMult():
            scoreMult = 1.0

        self.notify.debug('score multiplier: %s' % scoreMult)
        for avId in self.avIdList:
            self.scoreDict[avId] *= scoreMult

        scoreList = []
        if not self.normalExit:
            randReward = random.randrange(DEFAULT_POINTS, MAX_POINTS + 1)

        for avId in self.avIdList:
            if self.normalExit:
                score = int(self.scoreDict[avId] + 0.5)
            else:
                score = randReward
            if ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY in simbase.air.holidayManager.currentHolidays or ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH in simbase.air.holidayManager.currentHolidays:
                score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier

            logEvent = False
            if score > 255:
                score = 255
                logEvent = True
            elif score < 0:
                score = 0
                logEvent = True

            if logEvent:
                self.air.writeServerEvent(
                    'suspicious', avId,
                    'got %s jellybeans playing minigame %s in zone %s' %
                    (score, self.minigameId, self.getSafezoneId()))

            scoreList.append(score)

        self.requestDelete()
        if self.metagameRound > -1:
            self.handleMetagamePurchaseManager(scoreList)
        else:
            self.handleRegularPurchaseManager(scoreList)
        self.frameworkFSM.request('frameworkOff')
 def enterFrameworkCleanup(self):
     self.notify.debug('BASE: enterFrameworkCleanup: normalExit=%s' % self.normalExit)
     scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId())
     if not self.hasScoreMult():
         scoreMult = 1.0
     
     self.notify.debug('score multiplier: %s' % scoreMult)
     for avId in self.avIdList:
         self.scoreDict[avId] *= scoreMult
     
     scoreList = []
     if not self.normalExit:
         randReward = random.randrange(DEFAULT_POINTS, MAX_POINTS + 1)
     
     for avId in self.avIdList:
         if self.normalExit:
             score = int(self.scoreDict[avId] + 0.5)
         else:
             score = randReward
         if ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY in simbase.air.holidayManager.currentHolidays or ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH in simbase.air.holidayManager.currentHolidays:
             score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier
         
         logEvent = False
         if score > 255:
             score = 255
             logEvent = True
         elif score < 0:
             score = 0
             logEvent = True
         
         if logEvent:
             self.air.writeServerEvent('suspicious', avId, 'got %s jellybeans playing minigame %s in zone %s' % (score, self.minigameId, self.getSafezoneId()))
         
         scoreList.append(score)
     
     self.requestDelete()
     if self.metagameRound > -1:
         self.handleMetagamePurchaseManager(scoreList)
     else:
         self.handleRegularPurchaseManager(scoreList)
     self.frameworkFSM.request('frameworkOff')
    def enterFrameworkCleanup(self):
        self.notify.debug("BASE: enterFrameworkCleanup: normalExit=%s" % self.normalExit)
        scoreMult = MinigameGlobals.getScoreMult(self.getSafezoneId())
        if not self.hasScoreMult():
            scoreMult = 1.0
        self.notify.debug("score multiplier: %s" % scoreMult)
        for avId in self.avIdList:
            self.scoreDict[avId] *= scoreMult

        scoreList = []
        for avId in self.avIdList:
            if self.normalExit:
                score = int(self.scoreDict[avId] + 0.5)
            else:
                score = 0
            if simbase.air.newsManager.isHolidayRunning(
                ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY
            ) or simbase.air.newsManager.isHolidayRunning(ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH):
                score *= MinigameGlobals.JellybeanTrolleyHolidayScoreMultiplier
            logEvent = False
            if score > 255:
                score = 255
                logEvent = True
            elif score < 0:
                score = 0
                logEvent = True
            if logEvent:
                self.air.writeServerEvent(
                    "suspicious",
                    avId,
                    "got %s jellybeans playing minigame %s in zone %s" % (score, self.minigameId, self.getSafezoneId()),
                )
            scoreList.append(score)

        self.requestDelete()
        self.handleRegularPurchaseManager(scoreList)
        self.frameworkFSM.request("frameworkOff")
Ejemplo n.º 19
0
            def printPeriodTable(name, numSuitList, fasterSuits,
                                 tTransFunc=None):
                str = '%s = {\n' % name
                # cycle through the safezones and calculate the
                # corresponding suit speeds
                for zone in MinigameGlobals.SafeZones:
                    str += '%s%s : {' % (' '*4, zone)

                    difficulty = MinigameGlobals.getDifficulty(zone)
                    minSpeed = lerp(self.MinSuitSpeedRange[0],
                                    self.MinSuitSpeedRange[1],
                                    difficulty)
                    maxSpeed = lerp(self.MaxSuitSpeedRange[0],
                                    self.MaxSuitSpeedRange[1],
                                    difficulty)
                    # all the 'slower' suits will be slower than this speed,
                    # all the 'faster' suits will be faster.
                    midSpeed = (minSpeed + maxSpeed) / 2.

                    # cycle through the suit counts (how many suits
                    # will be in play)
                    for numSuits in numSuitList:
                        # there must be an even number of suits
                        assert not numSuits % 2
                        speeds = []
                        for i in xrange(numSuits/2):
                            if fasterSuits:
                                i += numSuits/2
                            t = i / float(numSuits-1)
                            # map t into 0..1
                            if fasterSuits:
                                t -= .5
                            t *= 2.
                            # apply any time transformation function
                            if tTransFunc != None:
                                t = tTransFunc(t)

                            if fasterSuits:
                                speed = lerp(midSpeed, maxSpeed, t)
                            else:
                                speed = lerp(minSpeed, midSpeed, t)
                            speeds.append(speed)

                        # calculate the corresponding suit periods
                        def calcUpdatePeriod(speed):
                            # result in tics
                            # SUIT_TIC_FREQ: tics/sec
                            # CELL_WIDTH: feet
                            # speed: feet/sec
                            # tics = ((tics/sec) * feet) / (feet/sec)
                            return int((float(MazeGameGlobals.SUIT_TIC_FREQ) * \
                                        float(MazeData.CELL_WIDTH)) / speed)

                        periods = map(calcUpdatePeriod, speeds)

                        filler = ""
                        if numSuits < 10:
                            filler = " "

                        str += '%s%s : %s,\n%s%s' % (numSuits, filler, periods,
                                                     ' '*4, ' '*8)
                    str += '},\n'
                str += '%s}' % (' '*4)
                print str
 def getDifficulty(self):
     if self.difficultyOverride is not None:
         return self.difficultyOverride
     if hasattr(base, "minigameDifficulty"):
         return float(base.minigameDifficulty)
     return MinigameGlobals.getDifficulty(self.getSafezoneId())
 def getSafezoneId(self):
     if self.trolleyZoneOverride is not None:
         return self.trolleyZoneOverride
     if hasattr(base, "minigameSafezoneId"):
         return MinigameGlobals.getSafezoneId(base.minigameSafezoneId)
     return MinigameGlobals.getSafezoneId(self.trolleyZone)