Blank template

So I found this code on the internet. After fixing the errors they had in it, such as minor translations and typos, I decided to run it, which it sucessfully did. However when It did load, no sound could be heard and nothing showed up. It instead, showed me a blank grey page

[code]from direct.actor.Actor import *
from pandac.PandaModules import *
import sys, os
from direct.stdpy import glob
from random import *
import time
import direct.directbase.DirectStart
from sys import argv
from direct.directbase import DirectStart
from direct.task import Task
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.interval.IntervalGlobal import *
from direct.showbase.InputStateGlobal import inputState
from direct.controls.GravityWalker import GravityWalker

def hex2p(h):
r,g,b = map(lambda x:int(x,16)*256/15.,[h[i:i+1] for i in range(0,len(h),2)])
return map(lambda x: min(x,1.00),rgb2p(r,g,b))

class CreateAToon:
def init(self,args,tp=None):
self.slot=args[0]

    gamebase.curArea = self

    self.CAT_music = loader.loadMusic("phase_3/audio/bgm/create_a_toon.mid")
    self.CAT_music.setLoop(1)
    self.CAT_music.play()
   
    self.frame = DirectFrame(parent=base.a2dBackground)
    self.textframe = DirectFrame(parent=base.a2dBackground)
   
    environ = loader.loadModel('phase_3/models/makeatoon/tt_m_ara_mat_room.bam')
    self.floor = environ.find('**/floor')
   
    self.data = {
                "gender":"",
                "color1":(1, 0.8, 0.0),
                "color2":(1, 0.8, 0.0),
                "color3":(1, 0.8, 0.0),
                "color4":(1, 1, 1), #gloves
                "top":8,
                "bot":10,
                "name":grtn("M"),
                "spc":0,
                "head":0,
                "body":"l",
                "legs":.5,
                "head":0,
                }
   
    self.np = render.attachNewNode('CreateAToonSet')
   
    self.environ = self.np.attachNewNode('part-that-matters') #what is it?
    self.floor.reparentTo(self.np)
   
    self.env_room_zones = ['genderAll','bodyAll','colorAll','cothAll','nameAll']
    self.env_room_titles = map(L10N,["CAT_TITLE_GENDER","CAT_TITLE_SPECIES","CAT_TITLE_COLOR","CAT_TITLE_CLOTHES","CAT_TITLE_NAME"])
   
    self.curzone = 0

    self.titleText = TextNode('titleText')
    self.titleText.setTextColor(1,.8,0,1)
    self.titleText.setFont(loader.loadFont('phase_3/models/fonts/MickeyFont.bam'))
    self.titleText.setAlign(TextNode.ACenter)
    self.titleTextNp = self.textframe.attachNewNode(self.titleText)
    self.titleTextNp.setPos(0,0,.675)
    self.titleTextNp.setScale(.2,1,.25)
   
    loader.loadModel('phase_3.5/models/props/TT_sky.bam').reparentTo(self.np)
   
    self.nextZone()

    base.accept('x',lambda:self.toon.reColor((random(),)*3,(random(),)*3,(random(),)*3))
    self.toon = None
   
    self.toonTypes =  map(L10N,["SPC_CAT","SPC_PIG","SPC_DOG","SPC_HORSE","SPC_BEAR","SPC_MOUSE","SPC_DUCK","SPC_RABBIT","SPC_MONKEY"])
    self._hModels = ["cat","pig","dog","horse","bear","mouse","duck","rabbit","monkey"]
   
    self._colors = map(hex2p,["FFCC00","00FFFF","0000FF","FF00FF","808080","00FF00",
                              "800000","800080","FF0000","FF8C00","FFFF00"])
                   
    self._clrNames =  map(L10N,["COLOR_GOLDEN","COLOR_LIGHTBLUE","COLOR_DARKBLUE","COLOR_PINK","COLOR_DARKGREEN",
                        "COLOR_LIGHTGREEN","COLOR_BROWN","COLOR_PURPLE","COLOR_RED","COLOR_ORANGE","COLOR_YELLOW"])
                       
    self.cColor = 0
   
    self.maxTop = 122
    self.maxBotM = 54
    self.maxBotF = 38
   
    self.names = [sorted(fetchAll(self.data['gender'],['t','f','l1','l2'][i])) for i in xrange(4)]
   
    if tp: tp.done()
   
def reloadToon(self):
    if self.toon: self.toon._toon.removeNode()
    self.toon = Toon(self.np,self._hModels[self.data["spc"]],self.data["color1"],self.data["color2"],self.data["color3"], self.data["color4"],
                     self.data["body"],{"M":"shorts","F":"skirt"}[self.data["gender"]],self.data["legs"],
                     self.data['head'],False,(self.data['top'],self.data['bot'],None))
                     
    self.toon.setH(135)
    self.toon.anim('neutral')      
    taskMgr.doMethodLater(0,lambda *a:self.toon._toon.show(),'showToon')  
   
def cleanUpEnviron(self):
    self.environ.removeNode()
    self.environ = self.np.attachNewNode('part-that-matters') #tuw
   
