def getUpdateBrief(self):
     taskInfo = self.getTaskInfo(speech=False)
     locationText = QuestGlobals.getLocationText(self.area, verbose=False).replace('Any Street', '')
     
     if locationText[0].isspace():
         locationText = locationText[1:]
     return '{0} {1} in {2}'.format(QuestGlobals.DEFEAT, taskInfo, locationText).replace('\n', ' ')
 def __init__(self, itemName, itemIcon = QuestGlobals.getPackageIcon()):
     self.itemName = itemName
     self.itemIcon = itemIcon
     
     if False:#self.itemName in GagGlobals.gagIds.values():
         invIcons = loader.loadModel('phase_3.5/models/gui/inventory_icons.bam')
         self.itemIcon = invIcons.find('**/%s' % GagGlobals.InventoryIconByName[self.itemName])
         invIcons.removeNode()
 def __init__(self, itemName, goal, area, recoverChance, itemIcon = QuestGlobals.getPackageIcon(),
         name = QuestGlobals.Any, level = None, levelRange = None, 
     variant = None, dept = None):
     ItemObjective.__init__(self, itemName, itemIcon)
     CogObjective.__init__(self, name, goal, area, level, levelRange, variant, dept)
     
     # We're expecting that the recover chance be (0 <= n <= 100).
     if 0 <= recoverChance <= 100:
         self.recoverChance = recoverChance
     else:
         raise ValueError('RecoverItemObjective: \'recoverChance\' member must be 0 <= n <= 100. '
                          / + 'Instead received {0}.'.format(recoverChance))
    def getProgressUpdateBrief(self):
        taskInfo = ''

        if self.minFloors != QuestGlobals.Any:
            taskInfo += "%s+ Story " % QuestGlobals.getNumName(self.minFloors)
        
        name = '%s Buildings'
        
        if self.dept == QuestGlobals.Any:
            subject = name % CIGlobals.Suit
        else:
            subject = name % self.dept.getName()

        if self.goal > 1:
            subject = CIGlobals.makePlural(subject)

        taskInfo += subject
        return ('{0} of {1} {2} {3}'.format(self.progress, self.goal, taskInfo, CIGlobals.makePastTense(self.Header)))
Пример #5
0
    def showQuests(self):
        assert self is base.localAvatar.questManager
        positions = [(-0.45, 0.75, 0.3), (0.45, 0.75, 0.3),
                     (-0.45, 0.75, -0.3), (0.45, 0.75, -0.3)]

        self.hideQuests()

        for i in range(4):
            quest = None

            if i < len(self.quests.values()):
                quest = self.quests.values()[i]
            poster = QuestGlobals.generatePoster(quest, parent=aspect2d)
            poster.setName('QPoster{0}'.format(i))
            poster.setPos(positions[i])
            poster.setScale(0.95)
            poster.setPythonTag('Data', poster)
            poster.show()
        self.acceptOnce(base.inputStore.ViewQuests + '-up', self.hideQuests)
    def getTaskInfo(self, speech = False):
        taskInfo = ('A ' if not speech else 'a ') if self.goal == 1 else '%d ' % self.goal
        if self.minFloors != QuestGlobals.Any:
            taskInfo += "%s+ Story " % QuestGlobals.getNumName(self.minFloors)
        
        name = self.Name
        if not speech:
            name = '%s Building'
        
        if self.dept == QuestGlobals.Any:
            subject = name % CIGlobals.Suit
        else:
            subject = name % self.dept.getName()

        if self.goal > 1:
            subject = CIGlobals.makePlural(subject)

        taskInfo += subject

        return taskInfo
