Ejemplo n.º 1
0
Archivo: Npc.py Proyecto: jaimodha/MMOG
class Npc():
    def __init__(self, controlPointId, id, anchorx, anchory, anchorz, render,
                 team):
        self.id = id
        self.anchorx = anchorx
        self.anchory = anchory
        self.anchorz = anchorz
        self.controlPointId = controlPointId
        self.target = None
        self.isMoving = False
        self.health = 200
        self.isCurrentUser = False
        self.damage = 8
        self.attackTimer = 0
        self._is_dead = False
        self._team = team

        self.render = render
        '''Initializing NPC actors'''
        self.npc = Actor(
            "models/priest", {
                "walk": "models/priest-walk",
                "attack": "models/priest-attack",
                "hurt": "models/priest-hit",
                "die": "models/priest-die"
            })
        if self._team == 0:
            self.npcTex = loader.loadTexture("models/tex/guard_red.png")
        else:
            self.npcTex = loader.loadTexture("models/tex/guard_blue.png")
        self.npc.setTexture(self.npcTex)
        self.npc.setScale(0.5, 0.5, 0.5)
        self.npc.clearColor()
        self.npc.clearColorScale()
        self.npc.setColor(255, 0, 0, 0)
        self.npc.setColorScale(255, 0, 0, 0)
        self.npc.reparentTo(self.render)
        self.npc.setPos(anchorx, anchory, anchorz)

        self.AIchar = AICharacter("npc" + str(self.id), self.npc, 100, 0.05, 5)
        self.AIbehaviors = self.AIchar.getAiBehaviors()

        self.hb = HealthBar(1.5, value=self.health)
        #self._floater = NodePath(PandaNode("char_info"))
        #self._floater.reparentTo(self.npc)
        self.hb.setPos(0, 0, 11.9)
        self.hb.reparentTo(self.npc)
        #self.hb.reparentTo(self.npc)

    def renderBlue(self, AIworld):
        if not self._is_dead:
            self.AIbehaviors.removeAi("pursue")
            self.npc.detachNode()

        print "Started delete procedure for npc ",
        print self.id
        self.npc.delete()
        self.npc = Actor(
            "models/priest", {
                "walk": "models/priest-walk",
                "attack": "models/priest-attack",
                "hurt": "models/priest-hit",
                "die": "models/priest-die"
            })
        self.npcTex = loader.loadTexture("models/tex/guard_blue.png")
        self.npc.setTexture(self.npcTex)
        self.npc.setScale(0.5, 0.5, 0.5)
        self.npc.clearColor()
        self.npc.clearColorScale()
        self.npc.setColor(255, 0, 0, 0)
        self.npc.setColorScale(255, 0, 0, 0)
        self.npc.reparentTo(self.render)
        self.npc.setPos(self.anchorx, self.anchory, self.anchorz)

        AIworld.removeAiChar("npc" + str(self.id))
        self.AIchar = AICharacter("npc" + str(self.id), self.npc, 100, 0.05, 5)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        AIworld.addAiChar(self.AIchar)

        self.hb = HealthBar(1.5, value=self.health)
        self.hb.setPos(0, 0, 18.1)
        self.hb.reparentTo(self.npc)
        #self.hb.reparentTo(self.npc)

    def renderRed(self, AIworld):
        if not self._is_dead:
            self.AIbehaviors.removeAi("pursue")
            self.npc.detachNode()

        self.npc.delete()
        self.npc = Actor(
            "models/priest", {
                "walk": "models/priest-walk",
                "attack": "models/priest-attack",
                "hurt": "models/priest-hit",
                "die": "models/priest-die"
            })
        self.npcTex = loader.loadTexture("models/tex/guard_red.png")
        self.npc.setTexture(self.npcTex)
        self.npc.setScale(0.5, 0.5, 0.5)
        self.npc.clearColor()
        self.npc.clearColorScale()
        self.npc.setColor(255, 0, 0, 0)
        self.npc.setColorScale(255, 0, 0, 0)
        self.npc.reparentTo(self.render)
        self.npc.setPos(self.anchorx, self.anchory, self.anchorz)

        AIworld.removeAiChar("npc" + str(self.id))
        self.AIchar = AICharacter("npc" + str(self.id), self.npc, 100, 0.05, 5)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        AIworld.addAiChar(self.AIchar)
        AIworld.update()

        self.hb = HealthBar(1.5, value=self.health)
        self.hb.setPos(0, 0, 8.1)
        self.hb.reparentTo(self.npc)

    def switchTeam(self, AIworld):
        print self.id,
        print " from team ",
        print self._team,
        print " getting deleted."
        if self._team == 0:
            self._team = 1
            self.renderBlue(AIworld)
        else:
            self._team = 0
            self.renderRed(AIworld)

        if self.isCurrentUser:
            main.freeDeadNpc(self.id)

        self.target = None
        self.isMoving = False
        self.health = 200
        self.isCurrentUser = False
        self.damage = 8
        self.attackTimer = 0
        self._is_dead = False

    def set_health(self, health):
        self.health = health

    def take_damage(self, health_change):
        health = self.health
        if health <= health_change and not self._is_dead:
            self.killNpc()
        else:
            health = health - health_change
            self.set_health(health)
            self.hb.setValue(self.health)
            self.npc.play("hurt")

    def killNpc(self):
        self.set_health(0)
        self.hb.setValue(0)
        self.AIbehaviors.removeAi("pursue")
        hurt_interval = self.npc.actorInterval("hurt")
        death_interval = self.npc.actorInterval("die")
        seq = Sequence(hurt_interval, death_interval)
        seq.start()
        self.npc.pose("die", 45)
        self._is_dead = True
        self.npc.detachNode()
        if self.isCurrentUser:
            main.freeDeadNpc(self.id)
            #main.cManager.sendRequest(Constants.CMSG_NPCDEATH, [self.id])
            print Constants.CMSG_NPCDEATH,
            print " + ",
            print self.id

    def chaseTarget(self, target, status=False):
        if (not self.isMoving):
            self.target = target
            self.AIbehaviors.pursue(self.target)
            self.npc.loop("walk")
            self.isMoving = True
            self.isCurrentUser = status

    def stopChase(self):

        #self.AIbehaviors.pauseAi("pursue")
        if not self._is_dead:
            self.AIbehaviors.removeAi("pursue")
            p1 = LerpHprInterval(self.npc, 4, Point3(180, 0, 0))
            p2 = LerpPosInterval(
                self.npc, 4, Point3(self.anchorx, self.anchory, self.anchorz))
            animInterval = self.npc.actorInterval("walk", loop=1, duration=4)
            p2.start()
            p1.start()
            animInterval.start()
            self.isMoving = False
            self.target = None
            self.isCurrentUser = False

    def givNPCDistance(self, charachter):
        x = self.npc.getX()
        y = self.npc.getY()
        z = self.npc.getZ()
        minDist = math.sqrt((charachter.getX() - x) * (charachter.getX() - x) +
                            (charachter.getY() - y) * (charachter.getY() - y) +
                            (charachter.getZ() - z) * (charachter.getZ() - z))
        return minDist

    def checkNpcIsAlive(self):
        if (self.health > 0):
            return True
        else:
            return False

    def shouldAttack(self, currentTime, cManager):
        if not self._is_dead:
            if self.isMoving:
                if self.attackTimer > 0:
                    self.attackTimer = self.attackTimer - currentTime
                    #print self.attackTimer
                if self.AIbehaviors.behaviorStatus("pursue") == "done":
                    #self.npc.stop("walk")
                    #print self.npc.getAnimControl("walk")
                    if self.attackTimer <= 0:
                        if self.npc.getAnimControl("walk").isPlaying():
                            self.npc.stop("walk")
                        if not self.npc.getAnimControl("attack").isPlaying():
                            #self.npc.loop("attack")
                            self.npc.play("attack")
                            self.attackTimer = 2
                            #myInterval = self.npc.actorInterval("attack")
                            #seq = Sequence(myInterval)
                            #seq.append(Wait(3))
                            #seq.start()
                        if self.isCurrentUser:
                            cManager.sendRequest(Constants.CMSG_NPCATTACK,
                                                 [self.id, self.damage])

                if self.AIbehaviors.behaviorStatus("pursue") == "active":
                    if self.npc.getAnimControl("attack").isPlaying():
                        self.npc.stop("attack")
                    if not self.npc.getAnimControl("walk").isPlaying():
                        self.npc.loop("walk")