def getGuiItem(self,name):
    self.gui_items = {m.getName().split('_')[-1]:m for m in loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui.bam').findAllMatches('**') if m.getName()}
    if name == 'ALL':
        return self.gui_items.keys()
    return self.gui_items[filter(lambda x: name in x,self.gui_items.keys())[0]]
   
def getNameGuiItem(self,name):
    self.gui_items = {m.getName().split('_')[-1]:m for m in loader.loadModel('phase_3/models/gui/tt_m_gui_mat_nameShop.bam').findAllMatches('**') if m.getName()}
    if name == 'ALL':
        return self.gui_items.keys()
    return self.gui_items[filter(lambda x: name in x,self.gui_items.keys())[0]]
   
def nextZone(self):
    self.cleanUpEnviron()
    print 'Showing', self.env_room_zones[self.curzone%len(self.env_room_zones)]
    self.loadZone(self.env_room_zones[self.curzone%len(self.env_room_zones)]).reparentTo(self.environ)
    self.loadZoneGui()
    self.loadZoneTitle()
    self.curzone+=1
   
def previousZone(self):
    self.curzone-=2
    self.cleanUpEnviron()
    print 'Showing',self.env_room_zones[self.curzone%len(self.env_room_zones)]
    self.loadZone(self.env_room_zones[self.curzone%len(self.env_room_zones)]).reparentTo(self.environ)
    self.loadZoneGui()
    self.loadZoneTitle()
    self.curzone+=1
   
def loadZone(self,zone):
    base.cam.setPos((-14.7046, -16.793, 4))
    base.cam.setH(-39)
    if hasattr(self,"toon"):
        self.toon.setH(135)
        self.toon.setPos(0,0,0)
    environ = loader.loadModel('phase_3/models/makeatoon/tt_m_ara_mat_room.bam')                      
    return environ.find('**/'+zone)
   
def loadZoneTitle(self):
    self.titleText.setWtext(L10N('CAT_CHOOSE')+ " " +self.env_room_titles[self.curzone%len(self.env_room_titles)])
   
def setGender(self,gender):
    self.data['gender']=gender
    if gender == 'M':
        self.gui_boyButton['state'] = DGG.DISABLED
        self.gui_girlButton['state'] = DGG.NORMAL
    if gender == 'F':
        self.gui_girlButton['state'] = DGG.DISABLED
        self.gui_boyButton['state'] = DGG.NORMAL
       
    self.nextButton['state'] = DGG.NORMAL
   
    self.names = [sorted(fetchAll(self.data['gender'],['t','f','l1','l2'][i])) for i in xrange(4)]
   
    try: self.gui_boyText.destroy()
    except: pass
    try: self.gui_girlText.destroy()
    except: pass
   
    if gender == 'F' and self.data['bot'] > self.maxBotF: self.data['bot'] = 3
   
    self.data['name'] = grtn(gender)
   
    self.reloadToon()
   
def nextToonType(self):
    self.data["spc"] += 1
    if self.data["spc"] >= 9: self.data["spc"] = 0
    self.gui_tFt.setText(self.toonTypes[self.data["spc"]])
    self.gui_tFt.setSx(3./len(self.toonTypes[self.data["spc"]]))
   
    self.reloadToon()
   
def prevToonType(self):
    self.data["spc"] -= 1
    if self.data["spc"] == -1: self.data["spc"] = 8
    self.gui_tFt.setText(self.toonTypes[self.data["spc"]])
    self.gui_tFt.setSx(3./len(self.toonTypes[self.data["spc"]]))
   
    self.reloadToon()
   
def nextToonHead(self):
    self.data["head"] += 1
    if self.data["head"] >= 4: self.data["head"] = 0
   
    self.reloadToon()
   
def prevToonHead(self):
    self.data["head"] -= 1
    if self.data["head"] == -1: self.data["head"] = 3
   
    self.reloadToon()
   
def nextToonTorso(self):
    self.data["body"] = ["l","s","m"][(["l","s","m"].index(self.data["body"])+1)%3]
   
    self.reloadToon()
   
def prevToonTorso(self):
    self.data["body"] = ["l","s","m"][["l","s","m"].index(self.data["body"])-1]
   
    self.reloadToon()
   
def nextToonLegs(self):
    self.data["legs"] = [.5,.75,1][([.5,.75,1].index(self.data["legs"])+1)%3]
   
    self.reloadToon()
   
def prevToonLegs(self):
    self.data["legs"] = [.5,.75,1][[.5,.75,1].index(self.data["legs"])-1]
   
    self.reloadToon()
   
def nextToonColor(self,id=None):
    self.cColor = (self.cColor+1)%len(self._colors)
    if id is None:
        _c = self._colors[self.cColor]
        self.data["color1"] = tuple(_c)
        self.data["color2"] = tuple(_c)
        self.data["color3"] = tuple(_c)
       
    else:
        self.data["color"+id] = tuple(self._colors[self.cColor])

    self.toon.reColor(self.data['color1'],self.data['color2'],self.data['color3'], self.data['color4'])

def prevToonColor(self,id=None):
    self.cColor -= 1
    if id is None:
        _c = self._colors[self.cColor]
        self.data["color1"] = tuple(_c)
        self.data["color2"] = tuple(_c)
        self.data["color3"] = tuple(_c)
       
    else:
        self.data["color"+id] = tuple(self._colors[self.cColor])
       
    self.toon.reColor(self.data['color1'],self.data['color2'],self.data['color3'])
   
def changeTop(self,isPrev=False):
    if isPrev:
        self.data["top"] -= 1
        if self.data["top"]  < 0: self.data["top"] = self.maxTop
       
    else:
        self.data["top"] += 1
        if self.data["top"] > self.maxTop: self.data["top"] = 0
       
    self.toon.reTexture(self.data['top'],str(self.data['bot'])+('s'*(self.data['gender']=='F')),None)
   
def changeBot(self,isPrev=False):
    _max = eval('self.maxBot'+self.data['gender'])
    if isPrev:
        self.data["bot"] -= 1
        if self.data["bot"] < 0: self.data["bot"] = _max
       
    else:
        self.data["bot"] += 1
        if self.data["bot"] > _max: self.data["bot"] = 0
       
    self.toon.reTexture(self.data['top'],str(self.data['bot'])+('s'*(self.data['gender']=='F')),None)
   
def shuffle(self,zone):

    #print ':CAT:Shuffle:sDict'
    _d = [0,0,0,0]
    _d[1] = {'head':range(4),'body':['l','m','s'],'legs':[.5,.75,1],'spc':range(8)}
   
    _d[2] = {'color1':map(tuple,self._colors),'color2':map(tuple,self._colors),'color3':map(tuple,self._colors)}
   
    _d[3] = {'top':range(100),'bot':range(20)}
   
    #print ':CAT:Shuffle:apply'
         
    for a,v in _d[zone].items(): self.data[a]=choice(v)
   
    #print ':CAT:Shuffle:reload'
   
    if zone == 1: self.reloadToon()
    if zone == 2: self.toon.reColor(self.data['color1'],self.data['color2'],self.data['color3'])
    if zone == 3: self.toon.reTexture(self.data['top'],str(self.data['bot'])+('s'*(self.data['gender']=='F')),None)
   
def typeName(self):

    self.gui_tanf = self.getNameGuiItem('typeName')
    self.gui_tanf.reparentTo(self.frame)
         
def exit_gaveup(self): #xD
    gamebase.curArea = None
    gamebase.themeMusic = loader.loadMusic("phase_3/audio/bgm/tt_theme.mid")
    gamebase.themeMusic.setLoop(1)
    gamebase.themeMusic.play()
    messenger.send('load-chooseatoon-screen')
    self.dismiss()
   
def exit_fnAA(self):
    saveNewToon(*map(str,[self.slot,self.buildName(),self.data['body'],self.data['legs'],self.data['head'],
                self.data['top'],self.data['bot'],self.data['color1'],self.data['color2'],
                self.data['color3'],self.data['spc'],self.data['gender'],'','']))
    messenger.send('end-createatoon')
    self.dismiss()
   
def gui_n_updateButt(self):
    g_circle = self.getNameGuiItem('circle')
    g_circle.setColor(Vec4(.2,1,.2,1),1)
    _b = self.data['name'][:-1]
    bts = (self.gui_tnb,self.gui_fnb,self.gui_lnb)
    for i,b in enumerate(bts):
        b['geom'] = (g_circle,None,None,None)
        if not _b[i]: b['geom'] = (None,g_circle,g_circle,None)
   
    _b = self.data['name'][-1]
    for i in xrange(4):
        eval('self.sl'+str(i+1)).show()
        if not _b[i]: eval('self.sl'+str(i+1)).hide()
    self.buildName()
       
def recompileName(self,old,new):
    _name = self.data['name'][-1]
    changes = [0,0,0,0]
    for i,(n,o) in enumerate(zip(new,old)):
        if n == o: changes[i]=0
        elif not n and o: changes[i]=1
        elif n and not o: changes[i]=2
       
    changes[-1] = changes[-2]
       
    for i,change in enumerate(changes):
        if change > 0:
            _name[i] = (7,None)[change==1]
           
    return _name
   
def gui_n_butt_click(self,i):
    _now = self.data['name'][:3]
    _new = list(_now[:])
    _new[i] = not _now[i]
   
    _nname = self.recompileName(_now,_new)
   
    #print _new
    if _new in ([True,False,True],[True,True,True],[True,True,False],[False,True,True],[False,True,False]):
        self.data['name'] = tuple(_new+[_nname])
       
    for i in xrange(4):
        if _nname[i]: self.gui_n_frameClick(i+1,_nname[i])
   
    self.gui_n_updateButt()
   
def gui_n_frameClick(self,_frameId,_item):
    for i in self.gui_li[_frameId]:
        i['frameColor'] = (0.0,0.0,0.0,0.0)
    self.gui_li[_frameId][_item]['frameColor'] = (1,230./255,196./255,1)
   
    eval('self.sl'+str(_frameId)).scrollTo(_item,True)
    self.buildName()
   
def gui_n_selectFI(self,f,i,event):
    self.data['name'][-1][f] = i
    self.gui_n_frameClick(f+1,i)
    self.buildName()
   
def buildName(self):
    _n = []
    _nms = self.data['name'][-1]
    for i,n in enumerate(_nms):
        if n is not None:
            _n.append(self.names[i][n])
            if i == 3:
                _n.pop()
                _n[-1]+=self.names[i][n]
               
   
    _text = unicode(' '.join(_n).decode('latin-1'))
    #print ':CAT:Name built:',_text
    self.gui_nameText.setText(_text)
   
    return ' '.join(_n)

def loadZoneGui(self):
    self.frame.removeNode()
    self.frame = DirectFrame(parent=base.a2dBackground)
    _zone = self.curzone%len(self.env_room_titles)
   
    self.gui_nextUp = self.getGuiItem("nextUp")
    self.gui_nextDown = self.getGuiItem("nextDown")
    self.gui_nextDis = self.getGuiItem("nextDisabled")
   
    self.gui_ok = self.getGuiItem("okUp")
   
    self.nextButton = DirectButton(parent=self.frame,pos=Vec3(1.1,0,-.85),scale=.3,text="",relief=None,
                                   geom=(self.gui_nextUp,self.gui_nextDown,self.gui_nextUp,self.gui_nextDis),
                                   command=self.nextZone,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
    self.backButton = DirectButton(parent=self.frame,pos=Vec3(.8,0,-.85),scale=.3,text="",relief=None,
                                   geom=(self.gui_nextUp,self.gui_nextDown,self.gui_nextUp,self.gui_nextDis),
                                   command=self.previousZone,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
    self.closeButton = DirectButton(parent=self.frame,pos=Vec3(-1.2,0,-.85),scale=.5,text="",relief=None,
                                   geom=self.getGuiItem('closeUp'),
                                   command=self.exit_gaveup,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                 
    self.backButton.setH(180)
   
    if 0 < _zone <= 3:
        self.gui_tFs = DirectButton(parent=self.frame,pos=Vec3(1,0,-.55),text="",scale=.694105,
                                    relief=None,geom=self.getGuiItem('shuffleUp'),command=self.shuffle,extraArgs=[_zone])
       
        shuffleText = TextNode('shuffletext')
        shuffleText.setFont(loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"))
        shuffleText.setAlign(TextNode.ACenter)
        shuffleText.setWtext(L10N('CAT_SHUFFLE'))
        shuffleTextNp = self.gui_tFs.attachNewNode(shuffleText)
        shuffleTextNp.setColor((1,1,1,1))              
        shuffleTextNp.setPos(0,0,-.04)              
        shuffleTextNp.setScale(.075)
       
    if _zone == 0:
        self.backButton['state'] = DGG.DISABLED
        self.gui_boyUp = self.getGuiItem("boyUp")
        self.gui_boyDown = self.getGuiItem("boyDown")
        self.gui_girlUp = self.getGuiItem("girlUp")
        self.gui_girlDown = self.getGuiItem("girlDown")
       
        self.gui_boyButton = DirectButton(parent=self.frame,pos=Vec3(-.4,0,-.8),scale=.5,text="",relief=None,
                                          geom=(self.gui_boyUp,self.gui_boyDown,self.gui_boyUp,self.gui_boyDown),
                                          command=self.setGender,extraArgs=["M"],clickSound=gamebase.sounds['GUI_click'],
                                          rolloverSound=gamebase.sounds['GUI_rollover'])
                                         
        self.gui_girlButton = DirectButton(parent=self.frame,pos=Vec3(.4,0,-.8),scale=.5,text="",relief=None,
                                          geom=(self.gui_girlUp,self.gui_girlDown,self.gui_girlUp,self.gui_girlDown),
                                          command=self.setGender,extraArgs=["F"],clickSound=gamebase.sounds['GUI_click'],
                                          rolloverSound=gamebase.sounds['GUI_rollover'])
                                         
        self.backButton.destroy()
        self.nextButton['state'] = DGG.DISABLED
       
        def _boyIn(e):
            self.gui_boyButton.setScale(.53)
            self.gui_boyText = OnscreenText(text=L10N('CAT_BOY'),parent=self.gui_boyButton,pos=(0,.3),fg=(1,1,1,1),scale=.15)
       
        def _boyOut(e):
            self.gui_boyButton.setScale(.5)
            self.gui_boyText.destroy()
           
        def _girlIn(e):
            self.gui_girlButton.setScale(.53)
            self.gui_girlText = OnscreenText(text=L10N('CAT_GIRL'),parent=self.gui_girlButton,pos=(0,.3),fg=(1,1,1,1),scale=.15)
           
        def _girlOut(e):
            self.gui_girlButton.setScale(.5)
            self.gui_girlText.destroy()
       
        self.gui_boyButton.bind(DGG.WITHIN, _boyIn)
        self.gui_boyButton.bind(DGG.WITHOUT, _boyOut)
       
        self.gui_girlButton.bind(DGG.WITHIN, _girlIn)
        self.gui_girlButton.bind(DGG.WITHOUT, _girlOut)
       
        if self.data['gender']: self.setGender(self.data['gender'])
                                         
    elif _zone == 1:
        self.gui_arUp = self.getGuiItem("arrowRotateUp")
        self.gui_arDown = self.getGuiItem("arrowRotateDown")
        self.gui_sframe = self.getGuiItem("Frame")
        self.gui_sUp = self.getGuiItem("shuffleArrowUp")
        self.gui_sDown = self.getGuiItem("shuffleArrowDown")
       
        #type
       
        self.gui_arRightButton = DirectButton(parent=self.frame,pos=Vec3(.4,0,-.65),scale=.5,text="",relief=None,
                                   geom=(self.gui_arUp,self.gui_arDown,self.gui_arUp,self.gui_arUp),
                                   command=lambda:self.toon.setH(self.toon._toon,25),clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_arLeftButton = DirectButton(parent=self.frame,pos=Vec3(-.15,0,-.65),scale=.5,text="",relief=None,
                                   geom=(self.gui_arUp,self.gui_arDown,self.gui_arUp,self.gui_arUp),
                                   command=lambda:self.toon.setH(self.toon._toon,-25),clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_tFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,.3),scale=.8,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonType,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
       
        self.gui_tFlb = DirectButton(parent=self.gui_tFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonType)
                                     
        self.gui_tFrb = DirectButton(parent=self.gui_tFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonType)
                                     
        self.gui_tFt = OnscreenText(text=L10N('SPC_CAT'),scale=.2,parent=self.gui_tFrame,pos=(0,-.07),font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1),mayChange=1)
        self.gui_tFrb.setH(180)                                          
        self.gui_arLeftButton.setH(180)
             
        #head
       
        self.gui_tHeadFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,.1),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonHead,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
       
       
        DirectButton(parent=self.gui_tHeadFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonHead)
                                     
        DirectButton(parent=self.gui_tHeadFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonHead).setH(180)
                                     
        headText = TextNode('head text')
        headText.setFont(loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"))
        headText.setAlign(TextNode.ACenter)
        headText.setWtext(L10N('CAT_HEAD'))
        headTextNp = self.gui_tHeadFrame.attachNewNode(headText)
        headTextNp.setPos(0,0,0)
        headTextNp.setColor((1,1,1,1))              
        headTextNp.setScale(.12)
       
        #torso
       
        self.gui_tTorsoFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,-.1),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonTorso,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
       
       
        DirectButton(parent=self.gui_tTorsoFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonTorso)
                                     
        DirectButton(parent=self.gui_tTorsoFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonTorso).setH(180)
                                     
        OnscreenText(text=L10N('CAT_TORSO'),scale=.12,parent=self.gui_tTorsoFrame,pos=(0,-.04),font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
       
        #legs
       
        self.gui_tLegsFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,-.3),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonLegs,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
       
       
        DirectButton(parent=self.gui_tLegsFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonLegs)
                                     
        DirectButton(parent=self.gui_tLegsFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonLegs).setH(180)
                                     
        OnscreenText(text=L10N('CAT_LEGS'),scale=.12,parent=self.gui_tLegsFrame,pos=(0,-.04),font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))                                
   
    elif _zone == 2:
        self.gui_arUp = self.getGuiItem("arrowRotateUp")
        self.gui_arDown = self.getGuiItem("arrowRotateDown")
        self.gui_sframe = self.getGuiItem("Frame")
        self.gui_sUp = self.getGuiItem("shuffleArrowUp")
        self.gui_sDown = self.getGuiItem("shuffleArrowDown")
       
        #type
       
        self.gui_arRightButton = DirectButton(parent=self.frame,pos=Vec3(.4,0,-.65),scale=.5,text="",relief=None,
                                   geom=(self.gui_arUp,self.gui_arDown,self.gui_arUp,self.gui_arUp),
                                   command=lambda:self.toon.setH(self.toon._toon,25),clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_arLeftButton = DirectButton(parent=self.frame,pos=Vec3(-.15,0,-.65),scale=.5,text="",relief=None,
                                   geom=(self.gui_arUp,self.gui_arDown,self.gui_arUp,self.gui_arUp),
                                   command=lambda:self.toon.setH(self.toon._toon,-25),clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_tFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,.3),scale=.8,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonColor,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
       
        self.gui_tFlb = DirectButton(parent=self.gui_tFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonColor)
                                     
        self.gui_tFrb = DirectButton(parent=self.gui_tFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonColor)
                                     
        self.gui_tFt = OnscreenText(text="Toon",scale=.115,parent=self.gui_tFrame,pos=(0,-.04), #the word 'Toon' is equal for all langs
                        font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
        self.gui_tFt.setSx(.75)
        self.gui_tFrb.setH(180)                                          
        self.gui_arLeftButton.setH(180)
       
        #head
       
        self.gui_tHeadFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,.1),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonColor,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],extraArgs=['1'])
       
       
        DirectButton(parent=self.gui_tHeadFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonColor,extraArgs=['1'])
                                     
        DirectButton(parent=self.gui_tHeadFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonColor,extraArgs=['1']).setH(180)
                                     
        headText = TextNode('head text')
        headText.setFont(loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"))
        headText.setAlign(TextNode.ACenter)
        headText.setWtext(L10N('CAT_HEAD'))
        headTextNp = self.gui_tHeadFrame.attachNewNode(headText)
        headTextNp.setPos(0,0,0)
        headTextNp.setColor((1,1,1,1))              
        headTextNp.setScale(.12)
       
        #torso
       
        self.gui_tTorsoFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,-.1),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonColor,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],extraArgs=['2'])
       
       
        DirectButton(parent=self.gui_tTorsoFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonColor,extraArgs=['2'])
                                     
        DirectButton(parent=self.gui_tTorsoFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonColor,extraArgs=['2']).setH(180)
                                     
        OnscreenText(text=L10N('CAT_TORSO'),scale=.12,parent=self.gui_tTorsoFrame,pos=(0,-.04),
                     font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
       
        #legs
       
        self.gui_tLegsFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,-.3),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonColor,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],extraArgs=['3'])
       
       
        DirectButton(parent=self.gui_tLegsFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonColor,extraArgs=['3'])
                                     
        DirectButton(parent=self.gui_tLegsFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonColor,extraArgs=['3']).setH(180)
                                     
        OnscreenText(text=L10N('CAT_LEGS'),scale=.12,parent=self.gui_tLegsFrame,pos=(0,-.04),font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
       
    elif _zone == 3:
        self.gui_arUp = self.getGuiItem("arrowRotateUp")
        self.gui_arDown = self.getGuiItem("arrowRotateDown")
        self.gui_sframe = self.getGuiItem("Frame")
        self.gui_sUp = self.getGuiItem("shuffleArrowUp")
        self.gui_sDown = self.getGuiItem("shuffleArrowDown")
       
        #type
       
        self.gui_arRightButton = DirectButton(parent=self.frame,pos=Vec3(.4,0,-.65),scale=.5,text="",relief=None,
                                   geom=(self.gui_arUp,self.gui_arDown,self.gui_arUp,self.gui_arUp),
                                   command=lambda:self.toon.setH(self.toon._toon,25),clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_arLeftButton = DirectButton(parent=self.frame,pos=Vec3(-.15,0,-.65),scale=.5,text="",relief=None,
                                   geom=(self.gui_arUp,self.gui_arDown,self.gui_arUp,self.gui_arUp),
                                   command=lambda:self.toon.setH(self.toon._toon,-25),clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_tFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,.3),scale=.8,text="",relief=None,
                                   geom=self.gui_sframe,command=self.nextToonColor,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],state=DGG.DISABLED)
       
        self.gui_tFrame.hide()
       
        self.gui_tFlb = DirectButton(parent=self.gui_tFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.prevToonColor)
                                     
        self.gui_tFrb = DirectButton(parent=self.gui_tFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.nextToonColor)
                                     
        self.gui_tFt = OnscreenText(text="Toon",scale=.115,parent=self.gui_tFrame,pos=(0,-.04),
                        font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
        self.gui_tFt.setSx(.75)
        self.gui_tFrb.setH(180)                                          
        self.gui_arLeftButton.setH(180)
       
        #head
       
        self.gui_tHeadFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,.1),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.changeTop,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],extraArgs=['1'])
       
       
        DirectButton(parent=self.gui_tHeadFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.changeTop)
                                     
        DirectButton(parent=self.gui_tHeadFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.changeTop).setH(180)
                                     
        OnscreenText(text=L10N("CAT_SHIRT"),scale=.12,parent=self.gui_tHeadFrame,pos=(0,-.04),
                     font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
       
        #torso
       
        self.gui_tTorsoFrame = DirectButton(parent=self.frame,pos=Vec3(1,0,-.1),scale=.5235,text="",relief=None,
                                   geom=self.gui_sframe,command=self.changeBot,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'])
       
       
        DirectButton(parent=self.gui_tTorsoFrame,pos=Vec3(-.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.changeBot,extraArgs=[True])
                                     
        DirectButton(parent=self.gui_tTorsoFrame,pos=Vec3(.338,0,0),text="",relief=None,geom=(self.gui_sUp,self.gui_sDown,
                                     self.gui_sDown,self.gui_sDown),command=self.changeBot).setH(180)
                                     
        botText = L10N("CAT_SHORTS")
        if self.data['gender']=='F': botText=L10N("CAT_SKIRT")
                                     
        OnscreenText(text=botText,scale=.12,parent=self.gui_tTorsoFrame,pos=(0,-.04),
                     font=loader.loadFont("phase_3/models/fonts/ImpressBT.ttf"),fg=(1,1,1,1))
       
    elif _zone == 4:
        self.nextButton['geom'] = self.gui_ok
        self.nextButton['command'] = self.exit_fnAA
        self.nextButton.setScale(.8)
        base.cam.setPos(1, -21.1231, 4)
        base.cam.setH(-2)
        self.toon._toon.setPos(5, -1, 0)
        self.toon._toon.setH(138)
       
        g_up = (self.getNameGuiItem('ArrowUp'),self.getNameGuiItem('ArrowUp'),
                self.getNameGuiItem('ArrowDown'),self.getNameGuiItem('ArrowDown'))
               
        g_down = (self.getNameGuiItem('ArrowUp'),self.getNameGuiItem('ArrowUp'),
                  self.getNameGuiItem('ArrowDown'),self.getNameGuiItem('ArrowDown'))
                 
        g_circle = self.getNameGuiItem('ircle')
        g_circle.setColor(Vec4(.2,1,.2,1),1)
                 
        for g in g_down: g.setP(180)
       
        DirectFrame(parent=self.frame,frameSize=(-.15,.16,-.19,.19),frameColor=(230./255,190./255,207./255,1),pos=(-1.075,0,-.03))
        DirectFrame(parent=self.frame,frameSize=(-.15,.16,-.19,.19),frameColor=(190./255,230./255,196./255,1),pos=(-.675,0,-.03))
        DirectFrame(parent=self.frame,frameSize=(-.16,.16,-.19,.19),frameColor=(237./255,185./255,236./255,1),pos=(-.27,0,-.03))
        DirectFrame(parent=self.frame,frameSize=(-.15,.18,-.19,.19),frameColor=(237./255,185./255,236./255,1),pos=(.07,0,-.03))
       
        self.gui_nPanel = self.getNameGuiItem('namePanel')
        self.gui_nPanel.reparentTo(self.frame)
        self.gui_nPanel.setScale(.75)
        self.gui_nPanel.setX(-.5)
       
        self.gui_nameText = OnscreenText(align=TextNode.ACenter,text=unicode('\x135\x135'),parent=self.gui_nPanel,
                                         pos=(.025,.675),wordwrap=1/.075,scale=(.07,.1))
        self.buildName()
       
        _dPos,_iPos = ((0,0,.13),(0,0,-.33))
        _lz = .08
       
        self.sl1=DirectScrolledList(parent=self.frame,pos=(-1.075,0,_lz),
                                    numItemsVisible=5,itemFrame_frameColor=(1,0.0,0.0,1),itemFrame_pos = (0, 0, 0),
                                    decButton_geom = g_up,incButton_geom = g_down,
                                    decButton_relief = None,incButton_relief = None,
                                    decButton_pos = _dPos,incButton_pos = _iPos,
                                    decButton_scale = .695,incButton_scale = .695,
                                    decButton_clickSound=gamebase.sounds['GUI_click'],
                                    decButton_rolloverSound=gamebase.sounds['GUI_rollover'],
                                    incButton_clickSound=gamebase.sounds['GUI_click'],
                                    incButton_rolloverSound=gamebase.sounds['GUI_rollover'])
       
        self.sl2=DirectScrolledList(parent=self.frame,pos=(-.675,0,_lz),
                                    numItemsVisible=5,itemFrame_frameColor=(1,0.0,0.0,1),
                                    decButton_geom = g_up,incButton_geom = g_down,
                                    decButton_relief = None,incButton_relief = None,
                                    decButton_pos = _dPos,incButton_pos = _iPos,
                                    decButton_scale = .695,incButton_scale = .695,
                                    decButton_clickSound=gamebase.sounds['GUI_click'],
                                    decButton_rolloverSound=gamebase.sounds['GUI_rollover'],
                                    incButton_clickSound=gamebase.sounds['GUI_click'],
                                    incButton_rolloverSound=gamebase.sounds['GUI_rollover'])

       
        self.sl3=DirectScrolledList(parent=self.frame,pos=(-.27,0,_lz),
                                    numItemsVisible=5,itemFrame_frameColor=(1,0.0,0.0,1),
                                    decButton_geom = g_up,incButton_geom = g_down,
                                    decButton_relief = None,incButton_relief = None,
                                    decButton_pos = _dPos,incButton_pos = _iPos,
                                    decButton_scale = .695,incButton_scale = .695,
                                    decButton_clickSound=gamebase.sounds['GUI_click'],
                                    decButton_rolloverSound=gamebase.sounds['GUI_rollover'],
                                    incButton_clickSound=gamebase.sounds['GUI_click'],
                                    incButton_rolloverSound=gamebase.sounds['GUI_rollover'])

       
        self.sl4=DirectScrolledList(parent=self.frame,pos=(.07,0,_lz),
                                    numItemsVisible=5,itemFrame_frameColor=(1,0.0,0.0,1),
                                    decButton_geom = g_up,incButton_geom = g_down,
                                    decButton_relief = None,incButton_relief = None,
                                    decButton_pos = _dPos,incButton_pos = _iPos,
                                    decButton_scale = .695,incButton_scale = .695,
                                    decButton_clickSound=gamebase.sounds['GUI_click'],
                                    decButton_rolloverSound=gamebase.sounds['GUI_rollover'],
                                    incButton_clickSound=gamebase.sounds['GUI_click'],
                                    incButton_rolloverSound=gamebase.sounds['GUI_rollover'])
                                   
        self.gui_li = [0,[],[],[],[]]
       
        for i in xrange(4):
            _sl = eval('self.sl'+str(i+1))
            for b,name in enumerate(self.names[i]):
                l = DirectLabel(text = unicode(name.decode('latin-1')),text_scale=(.045,.055),
                                 frameColor = (0,0,0,0), state=DGG.NORMAL)
                l.bind(DGG.B1PRESS,self.gui_n_selectFI,[i,b])
                _sl.addItem(l)
                self.gui_li[i+1].append(l)
                if self.data['name'][-1][i] == b:
                    print i,b,self.data['name'][-1][i]
                    _sl.selectListItem(l)          
                    self.gui_n_frameClick(i+1,b)
     
        self.gui_tnb = DirectButton(pos=Vec3(-1.185, 0, 0.275),scale=.6,geom=g_circle,relief=None,parent=self.frame,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],command=self.gui_n_butt_click,extraArgs=[0])
        self.gui_tnb.setColor(.2,1,.2,1)
        self.gui_tnt = UnicodeText("Title",self.gui_tnb.getParent(),pos=(-1.085,0,.245),align = TextNode.ALeft, fg=Vec4(0,0,1,1), scale=.06)
       
        self.gui_lnb = DirectButton(pos=Vec3(-.178, 0, 0.275),scale=.6,geom=g_circle,relief=None,parent=self.frame,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],command=self.gui_n_butt_click,extraArgs=[2])
        self.gui_lnb.setColor(.2,1,.2,1)
        self.gui_lnt = UnicodeText("Last",self.gui_lnb.getParent(),pos=(-.078,0,.245),align = TextNode.ALeft, fg=Vec4(0,0,1,1), scale=.06)
       
        self.gui_fnb = DirectButton(pos=Vec3(-.787, 0, 0.275),scale=.6,geom=g_circle,relief=None,parent=self.frame,clickSound=gamebase.sounds['GUI_click'],
                                   rolloverSound=gamebase.sounds['GUI_rollover'],command=self.gui_n_butt_click,extraArgs=[1])
        self.gui_fnb.setColor(.2,1,.2,1)
        self.gui_fnt = UnicodeText("First",self.gui_fnb.getParent(),pos=(-.687,0,.245),align = TextNode.ALeft, fg=Vec4(0,0,1,1), scale=.06)
       
        self.gui_n_updateButt()
       
        ######################################
       
        self.typeNameBt = DirectButton(parent = self.gui_nPanel,geom=self.getNameGuiItem('quareUp'),relief=None,clickSound=gamebase.sounds['GUI_click'],
                                        rolloverSound=gamebase.sounds['GUI_rollover'],pos=Vec3(0,0,-.529),text="Escreva um nome",
                                        command=self.typeName,scale=.07,geom_scale=1.8/.07).hide() #dont implement this right now

       
       
def dismiss(self):
    self.np.removeNode()
    self.frame.removeNode()
    self.textframe.removeNode()
    self.CAT_music.stop()
   
def __tth_area__(self): pass

print “Ran”
time.sleep(6)

run()

[/code]

Toontown House… LOL

Do you mind telling where it was leaked? It belongs to Toontown House and should not be with you. Anyway, you won’t be able to run it, because it’s just the (VERY OLD) create a toon.

I found it on pastebin. pastebin.com/U8PjtnNA here is the link, sorry. really its no surprise that code has leaked, seeing the many conflicts between members of tth. I again apologize for this, I really didn’t read the title and assumed the person who leaked it had created it, I was just excited to see a code for make-a-toon.

OK, so you can’t run because it’s just a part of the (old) codes. It lacks L10N, Toon module, etc.

ok, well ty. If I updated those, would it work? I also found this one, not sure if it belongs to tth also but

from sys import argv
from panda3d.core import Vec3
from pandac.PandaModules import loadPrcFileData
loadPrcFileData('configurate', "window-title Loading")
from direct.directbase import DirectStart
from direct.task import Task
from direct.actor.Actor import Actor
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.interval.IntervalGlobal import *
from direct.showbase.InputStateGlobal import inputState
from direct.controls.GravityWalker import GravityWalker
from direct.showbase import DirectObject
from direct.interval.IntervalGlobal import *
import urllib, os, __main__, random
from pandac.PandaModules import *
from random import choice
import direct.directbase.DirectStart
from direct.gui.OnscreenText import OnscreenText
 
from panda3d.core import TextNode
 
base.disableMouse()


legsAnimDict = {'right-hand-start': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_right-hand-start.bam', 'firehose': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_firehose.bam', 'rotateL-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_rotateL-putt.bam', 'slip-forward': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_slip-forward.bam', 'catch-eatnrun': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_eatnrun.bam', 'tickle': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_tickle.bam', 'water-gun': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_water-gun.bam', 'leverNeutral': 'phase_10/models/char/tt_a_chr_dgs_shorts_legs_leverNeutral.bam', 'swim': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_swim.bam', 'catch-run': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_gamerun.bam', 'sad-neutral': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_sad-neutral.bam', 'pet-loop': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_petloop.bam', 'jump-squat': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_jump-zstart.bam', 'wave': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_wave.bam', 'reel-neutral': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_reelneutral.bam', 'pole-neutral': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_poleneutral.bam', 'bank': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_jellybeanJar.bam', 'scientistGame': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_scientistGame.bam', 'right-hand': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_right-hand.bam', 'lookloop-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_lookloop-putt.bam', 'victory': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_victory-dance.bam', 'lose': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_lose.bam', 'cringe': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_cringe.bam', 'right': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_right.bam', 'headdown-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_headdown-putt.bam', 'conked': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_conked.bam', 'jump': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_jump.bam', 'into-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_into-putt.bam', 'fish-end': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_fishEND.bam', 'running-jump-land': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_leap_zend.bam', 'shrug': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_shrug.bam', 'sprinkle-dust': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_sprinkle-dust.bam', 'hold-bottle': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_hold-bottle.bam', 'takePhone': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_takePhone.bam', 'melt': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_melt.bam', 'pet-start': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_petin.bam', 'look-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_look-putt.bam', 'loop-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_loop-putt.bam', 'good-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_good-putt.bam', 'juggle': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_juggle.bam', 'run': 'phase_3/models/char/tt_a_chr_dgs_shorts_legs_run.bam', 'pushbutton': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_press-button.bam', 'sidestep-right': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_jump-back-right.bam', 'water': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_water.bam', 'right-point-start': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_right-point-start.bam', 'bad-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_bad-putt.bam', 'struggle': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_struggle.bam', 'running-jump': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_running-jump.bam', 'callPet': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_callPet.bam', 'throw': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_pie-throw.bam', 'catch-eatneutral': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_eat_neutral.bam', 'tug-o-war': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_tug-o-war.bam', 'bow': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_bow.bam', 'swing': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_swing.bam', 'climb': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_climb.bam', 'scientistWork': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_scientistWork.bam', 'think': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_think.bam', 'catch-intro-throw': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_gameThrow.bam', 'walk': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_walk.bam', 'down': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_down.bam', 'pole': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_pole.bam', 'periscope': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_periscope.bam', 'duck': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_duck.bam', 'curtsy': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_curtsy.bam', 'jump-land': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_jump-zend.bam', 'loop-dig': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_loop_dig.bam', 'angry': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_angry.bam', 'bored': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_bored.bam', 'swing-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_swing-putt.bam', 'pet-end': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_petend.bam', 'spit': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_spit.bam', 'right-point': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_right-point.bam', 'start-dig': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_into_dig.bam', 'castlong': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_castlong.bam', 'confused': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_confused.bam', 'neutral': 'phase_3/models/char/tt_a_chr_dgs_shorts_legs_neutral.bam', 'jump-idle': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_jump-zhang.bam', 'reel': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_reel.bam', 'slip-backward': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_slip-backward.bam', 'sound': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_shout.bam', 'sidestep-left': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_sidestep-left.bam', 'up': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_up.bam', 'fish-again': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_fishAGAIN.bam', 'cast': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_cast.bam', 'phoneBack': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_phoneBack.bam', 'phoneNeutral': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_phoneNeutral.bam', 'scientistJealous': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_scientistJealous.bam', 'battlecast': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_fish.bam', 'sit-start': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_intoSit.bam', 'toss': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_toss.bam', 'happy-dance': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_happy-dance.bam', 'running-jump-squat': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_leap_zstart.bam', 'teleport': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_teleport.bam', 'sit': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_sit.bam', 'sad-walk': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_losewalk.bam', 'give-props-start': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_give-props-start.bam', 'book': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_book.bam', 'running-jump-idle': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_leap_zhang.bam', 'scientistEmcee': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_scientistEmcee.bam', 'leverPull': 'phase_10/models/char/tt_a_chr_dgs_shorts_legs_leverPull.bam', 'tutorial-neutral': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_tutorial-neutral.bam', 'badloop-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_badloop-putt.bam', 'give-props': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_give-props.bam', 'hold-magnet': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_hold-magnet.bam', 'hypnotize': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_hypnotize.bam', 'left-point': 'phase_3.5/models/char/tt_a_chr_dgs_shorts_legs_left-point.bam', 'leverReach': 'phase_10/models/char/tt_a_chr_dgs_shorts_legs_leverReach.bam', 'feedPet': 'phase_5.5/models/char/tt_a_chr_dgs_shorts_legs_feedPet.bam', 'reel-H': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_reelH.bam', 'applause': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_applause.bam', 'smooch': 'phase_5/models/char/tt_a_chr_dgs_shorts_legs_smooch.bam', 'rotateR-putt': 'phase_6/models/char/tt_a_chr_dgs_shorts_legs_rotateR-putt.bam', 'fish-neutral': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_fishneutral.bam', 'push': 'phase_9/models/char/tt_a_chr_dgs_shorts_legs_push.bam', 'catch-neutral': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_gameneutral.bam', 'left': 'phase_4/models/char/tt_a_chr_dgs_shorts_legs_left.bam'}
 
torsoAnimDict = {'right-hand-start': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_right-hand-start.bam', 'firehose': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_firehose.bam', 'rotateL-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_rotateL-putt.bam', 'slip-forward': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_slip-forward.bam', 'catch-eatnrun': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_eatnrun.bam', 'tickle': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_tickle.bam', 'water-gun': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_water-gun.bam', 'leverNeutral': 'phase_10/models/char/tt_a_chr_dgl_shorts_torso_leverNeutral.bam', 'swim': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_swim.bam', 'catch-run': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_gamerun.bam', 'sad-neutral': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_sad-neutral.bam', 'pet-loop': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_petloop.bam', 'jump-squat': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_jump-zstart.bam', 'wave': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_wave.bam', 'reel-neutral': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_reelneutral.bam', 'pole-neutral': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_poleneutral.bam', 'bank': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_jellybeanJar.bam', 'scientistGame': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_scientistGame.bam', 'right-hand': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_right-hand.bam', 'lookloop-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_lookloop-putt.bam', 'victory': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_victory-dance.bam', 'lose': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_lose.bam', 'cringe': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_cringe.bam', 'right': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_right.bam', 'headdown-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_headdown-putt.bam', 'conked': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_conked.bam', 'jump': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_jump.bam', 'into-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_into-putt.bam', 'fish-end': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_fishEND.bam', 'running-jump-land': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_leap_zend.bam', 'shrug': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_shrug.bam', 'sprinkle-dust': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_sprinkle-dust.bam', 'hold-bottle': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_hold-bottle.bam', 'takePhone': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_takePhone.bam', 'melt': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_melt.bam', 'pet-start': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_petin.bam', 'look-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_look-putt.bam', 'loop-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_loop-putt.bam', 'good-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_good-putt.bam', 'juggle': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_juggle.bam', 'run': 'phase_3/models/char/tt_a_chr_dgl_shorts_torso_run.bam', 'pushbutton': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_press-button.bam', 'sidestep-right': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_jump-back-right.bam', 'water': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_water.bam', 'right-point-start': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_right-point-start.bam', 'bad-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_bad-putt.bam', 'struggle': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_struggle.bam', 'running-jump': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_running-jump.bam', 'callPet': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_callPet.bam', 'throw': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_pie-throw.bam', 'catch-eatneutral': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_eat_neutral.bam', 'tug-o-war': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_tug-o-war.bam', 'bow': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_bow.bam', 'swing': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_swing.bam', 'climb': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_climb.bam', 'scientistWork': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_scientistWork.bam', 'think': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_think.bam', 'catch-intro-throw': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_gameThrow.bam', 'walk': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_walk.bam', 'down': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_down.bam', 'pole': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_pole.bam', 'periscope': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_periscope.bam', 'duck': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_duck.bam', 'curtsy': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_curtsy.bam', 'jump-land': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_jump-zend.bam', 'loop-dig': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_loop_dig.bam', 'angry': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_angry.bam', 'bored': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_bored.bam', 'swing-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_swing-putt.bam', 'pet-end': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_petend.bam', 'spit': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_spit.bam', 'right-point': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_right-point.bam', 'start-dig': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_into_dig.bam', 'castlong': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_castlong.bam', 'confused': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_confused.bam', 'neutral': 'phase_3/models/char/tt_a_chr_dgl_shorts_torso_neutral.bam', 'jump-idle': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_jump-zhang.bam', 'reel': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_reel.bam', 'slip-backward': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_slip-backward.bam', 'sound': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_shout.bam', 'sidestep-left': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_sidestep-left.bam', 'up': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_up.bam', 'fish-again': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_fishAGAIN.bam', 'cast': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_cast.bam', 'phoneBack': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_phoneBack.bam', 'phoneNeutral': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_phoneNeutral.bam', 'scientistJealous': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_scientistJealous.bam', 'battlecast': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_fish.bam', 'sit-start': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_intoSit.bam', 'toss': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_toss.bam', 'happy-dance': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_happy-dance.bam', 'running-jump-squat': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_leap_zstart.bam', 'teleport': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_teleport.bam', 'sit': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_sit.bam', 'sad-walk': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_losewalk.bam', 'give-props-start': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_give-props-start.bam', 'book': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_book.bam', 'running-jump-idle': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_leap_zhang.bam', 'scientistEmcee': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_scientistEmcee.bam', 'leverPull': 'phase_10/models/char/tt_a_chr_dgl_shorts_torso_leverPull.bam', 'tutorial-neutral': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_tutorial-neutral.bam', 'badloop-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_badloop-putt.bam', 'give-props': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_give-props.bam', 'hold-magnet': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_hold-magnet.bam', 'hypnotize': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_hypnotize.bam', 'left-point': 'phase_3.5/models/char/tt_a_chr_dgl_shorts_torso_left-point.bam', 'leverReach': 'phase_10/models/char/tt_a_chr_dgl_shorts_torso_leverReach.bam', 'feedPet': 'phase_5.5/models/char/tt_a_chr_dgl_shorts_torso_feedPet.bam', 'reel-H': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_reelH.bam', 'applause': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_applause.bam', 'smooch': 'phase_5/models/char/tt_a_chr_dgl_shorts_torso_smooch.bam', 'rotateR-putt': 'phase_6/models/char/tt_a_chr_dgl_shorts_torso_rotateR-putt.bam', 'fish-neutral': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_fishneutral.bam', 'push': 'phase_9/models/char/tt_a_chr_dgl_shorts_torso_push.bam', 'catch-neutral': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_gameneutral.bam', 'left': 'phase_4/models/char/tt_a_chr_dgl_shorts_torso_left.bam'}
 
DuckHead = loader.loadModel('phase_3/models/char/duck-heads-1000.bam')
otherParts = DuckHead.findAllMatches('**/*long*')
for partNum in range(0, otherParts.getNumPaths()):
    otherParts.getPath(partNum).removeNode()
ntrlMuzzle = DuckHead.find('**/*muzzle*neutral')
otherParts = DuckHead.findAllMatches('**/*muzzle*')
for partNum in range(0, otherParts.getNumPaths()):
    part = otherParts.getPath(partNum)
    if part != ntrlMuzzle:
        otherParts.getPath(partNum).removeNode()
DuckTorso = loader.loadModel('phase_3/models/char/tt_a_chr_dgl_shorts_torso_1000.bam')
DuckLegs  = loader.loadModel('phase_3/models/char/tt_a_chr_dgs_shorts_legs_1000.bam')
otherParts = DuckLegs.findAllMatches('**/boots*')+DuckLegs.findAllMatches('**/shoes')
for partNum in range(0, otherParts.getNumPaths()):
    otherParts.getPath(partNum).removeNode()
 
DuckBody = Actor({'head':DuckHead, 'torso':DuckTorso, 'legs':DuckLegs},
                {'torso':torsoAnimDict, 'legs':legsAnimDict})
DuckBody.attach('head', 'torso', 'def_head')
DuckBody.attach('torso', 'legs', 'joint_hips')
   
gloves = DuckBody.findAllMatches('**/hands')
ears = DuckBody.findAllMatches('**/*ears*')
head = DuckBody.findAllMatches('**/head-*')
sleeves = DuckBody.findAllMatches('**/sleeves')
shirt = DuckBody.findAllMatches('**/torso-top')
shorts = DuckBody.findAllMatches('**/torso-bot')
neck = DuckBody.findAllMatches('**/neck')
arms = DuckBody.findAllMatches('**/arms')
legs = DuckBody.findAllMatches('**/legs')
feet = DuckBody.findAllMatches('**/feet')
   
bodyNodes = []
bodyNodes += [gloves]
bodyNodes += [head, ears]
bodyNodes += [sleeves, shirt, shorts]
bodyNodes += [neck, arms, legs, feet]
bodyNodes[0].setColor(1, 1, 1, 1)
bodyNodes[1].setColor(1, 0.5, 0, 1)
bodyNodes[2].setColor(1, 0.5, 0, 1)
bodyNodes[3].setColor(0.264, 0.308, 0.676, 1)
bodyNodes[4].setColor(0.264, 0.308, 0.676, 1)
bodyNodes[5].setColor(1, 1, 1, 1)
bodyNodes[6].setColor(1, 0.5, 0, 1)
bodyNodes[7].setColor(1, 0.5, 0, 1)
bodyNodes[8].setColor(0.276, 0.872, 0.36, 1)
bodyNodes[9].setColor(0.276, 0.872, 0.36, 1)
 
topTex = loader.loadTexture('phase_3/maps/desat_shirt_5.jpg')
botTex = loader.loadTexture('phase_4/maps/CowboyShorts1.jpg')
sleeveTex = loader.loadTexture('phase_3/maps/desat_sleeve_5.jpg')
 
bodyNodes[3].setTexture(sleeveTex, 1)
bodyNodes[4].setTexture(topTex, 1)
bodyNodes[5].setTexture(botTex, 1)
   
DuckBody.reparentTo(render)
   
geom = DuckBody.getGeomNode()
geom.getChild(0).setSx(0.730000019073)
geom.getChild(0).setSz(0.730000019073)
   
offset = 3.2375
   
base.camera.reparentTo(DuckBody)
base.camera.setPos(0, -9.0 - offset, offset)
wallBitmask = BitMask32(1)
floorBitmask = BitMask32(2)
base.cTrav = CollisionTraverser()
 
base.camera.setX(0.29)
base.camera.setY(13.12)
base.camera.setZ(3.24)
base.camera.setH(180)
 
train = loader.loadModel('phase_3/models/makeatoon/tt_m_ara_mat_room.bam')
train.reparentTo(render)
train.setPos(0,0,0)
train.setHpr(180,0,0)
 
 
def setText():
   DuckBody.find('**/head-short').setColor(0,255,0)
   DuckBody.find('**/head-front-short').setColor(0,255,0)
   DuckBody.find('**/neck').setColor(0,255,0)
   DuckBody.find('**/arms').setColor(0,255,0)
   DuckBody.find('**/legs').setColor(0,255,0)
   DuckBody.find('**/feet').setColor(0,255,0)
   DuckBody.find('**/torso-bot').setColor(255,255,255)
       
 
# Add button
b = DirectButton(text = ("Green"), scale=.09, pos = (-1.75, 0, -.90), command=setText)
 
def setText():
   DuckBody.find('**/head-short').setColor(0,0,255)
   DuckBody.find('**/head-front-short').setColor(0,0,255)
   DuckBody.find('**/neck').setColor(0,0,255)
   DuckBody.find('**/arms').setColor(0,0,255)
   DuckBody.find('**/legs').setColor(0,0,255)
   DuckBody.find('**/feet').setColor(0,0,255)
   DuckBody.find('**/torso-bot').setColor(255,255,255)
       
 
# Add button
b = DirectButton(text = ("Blue"), scale=.09, pos = (-1.75, 0, -.80), command=setText)
 
def setText():
   DuckBody.find('**/head-short').setColor(255,255,0)
   DuckBody.find('**/head-front-short').setColor(255,255,0)
   DuckBody.find('**/neck').setColor(255,255,0)
   DuckBody.find('**/arms').setColor(255,255,0)
   DuckBody.find('**/legs').setColor(255,255,0)
   DuckBody.find('**/feet').setColor(255,255,0)
   DuckBody.find('**/torso-bot').setColor(255,255,255)
       
 
# Add button
b = DirectButton(text = ("Yellow"), scale=.09, pos = (-1.75, 0, -.60), command=setText)
 
def setText():
   DuckBody.find('**/head-short').setColor(0,255,255)
   DuckBody.find('**/head-front-short').setColor(0,255,255)
   DuckBody.find('**/neck').setColor(0,255,255)
   DuckBody.find('**/arms').setColor(0,255,255)
   DuckBody.find('**/legs').setColor(0,255,255)
   DuckBody.find('**/feet').setColor(0,255,255)
   DuckBody.find('**/torso-bot').setColor(255,255,255)
       
 
# Add button
b = DirectButton(text = ("Light Blue"), scale=.09, pos = (-1.70, 0, -.70), command=setText)
   
def setText():
   DuckBody.find('**/head-short').setColor(0.45,0.1,0.7)
   DuckBody.find('**/head-front-short').setColor(0.45,0.1,0.7)
   DuckBody.find('**/neck').setColor(0.45,0.1,0.7)
   DuckBody.find('**/arms').setColor(0.45,0.1,0.7)
   DuckBody.find('**/legs').setColor(0.45,0.1,0.7)
   DuckBody.find('**/feet').setColor(0.45,0.1,0.7)
   DuckBody.find('**/torso-bot').setColor(255,255,255)
       
 
# Add button
b = DirectButton(text = ("Purple"), scale=.09, pos = (-1.75, 0, -.50), command=setText)
 
def setText():
   DuckBody.find('**/head-short').setColor(117,97,208)
   DuckBody.find('**/head-front-short').setColor(117,97,208)
   DuckBody.find('**/neck').setColor(117,97,208)
   DuckBody.find('**/arms').setColor(117,97,208)
   DuckBody.find('**/legs').setColor(117,97,208)
   DuckBody.find('**/feet').setColor(117,97,208)
   DuckBody.find('**/torso-bot').setColor(117,97,208)
       
 
# Add button
b = DirectButton(text = ("Slate Blue"), scale=.09, pos = (-1.75, 0, -.40), command=setText)
 
 
 
 
 
run()