Пример #7
0
    def __init__(self, quest, parent=aspect2d, **kw):
        self.quest = quest

        # Let's begin building the quest poster.
        bookModel = loader.loadModel(
            'phase_3.5/models/gui/stickerbook_gui.bam')
        questCard = bookModel.find('**/questCard')
        optiondefs = (('relief', None, None), ('image', questCard, None),
                      ('image_scale', (0.8, 1.0, 0.58),
                       None), ('state', DGG.NORMAL, None),
                      ('pos', self.spots[self.quest.getIndex()], None))
        self.defineoptions(kw, optiondefs)
        DirectFrame.__init__(self, relief=None)
        self.initialiseoptions(QuestPoster)

        self._deleteCallback = None
        self.questFrame = DirectFrame(parent=self, relief=None)

        # Quest title text
        self.headline = DirectLabel(parent=self.questFrame,
                                    relief=None,
                                    text=self.quest.getName(),
                                    text_font=CIGlobals.getMinnieFont(),
                                    text_fg=QuestGlobals.TEXT_COLOR,
                                    text_scale=0.05,
                                    text_align=TextNode.ACenter,
                                    text_wordwrap=25.0,
                                    textMayChange=1,
                                    pos=(0, 0, 0.23))

        # Quest information
        self.questInfo = DirectLabel(parent=self.questFrame,
                                     relief=None,
                                     text='',
                                     text_font=CIGlobals.getToonFont(),
                                     text_fg=QuestGlobals.TEXT_COLOR,
                                     text_scale=0.04,
                                     text_align=TextNode.ACenter,
                                     text_wordwrap=TEXT_WORDWRAP,
                                     textMayChange=1,
                                     pos=(QuestGlobals.DEFAULT_INFO_POS))
        self.questInfo.hide()

        self.questInfo02 = DirectLabel(parent=self.questFrame,
                                       relief=None,
                                       text='',
                                       text_font=CIGlobals.getToonFont(),
                                       text_fg=QuestGlobals.TEXT_COLOR,
                                       text_scale=0.04,
                                       text_align=TextNode.ACenter,
                                       text_wordwrap=TEXT_WORDWRAP,
                                       textMayChange=1,
                                       pos=(QuestGlobals.DEFAULT_INFO2_POS))
        self.questInfo02.hide()

        self.locationInfo = DirectLabel(parent=self.questFrame,
                                        relief=None,
                                        text='N/A',
                                        text_font=CIGlobals.getToonFont(),
                                        text_fg=QuestGlobals.TEXT_COLOR,
                                        text_scale=TEXT_SCALE,
                                        text_align=TextNode.ACenter,
                                        text_wordwrap=TEXT_WORDWRAP,
                                        textMayChange=1,
                                        pos=(0, 0, -0.115))
        self.locationInfo.hide()

        # C'mon Brian this one is obvious
        self.rewardText = DirectLabel(parent=self.questFrame,
                                      relief=None,
                                      text='',
                                      text_fg=QuestGlobals.REWARD_RED,
                                      text_scale=0.0425,
                                      text_align=TextNode.ALeft,
                                      text_wordwrap=17.0,
                                      textMayChange=1,
                                      pos=(-0.36, 0, -0.26))
        self.rewardText.hide()

        self.lPictureFrame = DirectFrame(
            parent=self.questFrame,
            relief=None,
            image=bookModel.find('**/questPictureFrame'),
            image_scale=QuestGlobals.IMAGE_SCALE_SMALL,
            text='',
            text_pos=(0, -0.11),
            text_fg=QuestGlobals.TEXT_COLOR,
            text_scale=TEXT_SCALE,
            text_align=TextNode.ACenter,
            text_wordwrap=11.0,
            pos=(QuestGlobals.DEFAULT_LEFT_PICTURE_POS),
            textMayChange=1)
        self.lPictureFrame.hide()

        self.rPictureFrame = DirectFrame(
            parent=self.questFrame,
            relief=None,
            image=bookModel.find('**/questPictureFrame'),
            image_scale=QuestGlobals.IMAGE_SCALE_SMALL,
            text='',
            text_pos=(0, -0.11),
            text_fg=QuestGlobals.TEXT_COLOR,
            text_scale=TEXT_SCALE,
            text_align=TextNode.ACenter,
            text_wordwrap=11.0,
            textMayChange=1,
            pos=(QuestGlobals.DEFAULT_RIGHT_PICTURE_POS))
        self.rPictureFrame['image_color'] = Vec4(*QuestGlobals.GREEN)
        self.rPictureFrame.hide()

        self.lQuestIcon = DirectFrame(parent=self.lPictureFrame,
                                      relief=None,
                                      text=' ',
                                      text_font=CIGlobals.getSuitFont(),
                                      text_pos=(0, -0.03),
                                      text_fg=QuestGlobals.TEXT_COLOR,
                                      text_scale=0.13,
                                      text_align=TextNode.ACenter,
                                      text_wordwrap=13.0,
                                      textMayChange=1)
        self.lQuestIcon.setColorOff(-1)

        self.rQuestIcon = DirectFrame(parent=self.rPictureFrame,
                                      relief=None,
                                      text=' ',
                                      text_font=CIGlobals.getSuitFont(),
                                      text_pos=(0, -0.03),
                                      text_fg=QuestGlobals.TEXT_COLOR,
                                      text_scale=0.13,
                                      text_align=TextNode.ACenter,
                                      text_wordwrap=13.0,
                                      textMayChange=1)
        self.rQuestIcon.setColorOff(-1)

        head = SuitBank.PennyPincher.getHead().generate()
        head.setDepthTest(True)
        head.setDepthWrite(True)
        head.setScale(0.25)
        for part in head.getChildren():
            part.setDepthTest(True)
            part.setDepthWrite(True)
        self.fitGeometry(head, fFlip=1)
        self.rQuestIcon['geom'] = head
        self.rQuestIcon['geom_scale'] = QuestGlobals.IMAGE_SCALE_SMALL
        self.rQuestIcon['geom_pos'] = Point3(0, 10, -0.05)
        self.rQuestIcon['geom_hpr'] = Point3(180, 0, 0)
        self.rQuestIcon.initialiseoptions(DirectFrame)

        self.auxText = DirectLabel(parent=self.questFrame,
                                   relief=None,
                                   text='Recover',
                                   text_font=CIGlobals.getToonFont(),
                                   text_scale=QuestGlobals.QPauxText,
                                   text_fg=QuestGlobals.TEXT_COLOR,
                                   text_align=TextNode.ACenter,
                                   pos=(QuestGlobals.DEFAULT_AUX_POS),
                                   textMayChange=1)
        self.auxText.hide()

        self.middleText = DirectLabel(parent=self.questFrame,
                                      relief=None,
                                      text='from:',
                                      text_font=CIGlobals.getToonFont(),
                                      text_scale=QuestGlobals.QPauxText,
                                      text_fg=QuestGlobals.TEXT_COLOR,
                                      text_align=TextNode.ACenter,
                                      pos=(QuestGlobals.DEFAULT_MIDDLE_POS),
                                      textMayChange=1)
        self.middleText.hide()

        self.questProgress = DirectWaitBar(
            parent=self.questFrame,
            relief=DGG.SUNKEN,
            frameSize=(-0.95, 0.95, -0.1, 0.12),
            borderWidth=(0.025, 0.025),
            scale=0.2,
            frameColor=(0.945, 0.875, 0.706, 1.0),
            barColor=(0.5, 0.7, 0.5, 1),
            text='0/0',
            text_font=CIGlobals.getToonFont(),
            text_scale=0.19,
            text_fg=(0.05, 0.14, 0.4, 1),
            text_align=TextNode.ACenter,
            text_pos=(0, -0.05),  #-0.02
            pos=(0, 0, -0.2425))
        self.questProgress.hide()

        rewardFrameGeom = loader.loadModel(
            'phase_4/models/gui/gag_shop_purchase_gui.bam')
        self.rewardFrame = DirectFrame(
            parent=self.questFrame,
            relief=None,
            geom=rewardFrameGeom.find('**/Goofys_Sign'),
            geom_scale=(0.615, 0, 0.4),
            pos=(-0.01, 0, -0.25))

        jellybeanJar = QuestGlobals.getFilmIcon()
        self.lRewardFrame = DirectFrame(
            parent=self.rewardFrame,
            relief=None,
            geom=jellybeanJar,
            geom_scale=QuestGlobals.TP_ACCESS_SCALE,
            pos=(QuestGlobals.LEFT_TP_ACCESS_POS))

        self.lRewardInfo = DirectFrame(
            parent=self.questFrame,
            relief=None,
            geom=rewardFrameGeom.find('**/Char_Pnl'),
            geom_scale=(0.15, 0, 0.1275),
            text='#1',
            text_font=CIGlobals.getToonFont(),
            text_scale=0.04,
            text_fg=(0, 0, 0, 1),
            text_align=TextNode.ACenter,
            text_pos=(0, -0.01),
            pos=(-0.285, 0, -0.255))
        self.lRewardInfo.setBin('gui-popup', 40)

        self.rRewardFrame = DirectFrame(parent=self.rewardFrame,
                                        relief=None,
                                        geom=QuestGlobals.getJBIcon(),
                                        geom_scale=QuestGlobals.JB_JAR_SCALE,
                                        pos=QuestGlobals.RIGHT_JB_JAR_POS)

        self.rRewardInfo = DirectFrame(
            parent=self.questFrame,
            relief=None,
            geom=rewardFrameGeom.find('**/Char_Pnl'),
            geom_scale=(0.15, 0, 0.1275),
            text='25',
            text_font=CIGlobals.getToonFont(),
            text_scale=0.04,
            text_fg=(0, 0, 0, 1),
            text_align=TextNode.ACenter,
            text_pos=(0, -0.01),
            pos=(0.2725, 0, -0.255))
        self.rRewardInfo.setBin('gui-popup', 40)

        rewardFrameGeom.removeNode()

        # This is the rotated text on the side.
        self.sideInfo = DirectLabel(parent=self.questFrame,
                                    relief=None,
                                    text=QuestGlobals.JUST_FOR_FUN,
                                    text_fg=(0.0, 0.439, 1.0, 1.0),
                                    text_shadow=(0, 0, 0, 1),
                                    pos=(-0.2825, 0, 0.2),
                                    scale=0.03)
        self.sideInfo.setR(-30)
        self.sideInfo.hide()

        bookModel.removeNode()
        self.laffMeter = None
        return