Ejemplo n.º 2
0
Archivo: Npc.py Proyecto: jaimodha/MMOG
class Npc():

    def __init__(self,controlPointId,id, anchorx, anchory, anchorz,render,team):
        self.id = id
        self.anchorx = anchorx
        self.anchory = anchory
        self.anchorz = anchorz
        self.controlPointId = controlPointId
        self.target = None
        self.isMoving = False
        self.health = 200
        self.isCurrentUser = False
        self.damage = 8
        self.attackTimer = 0
        self._is_dead = False
        self._team = team
        
        self.render = render
        '''Initializing NPC actors'''
        self.npc = Actor("models/priest",
                                {"walk": "models/priest-walk", "attack":"models/priest-attack", "hurt":"models/priest-hit", "die":"models/priest-die"})
        if self._team==0:
            self.npcTex = loader.loadTexture("models/tex/guard_red.png")
        else:
            self.npcTex = loader.loadTexture("models/tex/guard_blue.png")
        self.npc.setTexture(self.npcTex)
        self.npc.setScale(0.5, 0.5, 0.5)
        self.npc.clearColor()
        self.npc.clearColorScale()
        self.npc.setColor(255, 0, 0, 0)
        self.npc.setColorScale(255, 0, 0, 0)
        self.npc.reparentTo(self.render)
        self.npc.setPos(anchorx,anchory,anchorz)
        
        self.AIchar = AICharacter("npc"+str(self.id),self.npc, 100, 0.05, 5)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        
        self.hb = HealthBar(1.5, value=self.health)
        #self._floater = NodePath(PandaNode("char_info"))
        #self._floater.reparentTo(self.npc)
        self.hb.setPos(0, 0, 11.9)
        self.hb.reparentTo(self.npc)
        #self.hb.reparentTo(self.npc)
        
    def renderBlue(self,AIworld):
        if not self._is_dead:
            self.AIbehaviors.removeAi("pursue")
            self.npc.detachNode()
        
        print "Started delete procedure for npc ",
        print self.id    
        self.npc.delete()
        self.npc = Actor("models/priest",
                                {"walk": "models/priest-walk", "attack":"models/priest-attack", "hurt":"models/priest-hit", "die":"models/priest-die"})
        self.npcTex = loader.loadTexture("models/tex/guard_blue.png")
        self.npc.setTexture(self.npcTex)
        self.npc.setScale(0.5, 0.5, 0.5)
        self.npc.clearColor()
        self.npc.clearColorScale()
        self.npc.setColor(255, 0, 0, 0)
        self.npc.setColorScale(255, 0, 0, 0)
        self.npc.reparentTo(self.render)
        self.npc.setPos(self.anchorx,self.anchory,self.anchorz)
        
        AIworld.removeAiChar("npc"+str(self.id))
        self.AIchar = AICharacter("npc"+str(self.id),self.npc, 100, 0.05, 5)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        AIworld.addAiChar(self.AIchar)
        
        self.hb = HealthBar(1.5, value=self.health)
        self.hb.setPos(0, 0, 18.1)
        self.hb.reparentTo(self.npc)
        #self.hb.reparentTo(self.npc)
        
    def renderRed(self,AIworld):
        if not self._is_dead:
            self.AIbehaviors.removeAi("pursue")
            self.npc.detachNode()
            
        self.npc.delete()
        self.npc = Actor("models/priest",
                                {"walk": "models/priest-walk", "attack":"models/priest-attack", "hurt":"models/priest-hit", "die":"models/priest-die"})
        self.npcTex = loader.loadTexture("models/tex/guard_red.png")
        self.npc.setTexture(self.npcTex)
        self.npc.setScale(0.5, 0.5, 0.5)
        self.npc.clearColor()
        self.npc.clearColorScale()
        self.npc.setColor(255, 0, 0, 0)
        self.npc.setColorScale(255, 0, 0, 0)
        self.npc.reparentTo(self.render)
        self.npc.setPos(self.anchorx,self.anchory,self.anchorz)
        
        AIworld.removeAiChar("npc"+str(self.id))
        self.AIchar = AICharacter("npc"+str(self.id),self.npc, 100, 0.05, 5)
        self.AIbehaviors = self.AIchar.getAiBehaviors()
        AIworld.addAiChar(self.AIchar)
        AIworld.update()
        
        self.hb = HealthBar(1.5, value=self.health)
        self.hb.setPos(0, 0, 8.1)
        self.hb.reparentTo(self.npc)
        
    def switchTeam(self,AIworld):
        print self.id,
        print " from team ",
        print self._team,
        print " getting deleted."
        if self._team==0:
            self._team=1
            self.renderBlue(AIworld)
        else:
            self._team=0
            self.renderRed(AIworld)
            
        if self.isCurrentUser:
            main.freeDeadNpc(self.id)
            
        self.target = None
        self.isMoving = False
        self.health = 200
        self.isCurrentUser = False
        self.damage = 8
        self.attackTimer = 0
        self._is_dead = False
            
        
    def set_health(self, health):
        self.health = health
        
    def take_damage(self, health_change):
        health = self.health
        if health <= health_change and not self._is_dead:
            self.killNpc()
        else:
            health = health-health_change
            self.set_health(health)
            self.hb.setValue(self.health)
            self.npc.play("hurt")
            
    def killNpc(self):
        self.set_health(0)
        self.hb.setValue(0)
        self.AIbehaviors.removeAi("pursue")
        hurt_interval = self.npc.actorInterval("hurt")
        death_interval = self.npc.actorInterval("die")
        seq = Sequence(hurt_interval, death_interval)
        seq.start()
        self.npc.pose("die",45)
        self._is_dead = True
        self.npc.detachNode()
        if self.isCurrentUser:
            main.freeDeadNpc(self.id)
            #main.cManager.sendRequest(Constants.CMSG_NPCDEATH, [self.id])
            print Constants.CMSG_NPCDEATH,
            print " + ",
            print self.id
            
            
    def chaseTarget(self, target, status = False):
        if(not self.isMoving):
            self.target = target
            self.AIbehaviors.pursue(self.target)
            self.npc.loop("walk")
            self.isMoving = True
            self.isCurrentUser = status
            
    def stopChase(self):
        
        #self.AIbehaviors.pauseAi("pursue")
        if not self._is_dead:
            self.AIbehaviors.removeAi("pursue")
            p1 = LerpHprInterval(self.npc, 4, Point3(180,0,0))
            p2 = LerpPosInterval(self.npc, 4, Point3(self.anchorx, self.anchory, self.anchorz))
            animInterval = self.npc.actorInterval("walk", loop = 1, duration=4)
            p2.start()
            p1.start()
            animInterval.start()
            self.isMoving = False
            self.target = None
            self.isCurrentUser = False
        
    def givNPCDistance(self,charachter):
        x = self.npc.getX()
        y = self.npc.getY()
        z = self.npc.getZ()
        minDist = math.sqrt( (charachter.getX()-x)*(charachter.getX()-x) + (charachter.getY()-y)*(charachter.getY()-y) + (charachter.getZ()-z)*(charachter.getZ()-z) )
        return minDist
    
    def checkNpcIsAlive(self):
        if(self.health>0):
            return True
        else:
            return False
                         
    def shouldAttack(self,currentTime,cManager):
        if not self._is_dead:
            if self.isMoving:
                if self.attackTimer>0:
                    self.attackTimer = self.attackTimer-currentTime
                    #print self.attackTimer
                if self.AIbehaviors.behaviorStatus("pursue")=="done":
                    #self.npc.stop("walk")
                    #print self.npc.getAnimControl("walk")
                    if self.attackTimer<=0:
                            if self.npc.getAnimControl("walk").isPlaying():
                                self.npc.stop("walk")
                            if not self.npc.getAnimControl("attack").isPlaying():
                                #self.npc.loop("attack")
                                self.npc.play("attack")
                                self.attackTimer = 2
                                #myInterval = self.npc.actorInterval("attack")
                                #seq = Sequence(myInterval)
                                #seq.append(Wait(3))
                                #seq.start()
                            if self.isCurrentUser:
                                cManager.sendRequest(Constants.CMSG_NPCATTACK, [self.id, self.damage])
                
                if self.AIbehaviors.behaviorStatus("pursue")=="active":
                    if self.npc.getAnimControl("attack").isPlaying():
                        self.npc.stop("attack")
                    if not self.npc.getAnimControl("walk").isPlaying():
                        self.npc.loop("walk") 