Пример #8
0
    def update(self):
        objective = self.quest.getCurrentObjective()
        objective.setupQuestPoster()

        # Let's setup the picture frames and info.
        self.questInfo.setPos(self.quest.getInfoPos())
        self.questInfo['text'] = self.quest.getInfoText()
        self.questInfo02.setPos(self.quest.getInfo02Pos())
        self.questInfo02['text'] = self.quest.getInfo02Text()
        self.lPictureFrame.setPos(self.quest.getLeftPicturePos())
        self.rPictureFrame.setPos(self.quest.getRightPicturePos())
        self.lQuestIcon['geom'] = self.quest.getLeftIconGeom()
        if isinstance(objective, VisitNPCObjective) or isinstance(
                objective, DefeatObjective):
            if objective.getDidEditLeft():
                head = self.quest.getLeftIconGeom()
                icon = self.lQuestIcon
                scale = self.quest.getLeftIconScale()
            else:
                head = self.quest.getRightIconGeom()
                icon = self.rQuestIcon
                scale = self.quest.getRightIconScale()

            isHead = True if type(head) == ToonHead else head.getName() == (
                '%sHead' % CIGlobals.Suit)

            if isHead:
                head.setDepthWrite(1)
                head.setDepthTest(1)
                self.fitGeometry(head, fFlip=1)
            else:
                icon.setScale(scale)

            if isinstance(objective,
                          VisitNPCObjective) and icon == self.rQuestIcon:
                icon.setHpr(180, 0, 0)
                icon.setPos(icon.getX(), icon.getY(), icon.getZ() + 0.05)
            elif isinstance(objective, CogObjective):
                if icon == self.lQuestIcon:
                    if objective.cog != QuestGlobals.Any:
                        icon.setScale(QuestGlobals.IMAGE_SCALE_SMALL)
                        icon.setPos(icon.getX(), icon.getY(),
                                    icon.getZ() - 0.04)
                    else:
                        head.setScale(self.quest.getLeftIconScale())
                else:
                    if objective.cog != QuestGlobals.Any:
                        head.setScale(1.2)
                    else:
                        icon.setScale(self.quest.getRightIconScale())

            icon['geom'] = head
            icon['geom_scale'] = QuestGlobals.IMAGE_SCALE_SMALL

            #self.lQuestIcon['geom_hpr'] = (180, 0, 0)
            #self.lQuestIcon['geom_pos'] = (0, 10, -0.04)
        else:
            self.lQuestIcon['geom'] = self.quest.getLeftIconGeom()
            self.lQuestIcon['geom_scale'] = self.quest.getLeftIconScale()
        #self.rQuestIcon['geom'] = self.quest.getRightIconGeom()
        #self.rQuestIcon['geom_scale'] = self.quest.getRightIconScale()

        if self.questInfo02['text'] == '':
            self.rPictureFrame.hide()
            self.questInfo02.hide()
        else:
            self.rPictureFrame.show()
            self.questInfo02.show()

        self.middleText['text'] = self.quest.getMiddleText()
        if not self.middleText['text'] == '':
            self.middleText.show()

        self.questInfo.show()
        self.lPictureFrame.show()

        # Let's set the location text.
        self.locationInfo['text'] = self.quest.getLocationText()
        self.locationInfo['text_pos'] = (0, self.quest.getLocationY())
        self.locationInfo.show()

        # Let's set the progress bar up.
        if self.quest.currentObjective.HasProgress:
            self.questProgress['text'] = self.quest.getProgressText()
            if len(self.questProgress['text']
                   ) > 0 and not objective.isComplete():
                self.questProgress.show()
                self.questProgress['range'] = objective.goal
                self.questProgress['value'] = objective.getProgress() & pow(
                    2, 16) - 1
            else:
                self.questProgress.hide()

        # Let's setup the aux text.
        self.auxText.setPos(self.quest.getAuxPos())
        self.auxText['text'] = self.quest.getAuxText()
        self.auxText.show()

        maxHP = base.localAvatar.getMaxHealth()

        # Let's setup the rewards.
        for i in xrange(0, len(self.quest.getRewards())):
            reward = self.quest.getRewards()[i]
            frame = self.lRewardFrame if (i == 0) else self.rRewardFrame
            info = self.lRewardInfo if (i == 0) else self.rRewardInfo
            rType = reward.getType()
            if (rType == RewardType.JELLYBEANS):
                frame['pos'] = QuestGlobals.LEFT_JB_JAR_POS if (
                    i == 0) else QuestGlobals.RIGHT_JB_JAR_POS
                frame['geom'] = QuestGlobals.getJBIcon()
                frame['geom_scale'] = QuestGlobals.JB_JAR_SCALE
                info['text'] = str(reward.getModifier())
            elif (rType == RewardType.TELEPORT_ACCESS
                  or rType == RewardType.GAG_FRAME):
                frame['pos'] = QuestGlobals.LEFT_TP_ACCESS_POS if (
                    i == 0) else QuestGlobals.RIGHT_TP_ACCESS_POS
                frame['geom'] = QuestGlobals.getTPAccessIcon() if (
                    rType == RewardType.TELEPORT_ACCESS
                ) else QuestGlobals.getFilmIcon()
                frame['geom_scale'] = QuestGlobals.TP_ACCESS_SCALE
                info['text'] = 'N/A' if (
                    rType == RewardType.TELEPORT_ACCESS
                ) else '#%s' % (str(reward.getModifier()))
            elif (rType == RewardType.LAFF_POINTS):
                frame.initialiseoptions(DirectFrame)
                r, g, b, _ = base.localAvatar.getHeadColor()
                pos = QuestGlobals.LEFT_LAFF_METER_POS if (
                    i == 0) else QuestGlobals.RIGHT_LAFF_METER_POS

                # Create the laff meter with the new health.
                hp = maxHP + reward.getModifier()
                laffMeter = LaffOMeter()
                laffMeter.generate(r,
                                   g,
                                   b,
                                   base.localAvatar.getAnimal(),
                                   maxHP=hp,
                                   initialHP=hp)

                # Let's position the laff meter.
                frame['geom'] = laffMeter
                frame['geom_scale'] = QuestGlobals.LAFF_METER_SCALE
                frame.setPos(pos)
                info['text'] = '+%s' % (str(reward.getModifier()))
                laffMeter.destroy()
                laffMeter = None

        # Hide or show the other reward depending on if there's 2 rewards.
        if (len(self.quest.getRewards()) == 1):
            self.rRewardFrame.hide()
            self.rRewardInfo.hide()
        else:
            self.rRewardFrame.show()
            self.rRewardInfo.show()

        if objective.finished():
            self.setColor(Vec4(*QuestGlobals.LIGHT_GREEN))
            self.sideInfo['text'] = 'Completed!'
            self.sideInfo.show()

        self.questInfo.initialiseoptions(DirectLabel)
        self.questInfo02.initialiseoptions(DirectLabel)
        self.locationInfo.initialiseoptions(DirectLabel)
        self.lPictureFrame.initialiseoptions(DirectFrame)
        self.rPictureFrame.initialiseoptions(DirectFrame)
        self.lQuestIcon.initialiseoptions(DirectFrame)
        self.rQuestIcon.initialiseoptions(DirectFrame)
        self.auxText.initialiseoptions(DirectLabel)
        self.middleText.initialiseoptions(DirectLabel)
        #self.lRewardFrame.initialiseoptions(DirectFrame)
        #self.rRewardFrame.initialiseoptions(DirectFrame)
        self.sideInfo.initialiseoptions(DirectLabel)
        self.lPictureFrame['image_color'] = self.quest.getPictureFrameColor()
        self.rPictureFrame['image_color'] = self.quest.getPictureFrameColor()
 def __init__(self, itemName, goal, npcId, 
              itemIcon = QuestGlobals.getPackageIcon(), showAsComplete = 0):
     ItemObjective.__init__(self, itemName, itemIcon)
     VisitNPCObjective.__init__(self, npcId, goal, showAsComplete = showAsComplete)
 def getTaskInfo(self, speech=False):
     if self.npcZone != 0:
         locationText = QuestGlobals.getLocationText(self.area, verbose=False)
         return '{0} {1} at {2}'.format(QuestGlobals.VISIT, NPCGlobals.NPCToonNames[self.npcId], locationText)
     else:
         return '{0} a {1}'.format(QuestGlobals.VISIT, NPCGlobals.lHQOfficerM)
Пример #11
0
    def makeQuestNotes(self, quests = None):
        notes = []
        if not quests:
            quests = self.quests.values()
        for quest in quests:
            objective = quest.currentObjective
            note = QuestNote.QuestNote(quest.index)
            isDefeatObjective = objective.type in (Quests.DefeatCog,
             Quests.DefeatCogDept,
             Quests.DefeatCogInvasion,
             Quests.DefeatCogTournament,
             Quests.DefeatCogLevel)
            heading = None
            if isDefeatObjective:
                heading = Quests.DefeatText
            elif objective.type in [Quests.VisitNPC, Quests.VisitHQOfficer]:
                heading = Quests.VisitText
            note.setHeading(heading)
            taskInfo = None
            if isDefeatObjective:
                if objective.goal > 1:
                    taskInfo = '%d ' % objective.goal
                else:
                    taskInfo = 'a '
                if objective.type == Quests.DefeatCog:
                    if objective.subject == Quests.Any:
                        taskInfo += CIGlobals.Suits
                    elif objective.goal > 1:
                        taskInfo += QuestGlobals.makePlural(CIGlobals.SuitNames[objective.subject])
                    else:
                        taskInfo += CIGlobals.SuitNames[objective.subject]
                elif objective.type in (Quests.DefeatCogInvasion, Quests.DefeatCogTournament, Quests.DefeatCogDept):
                    if objective.goal > 1:
                        if objective.type == Quests.DefeatCogDept:
                            taskInfo += QuestGlobals.AbbrToDept[objective.subject]
                        else:
                            taskInfo += QuestGlobals.makePlural(objective.subject)
                    elif objective.type == Quests.DefeatCogDept:
                        taskInfo += QuestGlobals.makeSingular(QuestGlobals.AbbrToDept[objective.subject])
                    else:
                        taskInfo += objective.subject
                elif objective.type == Quests.DefeatCogLevel:
                    if objective.goal > 1:
                        taskInfo += 'Level %d+ %s' % (objective.minCogLevel, CIGlobals.Suits)
                    else:
                        taskInfo += 'Level %d+ %s' % (objective.minCogLevel, CIGlobals.Suit)
                if objective.area == Quests.Any:
                    taskInfo += '\nAnywhere'
                else:
                    taskInfo += '\nin ' + ZoneUtil.getHoodId(objective.area)
            elif objective.type == Quests.VisitNPC:
                nameOfNPC = CIGlobals.NPCToonNames[objective.npcId]
                placeOfNPC = CIGlobals.zone2TitleDict[objective.npcZone][0]
                taskInfo = nameOfNPC + '\nat ' + placeOfNPC
            elif objective.type == Quests.VisitHQOfficer:
                taskInfo = 'an HQ Officer\nat a Toon HQ'
            note.setTaskInfo(taskInfo)
            progress = ''
            if isDefeatObjective:
                if not objective.isComplete():
                    if isDefeatObjective:
                        progress = '%d of %d ' % (objective.progress, objective.goal) + QuestGlobals.makePastTense(Quests.DefeatText)
                        note.setProgress(progress)
                else:
                    note.setCompleted(1)
            elif objective.type == Quests.VisitNPC:
                streetZone = ZoneUtil.getBranchZone(objective.npcZone)
                if streetZone % 1000 >= 100:
                    streetName = CIGlobals.BranchZone2StreetName[streetZone]
                else:
                    streetName = 'the Playground'
                hoodName = ZoneUtil.getHoodId(streetZone, 1)
                progress = 'on %s\nin %s' % (streetName, hoodName)
                note.setProgress(progress)
            elif objective.type == Quests.VisitHQOfficer:
                progress = 'Any Street\nAny Playground'
                note.setProgress(progress)
            reward = ''
            if quest.rewardType == Quests.RewardJellybeans:
                reward = 'For %d jellybeans'
            elif quest.rewardType == Quests.RewardHealth:
                reward = 'For a %d point Laff boost'
            elif quest.rewardType == Quests.RewardAccess:
                reward = 'For access to %s'
            elif quest.rewardType == Quests.RewardNone:
                reward = 'For no reward'
            if '%s' in reward or '%d' in reward:
                note.setReward(reward % quest.rewardValue)
            else:
                note.setReward(reward)
            notes.append(note)

        return notes
    def makeQuestNotes(self, quests = None):
        notes = []
        if not quests:
            quests = self.quests.values()
        for quest in quests:

            objective = quest.currentObjective

            note = QuestNote.QuestNote(quest.index)

            isDefeatObjective = objective.type in (Quests.DefeatCog, Quests.DefeatCogDept,
                Quests.DefeatCogInvasion, Quests.DefeatCogTournament, Quests.DefeatCogLevel)

            heading = None
            if isDefeatObjective:
                heading = Quests.DefeatText
            elif objective.type in [Quests.VisitNPC, Quests.VisitHQOfficer]:
                heading = Quests.VisitText
            note.setHeading(heading)

            taskInfo = None
            if isDefeatObjective:
                if objective.goal > 1:
                    taskInfo = "%d " % objective.goal
                else:
                    taskInfo = "a "
                if objective.type == Quests.DefeatCog:
                    if objective.subject == Quests.Any:
                        taskInfo += CIGlobals.Suits
                    else:
                        if objective.goal > 1:
                            taskInfo += QuestGlobals.makePlural(CIGlobals.SuitNames[objective.subject])
                        else:
                            taskInfo += CIGlobals.SuitNames[objective.subject]
                elif objective.type in (Quests.DefeatCogInvasion, Quests.DefeatCogTournament, Quests.DefeatCogDept):
                    if objective.goal > 1:
                        if objective.type == Quests.DefeatCogDept:
                            taskInfo += QuestGlobals.AbbrToDept[objective.subject]
                        elif objective.type == Quests.DefeatCogInvasion:
                            taskInfo += QuestGlobals.QuestSubjects[1]
                        elif objective.type == Quests.DefeatCogTournament:
                            taskInfo += QuestGlobals.QuestSubjects[6]
                    else:
                        if objective.type == Quests.DefeatCogDept:
                            taskInfo += QuestGlobals.makeSingular(QuestGlobals.AbbrToDept[objective.subject])
                        elif objective.type == Quests.DefeatCogInvasion:
                            taskInfo += QuestGlobals.makeSingular(QuestGlobals.QuestSubjects[1])
                        elif objective.type == Quests.DefeatCogTournament:
                            taskInfo += QuestGlobals.makeSingular(QuestGlobals.QuestSubjects[6])
                elif objective.type == Quests.DefeatCogLevel:
                    if objective.goal > 1:
                        taskInfo += "Level %d+ %s" % (objective.minCogLevel, CIGlobals.Suits)
                    else:
                        taskInfo += "Level %d+ %s" % (objective.minCogLevel, CIGlobals.Suit)
                if objective.area == Quests.Any:
                    taskInfo += "\nAnywhere"
                else:
                    taskInfo += "\nin " + ZoneUtil.getHoodId(objective.area)
            elif objective.type == Quests.VisitNPC:
                nameOfNPC = CIGlobals.NPCToonNames[objective.npcId]
                placeOfNPC = CIGlobals.zone2TitleDict[objective.npcZone][0]
                taskInfo = nameOfNPC + "\nat " + placeOfNPC
            elif objective.type == Quests.VisitHQOfficer:
                taskInfo = "an HQ Officer\nat a Toon HQ"
            note.setTaskInfo(taskInfo)

            progress = ""
            if isDefeatObjective:
                if not objective.isComplete():
                    if isDefeatObjective:
                        progress = "%d of %d " % (objective.progress, objective.goal) + QuestGlobals.makePastTense(Quests.DefeatText)
                        note.setProgress(progress)
                else:
                    note.setCompleted(1)
            elif objective.type == Quests.VisitNPC:
                streetZone = ZoneUtil.getBranchZone(objective.npcZone)
                if streetZone % 1000 >= 100:
                    streetName = CIGlobals.BranchZone2StreetName[streetZone]
                else:
                    streetName = "the Playground"
                hoodName = ZoneUtil.getHoodId(streetZone, 1)
                progress = "on %s\nin %s" % (streetName, hoodName)
                note.setProgress(progress)
            elif objective.type == Quests.VisitHQOfficer:
                progress = "Any Street\nAny Playground"
                note.setProgress(progress)

            reward = ""
            if quest.rewardType == Quests.RewardJellybeans:
                reward = "For %d jellybeans"
            elif quest.rewardType == Quests.RewardHealth:
                reward = "For a %d point Laff boost"
            elif quest.rewardType == Quests.RewardAccess:
                reward = "For access to %s"
            elif quest.rewardType == Quests.RewardNone:
                reward = "For no reward"
            if '%s' in reward or '%d' in reward:
                note.setReward(reward % quest.rewardValue)
            else:
                note.setReward(reward)

            notes.append(note)
        return notes