class GameTest(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)

        base.disableMouse()

        self.makeAcog = loader.loadModel(
            "phase_5/models/cogdominium/tt_m_ara_cbr_barrelRoom.bam")
        self.makeAcog.reparentTo(render)
        self.stomper1 = (self.makeAcog.find('**/stomper_GRP_01'))
        self.stomper2 = (self.makeAcog.find('**/stomper_GRP_02'))
        self.stomper3 = (self.makeAcog.find('**/stomper_GRP_03'))
        self.stomper4 = (self.makeAcog.find('**/stomper_GRP_04'))
        self.stomper5 = (self.makeAcog.find('**/stomper_GRP_05'))
        self.stomper6 = (self.makeAcog.find('**/stomper_GRP_06'))
        self.stomper7 = (self.makeAcog.find('**/stomper_GRP_07'))
        self.stomper8 = (self.makeAcog.find('**/stomper_GRP_08'))
        self.stomper9 = (self.makeAcog.find('**/stomper_GRP_09'))
        self.stomper10 = (self.makeAcog.find('**/stomper_GRP_10'))
        self.stomper11 = (self.makeAcog.find('**/stomper_GRP_11'))
        self.stomper12 = (self.makeAcog.find('**/stomper_GRP_12'))
        self.stomper3.setPos(0, 0, 18.00)
        self.stomper5.setPos(0, 0, 10.00)
        self.stomper4.setPos(0, 0, 22.00)
        self.stomper2.setPos(0, 0, 7.00)
        self.stomper7.setPos(0, 0, 0)
        self.stomper8.setPos(0, 0, 5.00)
        self.stomper9.setPos(0, 0, 13.00)
        self.stomper10.setPos(0, 0, 10.00)
        self.stomper11.setPos(0, 0, 22.00)
        self.stomper12.setPos(0, 0, 7.00)
        self.lStomper = loader.loadModel(
            'phase_9/models/cogHQ/square_stomper.bam')
        self.lStomper.setHpr(-90, 0, 180)
        self.lStomper.reparentTo(render)
        self.lStomper.setScale(3)
        self.lStomper.setPos(-12.5, 0, 3)
        self.rStomper = loader.loadModel(
            'phase_9/models/cogHQ/square_stomper.bam')
        self.rStomper.setHpr(90, 0, 0)
        self.rStomper.reparentTo(render)
        self.rStomper.setScale(3)
        self.rStomper.setPos(12.5, 0, 3)
        self.lStomper.find('**/shaft').setScale(1, 3, 1)
        self.rStomper.find('**/shaft').setScale(1, 3, 1)
        self.lStomper.hide()
        self.rStomper.hide()

        self.music = loader.loadMusic(
            "phase_3/audio/bgm/cc_make-a-cog-theme.wav")
        self.music.play()
        self.music.setLoop(True)

        font = self.loader.loadFont(
            "phase_3/models/fonts/vtRemingtonPortable.ttf")

        self.elevator = loader.loadModel(
            "phase_5/models/cogdominium/cogdominiumElevator.bam")
        self.elevator.reparentTo(self.render)
        self.elevator.setY(25.37)
        self.elevator.find('**/floor_light_buttons').removeNode()
        self.rightDoor = (self.elevator.find('**/right_door'))
        self.leftDoor = (self.elevator.find('**/left_door'))
        self.leftDoor.setX(3.50)
        self.rightDoor.setX(-3.50)

        self.skelCog = Actor(
            "phase_5/models/char/cogC_robot-zero.bam", {
                'neutral': 'phase_3.5/models/char/suitC-neutral.bam',
                'victory': 'phase_4/models/char/suitC-victory.bam',
                'walk': 'phase_3.5/models/char/suitC-walk.bam'
            })
        self.skelCog.reparentTo(self.render)
        self.skelCog.setPos(-16, 0, -4.76)
        self.skelCog.loop('neutral')
        self.skelCog.setH(180)

        self.explosion = self.loader.loadModel(
            "phase_3.5/models/props/explosion.bam")
        self.explosion.reparentTo(self.render)
        self.explosion.setPos(0, -2, 3)
        self.explosion.hide()

        self.flyThru = self.loader.loadModel(
            "phase_5/models/cogdominium/tt_m_gui_csa_flyThru.bam")
        self.flyThru.reparentTo(self.render)
        self.flyThru.setScale(15.42)
        self.flyThru.setPos(-2.90, -8.61, 7.60)
        self.flyThru.find('**/blankScreen_locator').removeNode()
        self.flyThru.find('**/buttonUp_locator').removeNode()
        self.flyThru.find('**/buttonDown_locator').removeNode()
        self.flyThru.find('**/buttonHover_locator').removeNode()
        self.flyThru.hide()

        self.Lawbot = Actor(
            'phase_3.5/models/char/suitC-mod.bam', {
                'neutral': 'phase_3.5/models/char/suitC-neutral.bam',
                'victory': 'phase_4/models/char/suitC-victory.bam',
                'walk': 'phase_3.5/models/char/suitC-walk.bam'
            })
        self.Lawbot.reparentTo(render)
        self.Lawbot.loop('neutral')
        self.TorsoTex = loader.loadTexture('phase_3.5/maps/l_blazer.jpg')
        self.Lawbot.find('**/torso').setTexture(self.TorsoTex, 1)
        self.ArmTex = loader.loadTexture('phase_3.5/maps/l_sleeve.jpg')
        self.Lawbot.find('**/arms').setTexture(self.ArmTex, 1)
        self.LegTex = loader.loadTexture('phase_3.5/maps/l_leg.jpg')
        self.Lawbot.find('**/legs').setTexture(self.LegTex, 1)
        self.Head = loader.loadModel(
            'phase_3.5/models/char/suitC-heads.bam').find('**/flunky')
        self.headTexture = loader.loadTexture(
            "phase_3.5/maps/bottom-feeder.jpg")
        self.Head.reparentTo(self.Lawbot.find('**/joint_head'))
        self.Lawbot.findAllMatches('**/joint_head').setTexture(
            self.headTexture, 1)
        self.icon = loader.loadModel('phase_3/models/gui/cog_icons.bam')
        self.icon.reparentTo(render)
        self.icon.reparentTo(self.Lawbot.find('**/joint_attachMeter'))
        self.icon.find('**/MoneyIcon').removeNode()
        self.icon.find('**/cog').removeNode()
        self.icon.find('**/SalesIcon').removeNode()
        self.icon.find('**/CorpIcon').removeNode()
        self.icon.setH(180)
        self.icon.setScale(0.70)
        self.Lawbot.setH(180.00)
        self.Lawbot.setTransparency(TransparencyAttrib.MAlpha)
        self.Lawbot.setColor(0.0, 0.0, 1.0, 0.7)
        self.Lawbot.find('**/hands').setColor(0.0, 0.0, 0.0, 0.0)
        self.Lawbot.hide()
        Name = TextNode("nametag")
        Name.setText("Bottem Feeder\nLawbot\nLevel 1")
        Name.setFont(font)
        self.nameTag = render.attachNewNode(Name)
        self.nameTag.setBillboardAxis()
        self.nameTag.reparentTo(self.Lawbot.find('**/joint_nameTag'))
        self.nameTag.setZ(7.51)
        Name.setAlign(TextNode.ACenter)
        Name.setCardColor(0.8, 0.8, 0.8, 0.5)
        Name.setCardAsMargin(0.1, 0, 0, -0.2)
        Name.setCardDecal(True)
        Name.setTextColor(0, 0, 0, 1.0)
        self.nameTag.setScale(0.33)

        self.Cashbot = Actor(
            'phase_3.5/models/char/suitC-mod.bam', {
                'neutral': 'phase_3.5/models/char/suitC-neutral.bam',
                'victory': 'phase_4/models/char/suitC-victory.bam',
                'walk': 'phase_3.5/models/char/suitC-walk.bam'
            })
        self.Cashbot.reparentTo(render)
        self.Cashbot.loop('neutral')
        self.TorsoTex = loader.loadTexture('phase_3.5/maps/m_blazer.jpg')
        self.Cashbot.find('**/torso').setTexture(self.TorsoTex, 1)
        self.ArmTex = loader.loadTexture('phase_3.5/maps/m_sleeve.jpg')
        self.Cashbot.find('**/arms').setTexture(self.ArmTex, 1)
        self.LegTex = loader.loadTexture('phase_3.5/maps/m_leg.jpg')
        self.Cashbot.find('**/legs').setTexture(self.LegTex, 1)
        self.Head = loader.loadModel(
            'phase_3.5/models/char/suitC-heads.bam').find('**/coldcaller')
        self.Head.reparentTo(self.Cashbot.find('**/joint_head'))
        self.icon = loader.loadModel('phase_3/models/gui/cog_icons.bam')
        self.icon.reparentTo(render)
        self.icon.reparentTo(self.Cashbot.find('**/joint_attachMeter'))
        self.icon.find('**/SalesIcon').removeNode()
        self.icon.find('**/cog').removeNode()
        self.icon.find('**/LegalIcon').removeNode()
        self.icon.find('**/CorpIcon').removeNode()
        self.icon.setH(180)
        self.icon.setScale(0.70)
        self.Cashbot.setH(180.00)
        self.Cashbot.setTransparency(TransparencyAttrib.MAlpha)
        self.Cashbot.setColor(0.0, 1.0, 0.0, 0.5)
        self.Cashbot.find('**/hands').setColor(0.0, 0.0, 0.0, 0.0)
        self.Cashbot.hide()
        Name = TextNode("nametag")
        Name.setText("Short Change\nCashbot\nLevel 1")
        Name.setFont(font)
        self.nameTag = render.attachNewNode(Name)
        self.nameTag.setBillboardAxis()
        self.nameTag.reparentTo(self.Cashbot.find('**/joint_nameTag'))
        self.nameTag.setZ(7.51)
        Name.setAlign(TextNode.ACenter)
        Name.setCardColor(0.8, 0.8, 0.8, 0.5)
        Name.setCardAsMargin(0.1, 0, 0, -0.2)
        Name.setCardDecal(True)
        Name.setTextColor(0, 0, 0, 1.0)
        self.nameTag.setScale(0.33)
        self.Cashbot.hide()

        self.Sellbot = Actor(
            'phase_3.5/models/char/suitC-mod.bam', {
                'neutral': 'phase_3.5/models/char/suitC-neutral.bam',
                'victory': 'phase_4/models/char/suitC-victory.bam',
                'walk': 'phase_3.5/models/char/suitC-walk.bam'
            })
        self.Sellbot.reparentTo(render)
        self.Sellbot.loop('neutral')
        self.TorsoTex = loader.loadTexture('phase_3.5/maps/s_blazer.jpg')
        self.Sellbot.find('**/torso').setTexture(self.TorsoTex, 1)
        self.ArmTex = loader.loadTexture('phase_3.5/maps/s_sleeve.jpg')
        self.Sellbot.find('**/arms').setTexture(self.ArmTex, 1)
        self.LegTex = loader.loadTexture('phase_3.5/maps/s_leg.jpg')
        self.Sellbot.find('**/legs').setTexture(self.LegTex, 1)
        self.Head = loader.loadModel(
            'phase_3.5/models/char/suitC-heads.bam').find('**/coldcaller')
        self.Head.reparentTo(self.Sellbot.find('**/joint_head'))
        self.Head.reparentTo(self.Sellbot.find('**/joint_head'))
        self.icon = loader.loadModel('phase_3/models/gui/cog_icons.bam')
        self.icon.reparentTo(render)
        self.icon.reparentTo(self.Sellbot.find('**/joint_attachMeter'))
        self.icon.find('**/MoneyIcon').removeNode()
        self.icon.find('**/cog').removeNode()
        self.icon.find('**/LegalIcon').removeNode()
        self.icon.find('**/CorpIcon').removeNode()
        self.Head.setColor(0, 0, 1, 0.4)
        self.icon.setH(180)
        self.icon.setScale(0.70)
        self.Sellbot.setH(180.00)
        self.Sellbot.setTransparency(TransparencyAttrib.MAlpha)
        self.Sellbot.setColor(0.352, 0.227, 0.419, 0.7)
        self.Sellbot.find('**/hands').setColor(0.0, 0.0, 0.0, 0.0)
        Name = TextNode("nametag")
        Name.setText("Cold Caller\nSellbot\nLevel 1")
        Name.setFont(font)
        self.nameTag = render.attachNewNode(Name)
        self.nameTag.setBillboardAxis()
        self.nameTag.reparentTo(self.Sellbot.find('**/joint_nameTag'))
        self.nameTag.setZ(7.51)
        Name.setAlign(TextNode.ACenter)
        Name.setCardColor(0.8, 0.8, 0.8, 0.5)
        Name.setCardAsMargin(0.1, 0, 0, -0.2)
        Name.setCardDecal(True)
        Name.setTextColor(0, 0, 0, 1.0)
        self.nameTag.setScale(0.33)
        self.Sellbot.hide()
        self.Sellbot.setBlend(frameBlend=True)

        self.Bossbot = Actor(
            'phase_3.5/models/char/suitC-mod.bam', {
                'neutral': 'phase_3.5/models/char/suitC-neutral.bam',
                'victory': 'phase_4/models/char/suitC-victory.bam',
                'walk': 'phase_3.5/models/char/suitC-walk.bam'
            })
        self.Bossbot.reparentTo(render)
        self.Bossbot.loop('neutral')
        self.TorsoTex = loader.loadTexture('phase_3.5/maps/c_blazer.jpg')
        self.Bossbot.find('**/torso').setTexture(self.TorsoTex, 1)
        self.ArmTex = loader.loadTexture('phase_3.5/maps/c_sleeve.jpg')
        self.Bossbot.find('**/arms').setTexture(self.ArmTex, 1)
        self.LegTex = loader.loadTexture('phase_3.5/maps/c_leg.jpg')
        self.Bossbot.find('**/legs').setTexture(self.LegTex, 1)
        self.Head = loader.loadModel('phase_3.5/models/char/suitC-heads.bam')
        self.Head.find('**/coldcaller').hide()
        self.Head.find('**/gladhander').hide()
        self.Head.find('**/micromanager').hide()
        self.Head.find('**/moneybags').hide()
        self.Head.find('**/tightwad').hide()
        self.Head.reparentTo(self.Bossbot.find('**/joint_head'))
        self.icon = loader.loadModel('phase_3/models/gui/cog_icons.bam')
        self.icon.reparentTo(render)
        self.icon.reparentTo(self.Bossbot.find('**/joint_attachMeter'))
        self.icon.find('**/MoneyIcon').removeNode()
        self.icon.find('**/cog').removeNode()
        self.icon.find('**/LegalIcon').removeNode()
        self.icon.find('**/SalesIcon').removeNode()
        self.icon.setH(180)
        self.icon.setScale(0.70)
        self.Bossbot.setH(180.00)
        self.Bossbot.setTransparency(TransparencyAttrib.MAlpha)
        self.Bossbot.setColor(0.466, 0.0, 1.0, 0.7)
        self.Bossbot.find('**/hands').setColor(0.0, 0.0, 0.0, 0.0)
        Name = TextNode("nametag")
        Name.setText("Flunky\nBossbot\nLevel 1")
        Name.setFont(font)
        self.nameTag = render.attachNewNode(Name)
        self.nameTag.setBillboardAxis()
        self.nameTag.reparentTo(self.Bossbot.find('**/joint_nameTag'))
        self.nameTag.setZ(7.51)
        Name.setAlign(TextNode.ACenter)
        Name.setCardColor(0.8, 0.8, 0.8, 0.5)
        Name.setCardAsMargin(0.1, 0, 0, -0.2)
        Name.setCardDecal(True)
        Name.setTextColor(0, 0, 0, 1.0)
        self.nameTag.setScale(0.33)
        self.Bossbot.hide()

        self.Sourcebot = Actor(
            'phase_3.5/models/char/suitC-mod.bam', {
                'neutral': 'phase_3.5/models/char/suitC-neutral.bam',
                'victory': 'phase_4/models/char/suitC-victory.bam',
                'walk': 'phase_3.5/models/char/suitC-walk.bam'
            })

        self.Sourcebot.reparentTo(render)
        self.Sourcebot.loop('neutral')
        self.TorsoTex = loader.loadTexture('phase_3.5/maps/t_blazer.jpg')
        self.Sourcebot.find('**/torso').setTexture(self.TorsoTex, 1)
        self.ArmTex = loader.loadTexture('phase_3.5/maps/t_sleeve.jpg')
        self.Sourcebot.find('**/arms').setTexture(self.ArmTex, 1)
        self.LegTex = loader.loadTexture('phase_3.5/maps/t_leg.jpg')
        self.Sourcebot.find('**/legs').setTexture(self.LegTex, 1)
        self.Head = loader.loadModel(
            'phase_3.5/models/char/suitC-heads.bam').find('**/tightwad')
        self.headTexture = loader.loadTexture(
            "phase_3.5/maps/payroll-converter.jpg")
        self.Head.reparentTo(self.Sourcebot.find('**/joint_head'))
        self.Sourcebot.findAllMatches('**/joint_head').setTexture(
            self.headTexture, 1)
        self.icon = loader.loadModel('phase_3/models/gui/SourcebotIcon.bam')
        self.icon.reparentTo(render)
        self.iconTexture = loader.loadTexture('phase_3/maps/SourcebotIcon.png')
        self.icon.setTexture(self.iconTexture, 1)
        self.icon.setHpr(180, 0, 0)
        self.icon.setPos(0.1, 0, -0.30)
        self.icon.setScale(1.00)
        self.icon.reparentTo(self.Sourcebot.find('**/joint_attachMeter'))
        self.Sourcebot.setTransparency(TransparencyAttrib.MAlpha)
        self.Sourcebot.setColor(0.9, 0.6, 0.8, 0.7)
        self.Sourcebot.find('**/hands').setColor(0.0, 0.0, 0.0, 0.0)
        Name = TextNode("nametag")
        Name.setText("Payroll Converter\nSourcebot\nLevel 1")
        Name.setFont(font)
        self.nameTag = render.attachNewNode(Name)
        self.nameTag.setBillboardAxis()
        self.nameTag.reparentTo(self.Sourcebot.find('**/joint_nameTag'))
        self.nameTag.setZ(7.51)
        Name.setAlign(TextNode.ACenter)
        Name.setCardColor(0.8, 0.8, 0.8, 0.5)
        Name.setCardAsMargin(0.1, 0, 0, -0.2)
        Name.setCardDecal(True)
        Name.setTextColor(0, 0, 0, 1.0)
        self.nameTag.setScale(0.33)
        self.Sourcebot.setH(180)
        self.Sourcebot.hide()

        #------sfx------#

        self.cameraMoveSfx = self.loader.loadSfx(
            "phase_9/audio/sfx/CHQ_FACT_elevator_up_down_loop.ogg")
        self.cameraMoveSfx.setVolume(5.0)

        self.click = self.loader.loadSfx("phase_3/audio/sfx/cc_click.ogg")
        self.hover = self.loader.loadSfx(
            "phase_3/audio/sfx/cc_hover-over-button.ogg")

        self.poof = self.loader.loadSfx(
            "phase_4/audio/sfx/firework_distance_02.ogg")
        self.largeSmash = self.loader.loadSfx(
            "phase_9/audio/sfx/CHQ_FACT_stomper_large.ogg")
        self.largeSmashExec = SoundInterval(self.largeSmash, duration=5.5)

        self.conveyorBeltSfx = self.loader.loadSfx(
            "phase_12/audio/sfx/CHQ_FACT_conveyor_belt.ogg")

        self.cogDialSHORT = self.loader.loadSfx(
            "phase_3.5/audio/dial/COG_VO_grunt.ogg")
        self.cogDialMED = self.loader.loadSfx(
            "phase_3.5/audio/dial/COG_VO_statement.ogg")
        self.cogDialLONG = self.loader.loadSfx(
            "phase_3.5/audio/dial/COG_VO_murmur.ogg")
        self.cogDialQUESTION = self.loader.loadSfx(
            "phase_3.5/audio/dial/COG_VO_question.ogg")

        #-----Sequences------#

        Walk1 = self.stomper1.posInterval(9.50, Point3(0, 0, 18.00))
        Walk2 = self.stomper1.posInterval(9.50, Point3(0, 0, 0))
        self.stomperPound1 = Sequence(Walk1, Walk2)
        self.stomperPound1.loop()

        Walk1 = self.stomper6.posInterval(9.50, Point3(0, 0, 18.00))
        Walk2 = self.stomper6.posInterval(9.50, Point3(0, 0, 0))
        self.stomperPound2 = Sequence(Walk1, Walk2)
        self.stomperPound2.loop()

        Walk1 = self.stomper3.posInterval(9.50, Point3(0, 0, 0))
        Walk2 = self.stomper3.posInterval(9.50, Point3(0, 0, 18.00))
        self.stomperPound3 = Sequence(Walk1, Walk2)
        self.stomperPound3.loop()

        Walk1 = self.stomper5.posInterval(5.50, Point3(0, 0, 0))
        Walk2 = self.stomper5.posInterval(5.50, Point3(0, 0, 10.00))
        self.stomperPound4 = Sequence(Walk1, Walk2)
        self.stomperPound4.loop()

        Walk1 = self.stomper4.posInterval(5.50, Point3(0, 0, 0))
        Walk2 = self.stomper4.posInterval(5.50, Point3(0, 0, 22.00))
        self.stomperPound5 = Sequence(Walk1, Walk2)
        self.stomperPound5.loop()

        Walk1 = self.stomper2.posInterval(3.50, Point3(0, 0, 0))
        Walk2 = self.stomper2.posInterval(3.50, Point3(0, 0, 7.00))
        self.stomperPound6 = Sequence(Walk1, Walk2)
        self.stomperPound6.loop()

        Walk1 = self.stomper7.posInterval(9.50, Point3(0, 0, 18.00))
        Walk2 = self.stomper7.posInterval(9.50, Point3(0, 0, 0))
        self.stomperPound7 = Sequence(Walk1, Walk2)
        self.stomperPound7.loop()

        Walk1 = self.stomper8.posInterval(5.50, Point3(0, 0, 5.00))
        Walk2 = self.stomper8.posInterval(9.50, Point3(0, 0, 0))
        self.stomperPound8 = Sequence(Walk1, Walk2)
        self.stomperPound8.loop()

        Walk1 = self.stomper9.posInterval(6.50, Point3(0, 0, 0))
        Walk2 = self.stomper9.posInterval(6.50, Point3(0, 0, 13.00))
        self.stomperPound9 = Sequence(Walk1, Walk2)
        self.stomperPound9.loop()

        Walk1 = self.stomper10.posInterval(5.50, Point3(0, 0, 0))
        Walk2 = self.stomper10.posInterval(5.50, Point3(0, 0, 10.00))
        self.stomperPound10 = Sequence(Walk1, Walk2)
        self.stomperPound10.loop()

        Walk1 = self.stomper11.posInterval(5.50, Point3(0, 0, 0))
        Walk2 = self.stomper11.posInterval(5.50, Point3(0, 0, 22.00))
        self.stomperPound11 = Sequence(Walk1, Walk2)
        self.stomperPound11.loop()

        Walk1 = self.stomper12.posInterval(3.50, Point3(0, 0, 0))
        Walk2 = self.stomper12.posInterval(3.50, Point3(0, 0, 7.00))
        self.stomperPound12 = Sequence(Walk1, Walk2)
        self.stomperPound12.loop()

        Walk1 = self.camera.posInterval(1.50, Point3(0, -77.48, 3.42))
        Spin1 = self.camera.hprInterval(1.00, Vec3(0, 0, 0))
        Walk2 = self.camera.posInterval(2.50, Point3(0, -77.48, 3.42))
        Walk3 = self.camera.posInterval(3.00, Point3(0, -22.48, 3.42))
        self.cameraStart = Sequence(Walk1, Spin1, Walk2, Walk3)

        Walk1 = self.camera.posInterval(3.00, Point3(0, -22.48, 3.42))
        Spin1 = self.camera.hprInterval(0.00, Vec3(0, 0, 0))
        self.cameraStartAgain = Sequence(Walk1, Spin1)

        skelMove1 = self.skelCog.posInterval(0.50, Point3(-16, -0, 0))
        skelMove2 = self.skelCog.posInterval(2.00, Point3(0, -0, 0))
        self.skelMove = Sequence(skelMove1, skelMove2)

        Walk1 = self.camera.posInterval(15.50, Point3(6.31, -45.31, 9.27))
        Spin1 = self.camera.hprInterval(0.00, Vec3(337.52, 0, 0))
        Walk2 = self.camera.posInterval(0.00, Point3(6.08, -100.53, 9.27))
        Walk3 = self.camera.posInterval(12.00, Point3(14.07, -77.33, 9.27))
        Walk4 = self.camera.posInterval(0.00, Point3(18.93, -82.36, 25.51))
        Spin2 = self.camera.hprInterval(0.00, Vec3(30.26, 347.91, 0))
        Walk5 = self.camera.posInterval(15.00, Point3(0.44, -51.38, 21.411))
        Spin3 = self.camera.hprInterval(0.00, Vec3(337.52, 0, 0))
        self.cameraIntro = Sequence(Walk1, Spin1, Walk2, Walk3, Walk4, Spin2,
                                    Walk5, Spin3)
        self.cameraIntro.loop()

        rotate1 = self.camera.hprInterval(3.00, Vec3(-25, 0, 0))
        self.cameraRotate = Sequence(rotate1)

        fly = self.flyThru.hprInterval(1.00, Vec3(180, 0, 0))
        self.flyThruDONE = Sequence(fly)

        move1 = self.Sellbot.hprInterval(1.50, Vec3(196.26, 0, 0))
        move2 = self.Sellbot.posInterval(2.00, Point3(12.43, -5.09, 0))
        move3 = self.Sellbot.hprInterval(2.00, Vec3(140.91, 0, 0))
        self.SellbotMove = Sequence(move1, move2, move3)

        move1 = self.Lawbot.hprInterval(1.50, Vec3(196.26, 0, 0))
        move2 = self.Lawbot.posInterval(2.00, Point3(12.43, -5.09, 0))
        move3 = self.Lawbot.hprInterval(2.00, Vec3(140.91, 0, 0))
        self.LawbotMove = Sequence(move1, move2, move3)

        move1 = self.Cashbot.hprInterval(1.50, Vec3(196.26, 0, 0))
        move2 = self.Cashbot.posInterval(2.00, Point3(12.43, -5.09, 0))
        move3 = self.Cashbot.hprInterval(2.00, Vec3(140.91, 0, 0))
        self.CashbotMove = Sequence(move1, move2, move3)

        move1 = self.Bossbot.hprInterval(1.50, Vec3(196.26, 0, 0))
        move2 = self.Bossbot.posInterval(2.00, Point3(12.43, -5.09, 0))
        move3 = self.Bossbot.hprInterval(2.00, Vec3(140.91, 0, 0))
        self.BossbotMove = Sequence(move1, move2, move3)

        move1 = self.Sourcebot.hprInterval(1.50, Vec3(196.26, 0, 0))
        move2 = self.Sourcebot.posInterval(2.00, Point3(12.43, -5.09, 0))
        move3 = self.Sourcebot.hprInterval(2.00, Vec3(140.91, 0, 0))
        self.SourcebotMove = Sequence(move1, move2, move3)

        rotate1 = self.camera.hprInterval(1.00, Vec3(-21, 0, 0))
        move1 = self.camera.posInterval(1.00, Vec3(-2.24, -22.97, 5.02))
        self.toPro = Sequence(rotate1, move1)

        move1 = self.leftDoor.posInterval(1.50, Point3(0, 0, 0))
        self.elevatorOpenLeft = Sequence(move1)
        move1 = self.rightDoor.posInterval(1.50, Point3(0, 0, 0))
        self.elevatorOpenRight = Sequence(move1)

        lSmashB = self.lStomper.posInterval(0.125, Point3(0.01, 0, 3))
        lSmashE = self.lStomper.posInterval(1, Point3(-15, 0, 3))
        rSmashB = self.rStomper.posInterval(0.125, Point3(-0.01, 0, 3))
        rSmashE = self.rStomper.posInterval(1, Point3(15, 0, 3))
        lemmeSmashL = Sequence(lSmashB, Wait(1.25), lSmashE)
        lemmeSmashR = Sequence(rSmashB, Wait(1.25), rSmashE)
        self.lemmeSmash = \
            Parallel(
            lemmeSmashL, self.largeSmashExec,
            lemmeSmashR,
            name="Lemme Smash"
        )

        #----camera---#

        self.camera.setPos(6.31, -82.36, 9.27)
        self.camera.setHpr(35.71, 0, 0)

        #-----buttons-------#

        ButtonImage = self.loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_check_x.bam")
        self.finish = DirectButton(frameSize=None,
                                   image=(ButtonImage.find('**/check_up'),
                                          ButtonImage.find('**/check_down'),
                                          ButtonImage.find('**/check_up')),
                                   relief=None,
                                   clickSound=self.click,
                                   command=self.moveCameraToNameTag,
                                   geom=None,
                                   pad=(0.01, 0.01),
                                   suppressKeys=0,
                                   pos=(1.5, 0, -0.8),
                                   borderWidth=(0.13, 0.01),
                                   scale=.3)
        self.finish.hide()

        ButtonImage = self.loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_check_x.bam")
        self.finish2 = DirectButton(frameSize=None,
                                    image=(ButtonImage.find('**/check_up'),
                                           ButtonImage.find('**/check_down'),
                                           ButtonImage.find('**/check_up')),
                                    relief=None,
                                    clickSound=self.click,
                                    command=self.intoPro,
                                    geom=None,
                                    pad=(0.01, 0.01),
                                    suppressKeys=0,
                                    pos=(1.5, 0, -0.8),
                                    borderWidth=(0.13, 0.01),
                                    scale=.3)
        self.finish2.hide()

        ButtonImage = self.loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_check_x.bam")
        self.exit = DirectButton(frameSize=None,
                                 image=(ButtonImage.find('**/close_up'),
                                        ButtonImage.find('**/close_down'),
                                        ButtonImage.find('**/close_up')),
                                 relief=None,
                                 command=self.goBack,
                                 clickSound=self.click,
                                 geom=None,
                                 pad=(0.01, 0.01),
                                 suppressKeys=0,
                                 pos=(-1.5, 0, -0.8),
                                 borderWidth=(0.13, 0.01),
                                 scale=.3)
        self.exit.hide()

        self.folder = OnscreenImage(image='phase_3.5/maps/cc_metal-plate.png',
                                    pos=(1.50, 0, 0.4),
                                    scale=(0.6))
        self.folder.setTransparency(TransparencyAttrib.MAlpha)
        self.folder.hide()

        ButtonImage = loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_buttons_departments.bam")
        self.systems = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/button_up'),
                   ButtonImage.find('**/button_down'),
                   ButtonImage.find('**/button_hover')),
            relief=None,
            command=self.systemGUIpopup,
            clickSound=self.click,
            rolloverSound=self.hover,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(1.3, 0, 0.8),
            borderWidth=(0.13, 0.01),
            scale=0.5)
        self.systems.hide()

        ButtonImage = loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_buttons_arrow_skip.bam")
        self.SellbotButton = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/click_up'),
                   ButtonImage.find('**/click_down'),
                   ButtonImage.find('**/click_hover')),
            relief=None,
            command=self.spawnSellbot,
            clickSound=self.click,
            rolloverSound=self.hover,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(1.5, 0, 0.6),
            borderWidth=(0.13, 0.01),
            scale=0.4)
        self.SellbotButton.hide()

        ButtonImage = loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_buttons_arrow_skip.bam")
        self.LawbotButton = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/click_up'),
                   ButtonImage.find('**/click_down'),
                   ButtonImage.find('**/click_hover')),
            relief=None,
            command=self.spawnLawbot,
            clickSound=self.click,
            rolloverSound=self.hover,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(1.5, 0, 0.5),
            borderWidth=(0.13, 0.01),
            scale=0.4)
        self.LawbotButton.hide()

        ButtonImage = loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_buttons_arrow_skip.bam")
        self.CashbotButton = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/click_up'),
                   ButtonImage.find('**/click_down'),
                   ButtonImage.find('**/click_hover')),
            relief=None,
            command=self.spawnCashbot,
            clickSound=self.click,
            rolloverSound=self.hover,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(1.5, 0, 0.4),
            borderWidth=(0.13, 0.01),
            scale=0.4)
        self.CashbotButton.hide()

        ButtonImage = loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_buttons_arrow_skip.bam")
        self.BossbotButton = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/click_up'),
                   ButtonImage.find('**/click_down'),
                   ButtonImage.find('**/click_hover')),
            relief=None,
            command=self.spawnBossbot,
            clickSound=self.click,
            rolloverSound=self.hover,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(1.5, 0, 0.3),
            borderWidth=(0.13, 0.01),
            scale=0.4)
        self.BossbotButton.hide()

        ButtonImage = loader.loadModel(
            "phase_3/models/gui/cc_icon_gui_buttons_arrow_skip.bam")
        self.SourcebotButton = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/click_up'),
                   ButtonImage.find('**/click_down'),
                   ButtonImage.find('**/click_hover')),
            relief=None,
            command=self.spawnSourcebot,
            clickSound=self.click,
            rolloverSound=self.hover,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(1.5, 0, 0.2),
            borderWidth=(0.13, 0.01),
            scale=0.4)
        self.SourcebotButton.hide()

        ButtonImage = loader.loadModel(
            "phase_5/models/cogdominium/tt_m_gui_csa_flyThru.bam")
        self.flyThruButton = DirectButton(
            frameSize=None,
            image=(ButtonImage.find('**/buttonUp'),
                   ButtonImage.find('**/buttonDown'),
                   ButtonImage.find('**/buttonHover')),
            relief=None,
            command=self.setText,
            geom=None,
            pad=(0.01, 0.01),
            suppressKeys=0,
            pos=(-0.2, 0, 0.75),
            clickSound=self.click,
            rolloverSound=self.hover,
            borderWidth=(0.13, 0.01),
            scale=4)
        self.flyThruButton.hide()

        #-----texts-------#
        self.logoLeft = OnscreenImage(
            image='phase_3/maps/cogcitycodeaffix-logo-hor-left[OLD].png',
            pos=(-0.46, 0, 0.2),
            scale=(0.7))
        self.logoLeft.setTransparency(TransparencyAttrib.MAlpha)

        self.logoRight = OnscreenImage(
            image='phase_3/maps/cogcitycodeaffix-logo-hor-right[OLD].png',
            pos=(0.56, 0, 0.18),
            scale=(0.7))
        self.logoRight.setTransparency(TransparencyAttrib.MAlpha)

        self.nameType = OnscreenImage(
            image='phase_3.5/maps/cc_type-a-name.png',
            pos=(-0.49, 0, 0.1),
            scale=0.8)
        self.nameType.setTransparency(TransparencyAttrib.MAlpha)
        self.nameType.hide()

        b = DirectEntry(text="",
                        scale=.08,
                        pos=(-0.9, 0, 0.08),
                        numLines=2,
                        focus=3)
        b.hide()

        text = TextNode("play")
        text.setText("Press ENTER to play")
        text.setFont(font)

        self.textNodePath = aspect2d.attachNewNode(text)
        self.textNodePath.setScale(0.09)
        self.textNodePath.setPos(-0.5, 0, -0.7)

        self.text2 = TextNode("play")
        self.text2.setText(
            "Hello, I am The Big Cheese, one of your superiors...")
        self.text2.setFont(font)
        self.text2.setWordwrap(25)
        self.textNodePath2 = aspect2d.attachNewNode(self.text2)
        self.textNodePath2.setScale(0.05)
        self.textNodePath2.setPos(-1.2, 0, 0.6)
        self.textNodePath2.setColor(0, 0, 0)
        self.textNodePath2.hide()

        #-----collisions-----#

        self.collblock = self.loader.loadModel(
            "phase_4/models/modules/collisionBlock.bam")

        self.collblock = self.collblock.attachNewNode(
            CollisionNode('block_collision'))
        self.collblock.node().addSolid(CollisionSphere(0, 0, 0, 0.3))
        self.collblock.node().setIntoCollideMask(BitMask32.allOff())

        #-------times-----#

        self.t = Sequence(Func(self.finish.hide), Wait(9),
                          Func(self.flyThru.show),
                          Func(self.flyThruButton.show),
                          Func(self.textNodePath2.show),
                          Func(self.cogDialMED.play))
        self.t2 = Sequence(Func(self.explosion.show), Wait(0.30),
                           Func(self.explosion.hide))
        self.t3 = Sequence(Func(self.cameraMoveSfx.play), Wait(2.60),
                           Func(self.cameraMoveSfx.stop), Wait(2.50),
                           Func(self.cameraMoveSfx.play), Wait(2.78),
                           Func(self.cameraMoveSfx.stop), Wait(0.20))
        self.t4 = Sequence(Func(self.flyThruButton.hide), Wait(2.00),
                           Func(self.flyThruButton.show))
        self.t5 = Sequence(Func(self.conveyorBeltSfx.play), Wait(2.50),
                           Func(self.conveyorBeltSfx.stop))
        self.t6 = Sequence(Func(self.flyThruDONE.start), Wait(2.50),
                           Func(self.flyThru.hide))
        self.t7 = Sequence(Func(self.moveINT), Func(self.cameraMoveSfx.play),
                           Wait(5.50), Func(self.moveINTSTOP),
                           Func(self.cameraMoveSfx.stop), Func(b.show),
                           Func(self.finish2.show))
        self.t8 = Sequence(Func(self.cameraMoveSfx.play), Wait(2.00),
                           Func(self.cameraMoveSfx.stop), Wait(0.70),
                           Func(self.elevatorOpenLeft.start),
                           Func(self.elevatorOpenRight.start))

        #----------key/click-events-------#

        self.acceptOnce("enter-up", self.play)
        self.accept("alt-o", self.oobe)

        #------func-------#

    def setText(self):
        self.text2.setText(
            "As the co-leader of COGS, Inc., i would like to introduce you to..."
        )
        self.cogDialLONG.play()
        self.flyThruButton["command"] = self.setText2

    def setText2(self):
        self.text2.setText("Cogcity: CodeAffix!")
        self.cogDialSHORT.play()
        self.cogDialLONG.stop()
        self.flyThruButton["command"] = self.setText3

    def setText3(self):
        self.text2.setText(
            "Before we get started, you need to create a cog first!")
        self.cogDialMED.play()
        self.cogDialSHORT.stop()
        self.flyThruButton["command"] = self.setText4

    def setText4(self):
        self.text2.setText(
            "Here, i will send out a skelecog so that you can start making your new cog!"
        )
        self.cogDialLONG.play()
        self.cogDialMED.stop()
        self.t4.start()
        self.skelMove.start()
        self.t5.start()
        self.flyThruButton["command"] = self.setText5

    def setText5(self):
        self.text2.setText(
            "Here at Cogcity, we make sure that each of our cogs are fully functional."
        )
        self.cogDialMED.play()
        self.cogDialLONG.stop()
        self.flyThruButton["command"] = self.setText6

    def setText6(self):
        self.text2.setText(
            "We call these special robots: Cogs, because of the file type named: .cog"
        )
        self.cogDialLONG.play()
        self.flyThruButton["command"] = self.setText7

    def setText7(self):
        self.text2.setText(
            ".cog is the file type for cogs which is in the departments folder."
        )
        self.cogDialMED.play()
        self.cogDialLONG.stop()
        self.flyThruButton["command"] = self.setText8

    def setText8(self):
        self.text2.setText(
            "Just start by selecting your own .cog type in the departments folder."
        )
        self.cogDialLONG.play()
        self.cogDialMED.stop()
        self.flyThruButton["command"] = self.setText9

    def setText9(self):
        self.text2.setText("After that, type or choose your own cog name!")
        self.cogDialSHORT.play()
        self.cogDialLONG.stop()
        self.flyThruButton["command"] = self.setText10

    def setText10(self):
        self.text2.setText(
            "Simple, right? I will be down in a second for the rest of the steps."
        )
        self.cogDialQUESTION.play()
        self.cogDialSHORT.stop()
        self.flyThruButton["command"] = self.setText11

    def setText11(self):
        self.text2.setText(
            "Also, you might wanna hurry up... Our boss dose not like waiting."
        )
        self.cogDialMED.play()
        self.cogDialQUESTION.stop()
        self.flyThruButton["command"] = self.setTextFINAL

    def setTextFINAL(self):
        self.GUIpopup()
        self.textNodePath2.hide()
        self.flyThruButton.hide()
        self.t6.start()

    def play(self):
        if self.logoRight:
            self.logoRight.hide()
            self.logoLeft.hide()
            self.t3.start()
            self.t.start()
            self.textNodePath.hide()
            self.cameraIntro.pause()
            self.cameraStart.start()

    def playAgain(self):
        if self.logoRight:
            self.logoRight.hide()
            self.logoLeft.hide()
            self.textNodePath.hide()
            self.systems.show()
            self.finish.show()
            self.exit.show()
            self.cameraIntro.pause()
            self.cameraStartAgain.start()

    def GUIpopup(self):
        self.exit.show()
        self.systems.show()

    def goBack(self):
        self.acceptOnce("enter", self.playAgain)
        self.logoLeft.show()
        self.logoRight.show()
        self.SellbotButton.hide()
        self.LawbotButton.hide()
        self.CashbotButton.hide()
        self.BossbotButton.hide()
        self.SourcebotButton.hide()
        self.exit.hide()
        self.systems.hide()
        self.finish.hide()
        self.textNodePath.show()
        self.cameraIntro.finish()
        self.cameraIntro.start()
        self.cameraIntro.loop()

    def systemGUIpopup(self):
        if self.systems:
            self.SellbotButton.show()
            self.LawbotButton.show()
            self.CashbotButton.show()
            self.BossbotButton.show()
            self.SourcebotButton.show()
        else:
            self.SellbotButton.hide()
            self.LawbotButton.hide()
            self.CashbotButton.hide()
            self.BossbotButton.hide()
            self.SourcebotButton.hide()

    def spawnSellbot(self):
        if self.Sellbot:
            self.poof.play()
            self.Sellbot.show()
            self.t2.start()
            self.Cashbot.hide()
            self.Lawbot.hide()
            self.Bossbot.hide()
            self.Sourcebot.hide()
            self.finish.show()
        else:
            self.Sellbot.hide()

    def spawnLawbot(self):
        if self.Lawbot:
            self.poof.play()
            self.Sellbot.hide()
            self.t2.start()
            self.Cashbot.hide()
            self.Lawbot.show()
            self.Bossbot.hide()
            self.Sourcebot.hide()
            self.finish.show()
        else:
            self.Lawbot.hide()

    def spawnCashbot(self):
        if self.Cashbot:
            self.poof.play()
            self.Sellbot.hide()
            self.t2.start()
            self.Cashbot.show()
            self.Lawbot.hide()
            self.Bossbot.hide()
            self.Sourcebot.hide()
            self.finish.show()
        else:
            self.Cashbot.hide()

    def spawnBossbot(self):
        if self.Bossbot:
            self.poof.play()
            self.t2.start()
            self.Sellbot.hide()
            self.Cashbot.hide()
            self.Lawbot.hide()
            self.Bossbot.show()
            self.Sourcebot.hide()
            self.finish.show()
        else:
            self.Bossbot.hide()

    def spawnSourcebot(self):
        if self.Sourcebot:
            self.t2.start()
            self.poof.play()
            self.Sellbot.hide()
            self.Cashbot.hide()
            self.Lawbot.hide()
            self.Bossbot.hide()
            self.Sourcebot.show()
            self.finish.show()
        else:
            self.Sourcebot.hide()

    def switchToSolidBody(self, task):
        self.skelCog.hide()
        if self.Sellbot:
            self.Sellbot.setTransparency(TransparencyAttrib.MNone)
            self.Sellbot.clearColor()
            self.Sellbot.find('**/hands').setColor(0.55, 0.65, 1.0, 1.0)
        if self.Lawbot:
            self.Lawbot.setTransparency(TransparencyAttrib.MNone)
            self.Lawbot.clearColor()
            self.Lawbot.find('**/hands').setColor(0.75, 0.75, 0.95, 1.0)
        if self.Cashbot:
            self.Cashbot.setTransparency(TransparencyAttrib.MNone)
            self.Cashbot.clearColor()
            self.Cashbot.find('**/hands').setColor(1.0, 0.5, 0.6, 1.0)
        if self.Bossbot:
            self.Bossbot.setTransparency(TransparencyAttrib.MNone)
            self.Bossbot.clearColor()
            self.Bossbot.find('**/hands').setColor(0.95, 0.75, 0.75, 1.0)
        if self.Sourcebot:
            self.Sourcebot.setTransparency(TransparencyAttrib.MNone)
            self.Sourcebot.clearColor()
            self.Sourcebot.find('**/hands').setColor(0.53, 0.59, 0.66, 1.0)
        return Task.done

    def walkToNameTag(self, task):
        self.cameraMoveSfx.play()
        self.cameraRotate.start()
        self.SellbotMove.start()
        self.LawbotMove.start()
        self.CashbotMove.start()
        self.BossbotMove.start()
        self.SourcebotMove.start()
        self.lStomper.hide()
        self.rStomper.hide()
        self.t7.start()
        self.Cashbot.loop('walk')
        self.Sellbot.loop('walk')
        self.Lawbot.loop('walk')
        self.Bossbot.loop('walk')
        self.Sourcebot.loop('walk')
        return Task.done

    def moveCameraToNameTag(self):
        if self.camera:
            self.SellbotButton.hide()
            self.LawbotButton.hide()
            self.CashbotButton.hide()
            self.BossbotButton.hide()
            self.SourcebotButton.hide()
            self.finish.hide()
            self.exit.hide()
            self.systems.hide()
            self.lStomper.show()
            self.rStomper.show()
            self.lemmeSmash.start()
            self.smashDelay = Parallel(self.largeSmashExec)
            self.smashDelay.start()
            taskMgr.doMethodLater(
                .75, self.switchToSolidBody,
                'Make Cogs With Hologram Bodies Have Solid Ones')
            taskMgr.doMethodLater(3.5, self.walkToNameTag,
                                  'Make Cogs Walk To Type-A-Name')

    def moveINT(self):
        if self.moveCameraToNameTag:
            self.Sellbot.play('walk')
            self.Lawbot.play('walk')
            self.Cashbot.play('walk')
            self.Bossbot.play('walk')
            self.Sourcebot.play('walk')
            self.Sellbot.loop('walk')
            self.Lawbot.loop('walk')
            self.Cashbot.loop('walk')
            self.Bossbot.loop('walk')
            self.Sourcebot.loop('walk')

    def moveINTSTOP(self):
        if self.moveCameraToNameTag:
            self.Sellbot.stop('walk')
            self.Lawbot.stop('walk')
            self.Cashbot.stop('walk')
            self.Bossbot.stop('walk')
            self.Sourcebot.stop('walk')
            self.Sellbot.play('neutral')
            self.Lawbot.play('neutral')
            self.Cashbot.play('neutral')
            self.Bossbot.play('neutral')
            self.Sourcebot.play('neutral')
            self.Sellbot.loop('neutral')
            self.Lawbot.loop('neutral')
            self.Cashbot.loop('neutral')
            self.Bossbot.loop('neutral')
            self.Sourcebot.loop('neutral')

    def intoPro(self):
        if self.makeAcog:
            self.toPro.start()
            self.t8.start()