diff --git a/toontown/makeatoon/BodyShop.py b/toontown/makeatoon/BodyShop.py index 4b404e9..39a634d 100644 --- a/toontown/makeatoon/BodyShop.py +++ b/toontown/makeatoon/BodyShop.py @@ -19,13 +19,13 @@ class BodyShop(StateData.StateData): self.legChoice = 0 self.headChoice = 0 self.speciesChoice = 0 + self.eyelashesChoice = 0 return def enter(self, toon, shopsVisited = []): base.disableMouse() self.toon = toon self.dna = self.toon.getStyle() - gender = self.toon.style.getGender() self.speciesStart = self.getSpeciesStart() self.speciesChoice = self.speciesStart self.headStart = 0 @@ -34,17 +34,16 @@ class BodyShop(StateData.StateData): self.torsoChoice = ToonDNA.toonTorsoTypes.index(self.dna.torso) % 3 self.legStart = 0 self.legChoice = ToonDNA.toonLegTypes.index(self.dna.legs) + self.eyelashesStart = 0 + self.eyelashesChoice = 0 if CLOTHESSHOP in shopsVisited: self.clothesPicked = 1 else: self.clothesPicked = 0 self.clothesPicked = 1 - if gender == 'm' or ToonDNA.GirlBottoms[self.dna.botTex][1] == ToonDNA.SHORTS: - torsoStyle = 's' - torsoPool = ToonDNA.toonTorsoTypes[:3] - else: - torsoStyle = 'd' - torsoPool = ToonDNA.toonTorsoTypes[3:6] + + torsoStyle = 'd' + torsoPool = ToonDNA.toonTorsoTypes[3:6] self.__swapSpecies(0) self.__swapHead(0) self.__swapTorso(0) @@ -179,60 +178,39 @@ class BodyShop(StateData.StateData): self.ignore('MAT-newToonCreated') def __swapTorso(self, offset): - gender = self.toon.style.getGender() if not self.clothesPicked: length = len(ToonDNA.toonTorsoTypes[6:]) torsoOffset = 6 - elif gender == 'm': - length = len(ToonDNA.toonTorsoTypes[:3]) + + length = len(ToonDNA.toonTorsoTypes[3:6]) + if self.toon.style.torso[1] == 'd': + torsoOffset = 3 + else: torsoOffset = 0 - if self.dna.armColor not in ToonDNA.defaultBoyColorList: - self.dna.armColor = ToonDNA.defaultBoyColorList[0] - if self.dna.legColor not in ToonDNA.defaultBoyColorList: - self.dna.legColor = ToonDNA.defaultBoyColorList[0] - if self.dna.headColor not in ToonDNA.defaultBoyColorList: - self.dna.headColor = ToonDNA.defaultBoyColorList[0] - if self.toon.style.topTex not in ToonDNA.MakeAToonBoyShirts: - randomShirt = ToonDNA.getRandomTop(gender, ToonDNA.MAKE_A_TOON) - shirtTex, shirtColor, sleeveTex, sleeveColor = randomShirt - self.toon.style.topTex = shirtTex - self.toon.style.topTexColor = shirtColor - self.toon.style.sleeveTex = sleeveTex - self.toon.style.sleeveTexColor = sleeveColor - if self.toon.style.botTex not in ToonDNA.MakeAToonBoyBottoms: - botTex, botTexColor = ToonDNA.getRandomBottom(gender, ToonDNA.MAKE_A_TOON) + if self.dna.armColor not in ToonDNA.defaultColorList: + self.dna.armColor = ToonDNA.defaultColorList[0] + if self.dna.legColor not in ToonDNA.defaultColorList: + self.dna.legColor = ToonDNA.defaultColorList[0] + if self.dna.headColor not in ToonDNA.defaultColorList: + self.dna.headColor = ToonDNA.defaultColorList[0] + if self.toon.style.topTex not in ToonDNA.MakeAToonShirts: + randomShirt = ToonDNA.getRandomTop(ToonDNA.MAKE_A_TOON) + shirtTex, shirtColor, sleeveTex, sleeveColor = randomShirt + self.toon.style.topTex = shirtTex + self.toon.style.topTexColor = shirtColor + self.toon.style.sleeveTex = sleeveTex + self.toon.style.sleeveTexColor = sleeveColor + if self.toon.style.botTex not in ToonDNA.MakeAToonBottoms: + if self.toon.style.torso[1] == 'd': + botTex, botTexColor = ToonDNA.getRandomBottom(ToonDNA.MAKE_A_TOON, girlBottomType=ToonDNA.SKIRT) self.toon.style.botTex = botTex self.toon.style.botTexColor = botTexColor - else: - length = len(ToonDNA.toonTorsoTypes[3:6]) - if self.toon.style.torso[1] == 'd': torsoOffset = 3 else: + botTex, botTexColor = ToonDNA.getRandomBottom(ToonDNA.MAKE_A_TOON, girlBottomType=ToonDNA.SHORTS) + self.toon.style.botTex = botTex + self.toon.style.botTexColor = botTexColor torsoOffset = 0 - if self.dna.armColor not in ToonDNA.defaultGirlColorList: - self.dna.armColor = ToonDNA.defaultGirlColorList[0] - if self.dna.legColor not in ToonDNA.defaultGirlColorList: - self.dna.legColor = ToonDNA.defaultGirlColorList[0] - if self.dna.headColor not in ToonDNA.defaultGirlColorList: - self.dna.headColor = ToonDNA.defaultGirlColorList[0] - if self.toon.style.topTex not in ToonDNA.MakeAToonGirlShirts: - randomShirt = ToonDNA.getRandomTop(gender, ToonDNA.MAKE_A_TOON) - shirtTex, shirtColor, sleeveTex, sleeveColor = randomShirt - self.toon.style.topTex = shirtTex - self.toon.style.topTexColor = shirtColor - self.toon.style.sleeveTex = sleeveTex - self.toon.style.sleeveTexColor = sleeveColor - if self.toon.style.botTex not in ToonDNA.MakeAToonGirlBottoms: - if self.toon.style.torso[1] == 'd': - botTex, botTexColor = ToonDNA.getRandomBottom(gender, ToonDNA.MAKE_A_TOON, girlBottomType=ToonDNA.SKIRT) - self.toon.style.botTex = botTex - self.toon.style.botTexColor = botTexColor - torsoOffset = 3 - else: - botTex, botTexColor = ToonDNA.getRandomBottom(gender, ToonDNA.MAKE_A_TOON, girlBottomType=ToonDNA.SHORTS) - self.toon.style.botTex = botTex - self.toon.style.botTexColor = botTexColor - torsoOffset = 0 self.torsoChoice = (self.torsoChoice + offset) % length self.__updateScrollButtons(self.torsoChoice, length, self.torsoStart, self.torsoLButton, self.torsoRButton) torso = ToonDNA.toonTorsoTypes[torsoOffset + self.torsoChoice] @@ -280,6 +258,20 @@ class BodyShop(StateData.StateData): self.toon.swapToonColor(self.dna) self.restrictHeadType(newHead) + def __swapEyelashes(self, offset): + length = len([0,1]) + self.eyelashesChoice = (self.eyelashesChoice + offset ) % length + self.__updateScrollButtons(self.eyelashesChoice, length, self.eyelashesStart, + self.eyelashesLButton, self.eyelashesRButton) + self.eyelashes = [0, 1][self.eyelashesChoice] + self.__updateEyelashes() + + def __updateEyelashes(self): + return + #WIP + #TODO figure out what toggles eyelashes and use the model head based on if they want eyelashes or not + self.__updateScrollButtons(self.eyelashesChoice, len([0, 1]), self.eyelashesStart, + self.eyelashesLButton, self.eyelashesRButton) def __updateScrollButtons(self, choice, length, start, lButton, rButton): if choice == (start - 1) % length: rButton['state'] = DGG.DISABLED diff --git a/toontown/makeatoon/GenderShop.py b/toontown/makeatoon/GenderShop.py deleted file mode 100644 index 45fe50b..0000000 --- a/toontown/makeatoon/GenderShop.py +++ /dev/null @@ -1,118 +0,0 @@ -from panda3d.core import * -from direct.fsm import StateData -from direct.gui.DirectGui import * -from toontown.toonbase import TTLocalizer -from toontown.toonbase import ToontownGlobals -from toontown.toon import ToonDNA -from toontown.toon import Toon -from .MakeAToonGlobals import * -from direct.directnotify import DirectNotifyGlobal -import random - -class GenderShop(StateData.StateData): - notify = DirectNotifyGlobal.directNotify.newCategory('GenderShop') - - def __init__(self, makeAToon, doneEvent): - StateData.StateData.__init__(self, doneEvent) - self.shopsVisited = [] - self.toon = None - self.gender = 'm' - self.makeAToon = makeAToon - return - - def enter(self): - base.disableMouse() - self.accept('next', self.__handleForward) - return None - - def showButtons(self): - return None - - def exit(self): - self.ignore('next') - - def load(self): - gui = loader.loadModel('phase_3/models/gui/tt_m_gui_mat_mainGui') - guiBoyUp = gui.find('**/tt_t_gui_mat_boyUp') - guiBoyDown = gui.find('**/tt_t_gui_mat_boyDown') - guiGirlUp = gui.find('**/tt_t_gui_mat_girlUp') - guiGirlDown = gui.find('**/tt_t_gui_mat_girlDown') - self.boyButton = DirectButton(relief=None, image=(guiBoyUp, - guiBoyDown, - guiBoyUp, - guiBoyDown), image_scale=halfButtonScale, image1_scale=halfButtonHoverScale, image2_scale=halfButtonHoverScale, pos=(-0.4, 0, -0.8), command=self.createRandomBoy, text=('', - TTLocalizer.GenderShopBoyButtonText, - TTLocalizer.GenderShopBoyButtonText, - ''), text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08, text_pos=(0, 0.19), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1)) - self.boyButton.hide() - self.girlButton = DirectButton(relief=None, image=(guiGirlUp, - guiGirlDown, - guiGirlUp, - guiGirlDown), image_scale=halfButtonScale, image1_scale=halfButtonHoverScale, image2_scale=halfButtonHoverScale, pos=(0.4, 0, -0.8), command=self.createRandomGirl, text=('', - TTLocalizer.GenderShopGirlButtonText, - TTLocalizer.GenderShopGirlButtonText, - ''), text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08, text_pos=(0, 0.19), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1)) - self.girlButton.hide() - gui.removeNode() - del gui - self.toon = None - return - - def unload(self): - self.boyButton.destroy() - self.girlButton.destroy() - del self.boyButton - del self.girlButton - if self.toon: - self.toon.delete() - self.makeAToon = None - return - - def setGender(self, choice): - self.__setGender(choice) - - def __setGender(self, choice): - self.gender = 'm' - if self.toon: - self.gender = self.toon.style.gender - messenger.send(self.doneEvent) - - def hideButtons(self): - self.boyButton.hide() - self.girlButton.hide() - - def showButtons(self): - self.boyButton.show() - self.girlButton.show() - - def createRandomBoy(self): - self._createRandomToon('m') - - def createRandomGirl(self): - self._createRandomToon('f') - - def _createRandomToon(self, gender): - if self.toon: - self.toon.stopBlink() - self.toon.stopLookAroundNow() - self.toon.delete() - self.dna = ToonDNA.ToonDNA() - self.dna.newToonRandom(gender=gender, stage=1) - self.toon = Toon.Toon() - self.toon.setDNA(self.dna) - self.toon.useLOD(1000) - self.toon.setNameVisible(0) - self.toon.startBlink() - self.toon.startLookAround() - self.toon.reparentTo(render) - self.toon.setPos(self.makeAToon.toonPosition) - self.toon.setHpr(self.makeAToon.toonHpr) - self.toon.setScale(self.makeAToon.toonScale) - self.toon.loop('neutral') - self.makeAToon.setNextButtonState(DGG.NORMAL) - self.makeAToon.setToon(self.toon) - messenger.send('MAT-newToonCreated') - - def __handleForward(self): - self.doneStatus = 'next' - messenger.send(self.doneEvent) diff --git a/toontown/makeatoon/MakeAToon.py b/toontown/makeatoon/MakeAToon.py index a42bbdc..44b7995 100644 --- a/toontown/makeatoon/MakeAToon.py +++ b/toontown/makeatoon/MakeAToon.py @@ -18,7 +18,6 @@ from .MakeAToonGlobals import * from direct.interval.IntervalGlobal import * from direct.directnotify import DirectNotifyGlobal from toontown.toontowngui import TTDialog -from . import GenderShop from . import BodyShop from . import ColorShop from . import MakeClothesGUI @@ -53,24 +52,22 @@ class MakeAToon(StateData.StateData): self.namelessPotAv = av self.nameList.append(av.name) - self.fsm = ClassicFSM.ClassicFSM('MakeAToon', [State.State('Init', self.enterInit, self.exitInit, ['GenderShop', 'NameShop']), - State.State('GenderShop', self.enterGenderShop, self.exitGenderShop, ['BodyShop']), - State.State('BodyShop', self.enterBodyShop, self.exitBodyShop, ['GenderShop', 'ColorShop']), + self.fsm = ClassicFSM.ClassicFSM('MakeAToon', [State.State('Init', self.enterInit, self.exitInit, ['BodyShop', 'NameShop']), + State.State('BodyShop', self.enterBodyShop, self.exitBodyShop, ['ColorShop']), State.State('ColorShop', self.enterColorShop, self.exitColorShop, ['BodyShop', 'ClothesShop']), State.State('ClothesShop', self.enterClothesShop, self.exitClothesShop, ['ColorShop', 'NameShop']), State.State('NameShop', self.enterNameShop, self.exitNameShop, ['ClothesShop']), State.State('Done', self.enterDone, self.exitDone, [])], 'Init', 'Done') self.parentFSM = parentFSM self.parentFSM.getStateNamed('createAvatar').addChild(self.fsm) - self.gs = GenderShop.GenderShop(self, 'GenderShop-done') self.bs = BodyShop.BodyShop('BodyShop-done') self.cos = ColorShop.ColorShop('ColorShop-done') self.cls = MakeClothesGUI.MakeClothesGUI('ClothesShop-done') self.ns = NameShop.NameShop(self, 'NameShop-done', avList, index, self.isPaid) - self.shop = GENDERSHOP + self.shop = BODYSHOP self.shopsVisited = [] if self.warp: - self.shopsVisited = [GENDERSHOP, + self.shopsVisited = [ BODYSHOP, COLORSHOP, CLOTHESSHOP] @@ -113,7 +110,7 @@ class MakeAToon(StateData.StateData): self.guiLastButton.hide() self.fsm.request('NameShop') else: - self.fsm.request('GenderShop') + self.fsm.request('BodyShop') def exit(self): base.camLens.setFov(ToontownGlobals.DefaultCameraFov) @@ -246,7 +243,6 @@ class MakeAToon(StateData.StateData): self.toon.setNameVisible(0) self.toon.startBlink() self.toon.startLookAround() - self.gs.load() self.bs.load() self.cos.load() self.cls.load() @@ -268,12 +264,10 @@ class MakeAToon(StateData.StateData): if self.toon: self.toon.stopBlink() self.toon.stopLookAroundNow() - self.gs.unload() self.bs.unload() self.cos.unload() self.cls.unload() self.ns.unload() - del self.gs del self.bs del self.cos del self.cls @@ -377,9 +371,7 @@ class MakeAToon(StateData.StateData): def goToNextShop(self): self.progressing = 1 - if self.shop == GENDERSHOP: - self.fsm.request('BodyShop') - elif self.shop == BODYSHOP: + if self.shop == BODYSHOP: self.fsm.request('ColorShop') elif self.shop == COLORSHOP: self.fsm.request('ClothesShop') @@ -388,9 +380,7 @@ class MakeAToon(StateData.StateData): def goToLastShop(self): self.progressing = 0 - if self.shop == BODYSHOP: - self.fsm.request('GenderShop') - elif self.shop == COLORSHOP: + if self.shop == COLORSHOP: self.fsm.request('BodyShop') elif self.shop == CLOTHESSHOP: self.fsm.request('ColorShop') @@ -408,38 +398,9 @@ class MakeAToon(StateData.StateData): def exitInit(self): pass - def enterGenderShop(self): - base.cr.centralLogger.writeClientEvent('MAT - enteringGenderShop') - self.shop = GENDERSHOP - if GENDERSHOP not in self.shopsVisited: - self.shopsVisited.append(GENDERSHOP) - self.genderWalls.reparentTo(self.squishJoint) - self.genderProps.reparentTo(self.propJoint) - self.roomSquishActor.pose('squish', 0) - self.guiNextButton['state'] = DGG.DISABLED - else: - self.dropRoom(self.genderWalls, self.genderProps) - self.guiTopBar['text'] = TTLocalizer.CreateYourToonTitle - self.guiTopBar['text_fg'] = (1, 0.92, 0.2, 1) - self.guiTopBar['text_scale'] = TTLocalizer.MATenterGenderShop - base.transitions.fadeIn() - self.accept('GenderShop-done', self.__handleGenderShopDone) - self.gs.enter() - self.guiNextButton.show() - self.gs.showButtons() - self.rotateLeftButton.hide() - self.rotateRightButton.hide() + - def exitGenderShop(self): - self.squishRoom(self.genderWalls) - self.squishProp(self.genderProps) - self.gs.exit() - self.ignore('GenderShop-done') - def __handleGenderShopDone(self): - self.guiNextButton.hide() - self.gs.hideButtons() - self.goToNextShop() def bodyShopOpening(self): self.bs.showButtons() diff --git a/toontown/toon/Toon.py b/toontown/toon/Toon.py index 75b616b..1615cf9 100644 --- a/toontown/toon/Toon.py +++ b/toontown/toon/Toon.py @@ -925,11 +925,11 @@ class Toon(Avatar.Avatar, ToonHead): def generateToonClothes(self, fromNet = 0): swappedTorso = 0 if self.hasLOD(): - if self.style.getGender() == 'f' and fromNet == 0: + if fromNet == 0: try: - bottomPair = ToonDNA.GirlBottoms[self.style.botTex] + bottomPair = ToonDNA.Bottoms[self.style.botTex] except: - bottomPair = ToonDNA.GirlBottoms[0] + bottomPair = ToonDNA.Bottoms[0] if len(self.style.torso) < 2: self.sendLogSuspiciousEvent('nakedToonDNA %s was requested' % self.style.torso) @@ -972,25 +972,19 @@ class Toon(Avatar.Avatar, ToonHead): except: sleeveColor = ToonDNA.ClothesColors[0] - if self.style.getGender() == 'm': - try: - texName = ToonDNA.BoyShorts[self.style.botTex] - except: - texName = ToonDNA.BoyShorts[0] + - else: - try: - texName = ToonDNA.GirlBottoms[self.style.botTex][0] - except: - texName = ToonDNA.GirlBottoms[0][0] + + try: + texName = ToonDNA.Bottoms[self.style.botTex][0] + except: + texName = ToonDNA.Bottoms[0][0] bottomTex = loader.loadTexture(texName, okMissing=True) if bottomTex is None: self.sendLogSuspiciousEvent('failed to load texture %s' % texName) - if self.style.getGender() == 'm': - bottomTex = loader.loadTexture(ToonDNA.BoyShorts[0]) - else: - bottomTex = loader.loadTexture(ToonDNA.GirlBottoms[0][0]) + + bottomTex = loader.loadTexture(ToonDNA.Bottoms[0][0]) bottomTex.setMinfilter(Texture.FTLinearMipmapLinear) bottomTex.setMagfilter(Texture.FTLinear) try: diff --git a/toontown/toon/ToonDNA.py b/toontown/toon/ToonDNA.py index ab2f52e..0da51ea 100644 --- a/toontown/toon/ToonDNA.py +++ b/toontown/toon/ToonDNA.py @@ -357,6 +357,9 @@ GirlShirts = [(0, 0), (21, 0), (22, 0)] + += + def isValidBoyShirt(index): for pair in BoyShirts: if index == pair[0]: @@ -373,6 +376,7 @@ def isValidGirlShirt(index): return 0 + Sleeves = ['phase_3/maps/desat_sleeve_1.png', 'phase_3/maps/desat_sleeve_2.png', 'phase_3/maps/desat_sleeve_3.png', @@ -511,6 +515,9 @@ Sleeves = ['phase_3/maps/desat_sleeve_1.png', 'phase_4/maps/tt_t_chr_avt_shirtSleeve_saveBuilding4.png', 'phase_4/maps/tt_t_chr_avt_shirtSleeve_saveBuilding05.png', 'phase_4/maps/tt_t_chr_avt_shirtSleeve_anniversary.png'] +# we will keep original boyshorts and girlbottoms for npcs +# TODO remove these once we find a better way to handle these for NPCS + BoyShorts = ['phase_3/maps/desat_shorts_1.png', 'phase_3/maps/desat_shorts_2.png', 'phase_3/maps/desat_shorts_4.png', @@ -634,6 +641,24 @@ GirlBottoms = [('phase_3/maps/desat_skirt_1.png', SKIRT), ('phase_4/maps/tt_t_chr_avt_skirt_golf04.png', SKIRT), ('phase_4/maps/tt_t_chr_avt_skirt_racing04.png', SKIRT), ('phase_4/maps/tt_t_chr_avt_skirt_racing05.png', SKIRT)] + + +Bottoms = GirlBottoms +# cycle through boyshorts if any any of them are not in girlbottoms add them to bottoms +for pair in BoyShorts: + if pair[0] not in Bottoms: + Bottoms.append((pair, SHORTS)) + +# a function to convert old male bottoms id to new bottoms id +def convertBoyShorts(oldId): + # go through boyshorts and bottoms + for pair in BoyShorts: + # if the old id is in boyshorts return the new id + if oldId == pair[0]: + return Bottoms.index(pair) + + return oldId + ClothesColors = [VBase4(0.933594, 0.265625, 0.28125, 1.0), VBase4(0.863281, 0.40625, 0.417969, 1.0), VBase4(0.710938, 0.234375, 0.4375, 1.0), @@ -665,1000 +690,562 @@ ClothesColors = [VBase4(0.933594, 0.265625, 0.28125, 1.0), VBase4(0.0, 0.2, 0.956862, 1.0), VBase4(0.972549, 0.094117, 0.094117, 1.0), VBase4(0.447058, 0.0, 0.90196, 1.0)] -ShirtStyles = {'bss1': [0, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (27, 27)]], - 'bss2': [1, 1, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss3': [2, 2, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss4': [3, 3, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss5': [4, 4, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss6': [5, 5, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss7': [8, 8, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (27, 27)]], - 'bss8': [9, 9, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss9': [10, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (27, 27)]], - 'bss10': [11, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (27, 27)]], - 'bss11': [14, 10, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss12': [16, 0, [(27, 27), - (27, 4), - (27, 5), - (27, 6), - (27, 7), - (27, 8), - (27, 9)]], - 'bss13': [17, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12)]], - 'bss14': [18, 12, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (27, 27)]], - 'bss15': [19, 13, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (27, 27)]], - 'gss1': [0, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26), - (27, 27)]], - 'gss2': [1, 1, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss3': [2, 2, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss4': [3, 3, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss5': [5, 5, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss6': [6, 6, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss7': [7, 7, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss8': [9, 9, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss9': [12, 0, [(27, 27)]], - 'gss10': [13, 11, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss11': [15, 11, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss12': [16, 0, [(27, 27), - (27, 4), - (27, 5), - (27, 6), - (27, 7), - (27, 8), - (27, 9)]], - 'gss13': [20, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss14': [21, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'gss15': [22, 0, [(0, 0), - (1, 1), - (2, 2), - (3, 3), - (4, 4), - (5, 5), - (6, 6), - (7, 7), - (8, 8), - (9, 9), - (10, 10), - (11, 11), - (12, 12), - (21, 21), - (22, 22), - (23, 23), - (24, 24), - (25, 25), - (26, 26)]], - 'c_ss1': [25, 16, [(27, 27)]], - 'c_ss2': [27, 18, [(27, 27)]], - 'c_ss3': [38, 27, [(27, 27)]], - 'c_bss1': [26, 17, [(27, 27)]], - 'c_bss2': [28, 19, [(27, 27)]], - 'c_bss3': [37, 26, [(27, 27)]], - 'c_bss4': [39, 28, [(27, 27)]], - 'c_gss1': [23, 14, [(27, 27)]], - 'c_gss2': [24, 15, [(27, 27)]], - 'c_gss3': [35, 24, [(27, 27)]], - 'c_gss4': [36, 25, [(27, 27)]], - 'c_gss5': [40, 29, [(27, 27)]], - 'c_ss4': [45, 34, [(27, 27)]], - 'c_ss5': [46, 35, [(27, 27)]], - 'c_ss6': [52, 41, [(27, 27)]], - 'c_ss7': [53, 42, [(27, 27)]], - 'c_ss8': [54, 43, [(27, 27)]], - 'c_ss9': [55, 44, [(27, 27)]], - 'c_ss10': [56, 45, [(27, 27)]], - 'c_ss11': [57, 46, [(27, 27)]], - 'hw_ss1': [29, 20, [(27, 27)]], - 'hw_ss2': [30, 21, [(27, 27)]], - 'hw_ss3': [114, 101, [(27, 27)]], - 'hw_ss4': [115, 102, [(27, 27)]], - 'hw_ss5': [122, 109, [(27, 27)]], - 'hw_ss6': [123, 110, [(27, 27)]], - 'hw_ss7': [124, 111, [(27, 27)]], - 'hw_ss8': [125, 112, [(27, 27)]], - 'hw_ss9': [126, 113, [(27, 27)]], - 'wh_ss1': [31, 22, [(27, 27)]], - 'wh_ss2': [32, 22, [(27, 27)]], - 'wh_ss3': [33, 23, [(27, 27)]], - 'wh_ss4': [34, 23, [(27, 27)]], - 'vd_ss1': [41, 30, [(27, 27)]], - 'vd_ss2': [42, 31, [(27, 27)]], - 'vd_ss3': [43, 32, [(27, 27)]], - 'vd_ss4': [44, 33, [(27, 27)]], - 'vd_ss5': [69, 58, [(27, 27)]], - 'vd_ss6': [70, 59, [(27, 27)]], - 'vd_ss7': [96, 85, [(27, 27)]], - 'sd_ss1': [47, 36, [(27, 27)]], - 'sd_ss2': [48, 37, [(27, 27)]], - 'sd_ss3': [116, 103, [(27, 27)]], - 'tc_ss1': [49, 38, [(27, 27)]], - 'tc_ss2': [50, 39, [(27, 27)]], - 'tc_ss3': [51, 40, [(27, 27)]], - 'tc_ss4': [62, 51, [(27, 27)]], - 'tc_ss5': [63, 52, [(27, 27)]], - 'tc_ss6': [64, 53, [(27, 27)]], - 'tc_ss7': [65, 54, [(27, 27)]], - 'j4_ss1': [58, 47, [(27, 27)]], - 'j4_ss2': [59, 48, [(27, 27)]], - 'c_ss12': [60, 49, [(27, 27)]], - 'c_ss13': [61, 50, [(27, 27)]], - 'pj_ss1': [66, 55, [(27, 27)]], - 'pj_ss2': [67, 56, [(27, 27)]], - 'pj_ss3': [68, 57, [(27, 27)]], - 'sa_ss1': [71, 60, [(27, 27)]], - 'sa_ss2': [72, 61, [(27, 27)]], - 'sa_ss3': [73, 62, [(27, 27)]], - 'sa_ss4': [74, 63, [(27, 27)]], - 'sa_ss5': [75, 64, [(27, 27)]], - 'sa_ss6': [76, 65, [(27, 27)]], - 'sa_ss7': [77, 66, [(27, 27)]], - 'sa_ss8': [78, 67, [(27, 27)]], - 'sa_ss9': [79, 68, [(27, 27)]], - 'sa_ss10': [80, 69, [(27, 27)]], - 'sa_ss11': [81, 70, [(27, 27)]], - 'sa_ss12': [82, 71, [(27, 27)]], - 'sa_ss13': [83, 72, [(27, 27)]], - 'sa_ss14': [84, 73, [(27, 27)]], - 'sa_ss15': [85, 74, [(27, 27)]], - 'sa_ss16': [86, 75, [(27, 27)]], - 'sa_ss17': [87, 76, [(27, 27)]], - 'sa_ss18': [88, 77, [(27, 27)]], - 'sa_ss19': [89, 78, [(27, 27)]], - 'sa_ss20': [90, 79, [(27, 27)]], - 'sa_ss21': [91, 80, [(27, 27)]], - 'sa_ss22': [92, 81, [(27, 27)]], - 'sa_ss23': [93, 82, [(27, 27)]], - 'sa_ss24': [94, 83, [(27, 27)]], - 'sa_ss25': [95, 84, [(27, 27)]], - 'sa_ss26': [106, 93, [(27, 27)]], - 'sa_ss27': [110, 97, [(27, 27)]], - 'sa_ss28': [111, 98, [(27, 27)]], - 'sa_ss29': [120, 107, [(27, 27)]], - 'sa_ss30': [121, 108, [(27, 27)]], - 'sa_ss31': [118, 105, [(27, 27)]], - 'sa_ss32': [127, 114, [(27, 27)]], - 'sa_ss33': [128, 115, [(27, 27)]], - 'sa_ss34': [129, 116, [(27, 27)]], - 'sa_ss35': [130, 117, [(27, 27)]], - 'sa_ss36': [131, 118, [(27, 27)]], - 'sa_ss37': [132, 119, [(27, 27)]], - 'sa_ss38': [133, 120, [(27, 27)]], - 'sa_ss39': [134, 121, [(27, 27)]], - 'sa_ss40': [135, 122, [(27, 27)]], - 'sa_ss41': [136, 123, [(27, 27)]], - 'sa_ss42': [137, 124, [(27, 27)]], - 'sa_ss43': [138, 125, [(27, 27)]], - 'sa_ss44': [139, 126, [(27, 27)]], - 'sa_ss45': [140, 127, [(27, 27)]], - 'sa_ss46': [141, 128, [(27, 27)]], - 'sa_ss47': [142, 129, [(27, 27)]], - 'sa_ss48': [143, 130, [(27, 27)]], - 'sa_ss49': [144, 116, [(27, 27)]], - 'sa_ss50': [145, 131, [(27, 27)]], - 'sa_ss51': [146, 133, [(27, 27)]], - 'sa_ss52': [147, 134, [(27, 27)]], - 'sa_ss53': [148, 135, [(27, 27)]], - 'sa_ss54': [149, 136, [(27, 27)]], - 'sa_ss55': [150, 137, [(27, 27)]], - 'sc_1': [97, 86, [(27, 27)]], - 'sc_2': [98, 86, [(27, 27)]], - 'sc_3': [99, 86, [(27, 27)]], - 'sil_1': [100, 87, [(27, 27)]], - 'sil_2': [101, 88, [(27, 27)]], - 'sil_3': [102, 89, [(27, 27)]], - 'sil_4': [103, 90, [(27, 27)]], - 'sil_5': [104, 91, [(27, 27)]], - 'sil_6': [105, 92, [(27, 27)]], - 'sil_7': [107, 94, [(27, 27)]], - 'sil_8': [108, 95, [(27, 27)]], - 'emb_us1': [103, 90, [(27, 27)]], - 'emb_us2': [100, 87, [(27, 27)]], - 'emb_us3': [101, 88, [(27, 27)]], - 'sb_1': [109, 96, [(27, 27)]], - 'jb_1': [112, 99, [(27, 27)]], - 'jb_2': [113, 100, [(27, 27)]], - 'ugcms': [117, 104, [(27, 27)]], - 'lb_1': [119, 106, [(27, 27)]]} -BottomStyles = {'bbs1': [0, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20]], - 'bbs2': [1, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20]], - 'bbs3': [2, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20]], - 'bbs4': [3, [0, - 1, - 2, - 4, - 6, - 8, - 9, - 11, - 12, - 13, - 15, - 16, - 17, - 18, - 19, - 20, - 27]], - 'bbs5': [4, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20]], - 'bbs6': [5, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 27]], - 'bbs7': [6, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 20, - 27]], - 'bbs8': [7, [0, - 1, - 2, - 4, - 6, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 27]], - 'vd_bs1': [8, [27]], - 'vd_bs2': [23, [27]], - 'vd_bs3': [24, [27]], - 'c_bs1': [9, [27]], - 'c_bs2': [10, [27]], - 'c_bs5': [15, [27]], - 'sd_bs1': [11, [27]], - 'sd_bs2': [44, [27]], - 'pj_bs1': [16, [27]], - 'pj_bs2': [17, [27]], - 'pj_bs3': [18, [27]], - 'wh_bs1': [19, [27]], - 'wh_bs2': [20, [27]], - 'wh_bs3': [21, [27]], - 'wh_bs4': [22, [27]], - 'hw_bs1': [47, [27]], - 'hw_bs2': [48, [27]], - 'hw_bs5': [49, [27]], - 'hw_bs6': [50, [27]], - 'hw_bs7': [51, [27]], - 'gsk1': [0, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26, - 27]], - 'gsk2': [1, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26]], - 'gsk3': [2, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26]], - 'gsk4': [3, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26]], - 'gsk5': [4, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26]], - 'gsk6': [7, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26, - 27]], - 'gsk7': [8, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26, - 27]], - 'gsh1': [5, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26, - 27]], - 'gsh2': [6, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26, - 27]], - 'gsh3': [9, [0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 11, - 12, - 21, - 22, - 23, - 24, - 25, - 26, - 27]], - 'c_gsk1': [10, [27]], - 'c_gsk2': [11, [27]], - 'c_gsk3': [12, [27]], - 'vd_gs1': [13, [27]], - 'vd_gs2': [27, [27]], - 'vd_gs3': [28, [27]], - 'c_gsk4': [14, [27]], - 'sd_gs1': [15, [27]], - 'sd_gs2': [48, [27]], - 'c_gsk5': [16, [27]], - 'c_gsk6': [17, [27]], - 'c_bs3': [12, [27]], - 'c_bs4': [13, [27]], - 'j4_bs1': [14, [27]], - 'j4_gs1': [18, [27]], - 'c_gsk7': [19, [27]], - 'pj_gs1': [20, [27]], - 'pj_gs2': [21, [27]], - 'pj_gs3': [22, [27]], - 'wh_gsk1': [23, [27]], - 'wh_gsk2': [24, [27]], - 'wh_gsk3': [25, [27]], - 'wh_gsk4': [26, [27]], - 'sa_bs1': [25, [27]], - 'sa_bs2': [26, [27]], - 'sa_bs3': [27, [27]], - 'sa_bs4': [28, [27]], - 'sa_bs5': [29, [27]], - 'sa_bs6': [30, [27]], - 'sa_bs7': [31, [27]], - 'sa_bs8': [32, [27]], - 'sa_bs9': [33, [27]], - 'sa_bs10': [34, [27]], - 'sa_bs11': [35, [27]], - 'sa_bs12': [36, [27]], - 'sa_bs13': [41, [27]], - 'sa_bs14': [46, [27]], - 'sa_bs15': [45, [27]], - 'sa_bs16': [52, [27]], - 'sa_bs17': [53, [27]], - 'sa_bs18': [54, [27]], - 'sa_bs19': [55, [27]], - 'sa_bs20': [56, [27]], - 'sa_bs21': [57, [27]], - 'sa_gs1': [29, [27]], - 'sa_gs2': [30, [27]], - 'sa_gs3': [31, [27]], - 'sa_gs4': [32, [27]], - 'sa_gs5': [33, [27]], - 'sa_gs6': [34, [27]], - 'sa_gs7': [35, [27]], - 'sa_gs8': [36, [27]], - 'sa_gs9': [37, [27]], - 'sa_gs10': [38, [27]], - 'sa_gs11': [39, [27]], - 'sa_gs12': [40, [27]], - 'sa_gs13': [45, [27]], - 'sa_gs14': [50, [27]], - 'sa_gs15': [49, [27]], - 'sa_gs16': [57, [27]], - 'sa_gs17': [58, [27]], - 'sa_gs18': [59, [27]], - 'sa_gs19': [60, [27]], - 'sa_gs20': [61, [27]], - 'sa_gs21': [62, [27]], - 'sc_bs1': [37, [27]], - 'sc_bs2': [38, [27]], - 'sc_bs3': [39, [27]], - 'sc_gs1': [41, [27]], - 'sc_gs2': [42, [27]], - 'sc_gs3': [43, [27]], - 'sil_bs1': [40, [27]], - 'sil_gs1': [44, [27]], - 'hw_bs3': [42, [27]], - 'hw_gs3': [46, [27]], - 'hw_bs4': [43, [27]], - 'hw_gs4': [47, [27]], - 'hw_gs1': [51, [27]], - 'hw_gs2': [52, [27]], - 'hw_gs5': [54, [27]], - 'hw_gs6': [55, [27]], - 'hw_gs7': [56, [27]], - 'hw_gsk1': [53, [27]]} + +ShirtStyles = { + # name : [ shirtIdx, sleeveIdx, [(ShirtColorIdx, sleeveColorIdx), ... ]] + # ------------------------------------------------------------------------- + # Boy styles + # ------------------------------------------------------------------------- + # solid + 'bss1': [0, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (27, 27)]], + # single stripe + 'bss2': [1, 1, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # collar + 'bss3': [2, 2, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # double stripe + 'bss4': [3, 3, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # multiple stripes + 'bss5': [4, 4, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (9, 9), (10, 10), (11, 11), (12, 12)]], + # collar w/ pocket + 'bss6': [5, 5, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # hawaiian + 'bss7': [8, 8, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (8, 8), (9, 9), (11, 11), (12, 12), (27, 27)]], + # collar w/ 2 pockets + 'bss8': [9, 9, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # bowling shirt + 'bss9': [10, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (27, 27)]], + # vest (special) + 'bss10': [11, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (27, 27)]], + # collar w/ ruffles + 'bss11': [14, 10, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # soccer jersey (special) + 'bss12': [16, 0, [(27, 27), (27, 4), (27, 5), (27, 6), (27, 7), + (27, 8), (27, 9)]], + # lightning bolt (special) + 'bss13': [17, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)]], + # jersey 19 (special) + 'bss14': [18, 12, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (8, 8), (9, 9), (11, 11), (12, 12), (27, 27)]], + # guayavera + 'bss15': [19, 13, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (27, 27)]], + # ------------------------------------------------------------------------- + # Girl styles + # ------------------------------------------------------------------------- + # solid + 'gss1': [0, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26), + (27, 27)]], + # single stripe + 'gss2': [1, 1, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # collar + 'gss3': [2, 2, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # double stripes + 'gss4': [3, 3, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # collar w/ pocket + 'gss5': [5, 5, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # flower print + 'gss6': [6, 6, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # flower trim (special) + 'gss7': [7, 7, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # collar w/ 2 pockets + 'gss8': [9, 9, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (11, 11), (12, 12), (21, 21), + (22, 22), (23, 23), (24, 24), (25, 25), (26, 26)]], + # denim vest (special) + 'gss9': [12, 0, [(27, 27)]], + # peasant + 'gss10': [13, 11, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), + (26, 26)]], + # peasant w/ mid stripe + 'gss11': [15, 11, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), + (26, 26)]], + # soccer jersey (special) + 'gss12': [16, 0, [(27, 27), (27, 4), (27, 5), (27, 6), (27, 7), + (27, 8), (27, 9)]], + # hearts + 'gss13': [20, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), + (26, 26)]], + # stars (special) + 'gss14': [21, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), + (26, 26)]], + # flower + 'gss15': [22, 0, [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), + (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), + (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), + (26, 26)]], + + # Special Catalog-only shirts. + + # yellow hooded - Series 1 + 'c_ss1': [25, 16, [(27, 27), ]], + + # yellow with palm tree - Series 1 + 'c_ss2': [27, 18, [(27, 27), ]], + + # purple with stars - Series 2 + 'c_ss3': [38, 27, [(27, 27), ]], + + # blue stripes (boys only) - Series 1 + 'c_bss1': [26, 17, [(27, 27), ]], + + # orange (boys only) - Series 1 + 'c_bss2': [28, 19, [(27, 27), ]], + + # lime green with stripe (boys only) - Series 2 + 'c_bss3': [37, 26, [(27, 27), ]], + + # red kimono with checkerboard (boys only) - Series 2 + 'c_bss4': [39, 28, [(27, 27), ]], + + # blue with yellow stripes (girls only) - Series 1 + 'c_gss1': [23, 14, [(27, 27), ]], + + # pink and beige with flower (girls only) - Series 1 + 'c_gss2': [24, 15, [(27, 27), ]], + + # Blue and gold with wavy stripes (girls only) - Series 2 + 'c_gss3': [35, 24, [(27, 27), ]], + + # Blue and pink with bow (girls only) - Series 2 + 'c_gss4': [36, 25, [(27, 27), ]], + + # Aqua kimono white stripe (girls only) - UNUSED + 'c_gss5': [40, 29, [(27, 27), ]], + + # Tie dye shirt (boys and girls) - Series 3 + 'c_ss4': [45, 34, [(27, 27), ]], + + # light blue with blue and white stripe (boys only) - Series 3 + 'c_ss5': [46, 35, [(27, 27), ]], + + # cowboy shirt 1-6 : Series 4 + 'c_ss6': [52, 41, [(27, 27), ]], + 'c_ss7': [53, 42, [(27, 27), ]], + 'c_ss8': [54, 43, [(27, 27), ]], + 'c_ss9': [55, 44, [(27, 27), ]], + 'c_ss10': [56, 45, [(27, 27), ]], + 'c_ss11': [57, 46, [(27, 27), ]], + + # Special Holiday-themed shirts. + + # Halloween ghost + 'hw_ss1': [29, 20, [(27, 27), ]], + # Halloween pumpkin + 'hw_ss2': [30, 21, [(27, 27), ]], + + 'hw_ss3': [114, 101, [(27, 27)]], + 'hw_ss4': [115, 102, [(27, 27)]], + 'hw_ss5': [122, 109, [(27, 27)]], + 'hw_ss6': [123, 110, [(27, 27)]], + 'hw_ss7': [124, 111, [(27, 27)]], + 'hw_ss8': [125, 112, [(27, 27)]], + 'hw_ss9': [126, 113, [(27, 27)]], + # Winter Holiday + 'wh_ss1': [31, 22, [(27, 27), ]], + # Winter Holiday + 'wh_ss2': [32, 22, [(27, 27), ]], + # Winter Holiday + 'wh_ss3': [33, 23, [(27, 27), ]], + # Winter Holiday + 'wh_ss4': [34, 23, [(27, 27), ]], + + # Valentines day, pink with red hearts (girls) + 'vd_ss1': [41, 30, [(27, 27), ]], + # Valentines day, red with white hearts + 'vd_ss2': [42, 31, [(27, 27), ]], + # Valentines day, white with winged hearts (boys) + 'vd_ss3': [43, 32, [(27, 27), ]], + # Valentines day, pink with red flamed heart + 'vd_ss4': [44, 33, [(27, 27), ]], + # 2009 Valentines day, white with red cupid + 'vd_ss5': [69, 58, [(27, 27), ]], + # 2009 Valentines day, blue with green and red hearts + 'vd_ss6': [70, 59, [(27, 27), ]], + # 2010 Valentines day, red with white wings + 'vd_ss7': [96, 85, [(27, 27), ]], + # St Pat's Day, four leaf clover shirt + 'sd_ss1': [47, 36, [(27, 27), ]], + # St Pat's Day, pot o gold shirt + 'sd_ss2': [48, 37, [(27, 27), ]], + 'sd_ss3': [116, 103, [(27, 27)]], + + # T-Shirt Contest, Fishing Vest + 'tc_ss1': [49, 38, [(27, 27), ]], + # T-Shirt Contest, Fish Bowl + 'tc_ss2': [50, 39, [(27, 27), ]], + # T-Shirt Contest, Paw Print + 'tc_ss3': [51, 40, [(27, 27), ]], + # T-Shirt Contest, Backpack + 'tc_ss4': [62, 51, [(27, 27), ]], + # T-Shirt Contest, Lederhosen + 'tc_ss5': [63, 52, [(27, 27), ]], + # T-Shirt Contest, Watermelon + 'tc_ss6': [64, 53, [(27, 27), ]], + # T-Shirt Contest, Race Shirt + 'tc_ss7': [65, 54, [(27, 27), ]], + + # July 4th, Flag + 'j4_ss1': [58, 47, [(27, 27), ]], + # July 4th, Fireworks + 'j4_ss2': [59, 48, [(27, 27), ]], + + # Catalog series 7, Green w/ yellow buttons + 'c_ss12': [60, 49, [(27, 27), ]], + + # Catalog series 7, Purple w/ big flower + 'c_ss13': [61, 50, [(27, 27), ]], + + # Pajama series + 'pj_ss1': [66, 55, [(27, 27), ]], # Blue Banana Pajama shirt + 'pj_ss2': [67, 56, [(27, 27), ]], # Red Horn Pajama shirt + 'pj_ss3': [68, 57, [(27, 27), ]], # Purple Glasses Pajama shirt + + # Special Award Clothes + 'sa_ss1': [71, 60, [(27, 27), ]], + 'sa_ss2': [72, 61, [(27, 27), ]], + 'sa_ss3': [73, 62, [(27, 27), ]], + 'sa_ss4': [74, 63, [(27, 27), ]], + 'sa_ss5': [75, 64, [(27, 27), ]], + 'sa_ss6': [76, 65, [(27, 27), ]], + 'sa_ss7': [77, 66, [(27, 27), ]], + 'sa_ss8': [78, 67, [(27, 27), ]], + 'sa_ss9': [79, 68, [(27, 27), ]], + 'sa_ss10': [80, 69, [(27, 27), ]], + 'sa_ss11': [81, 70, [(27, 27), ]], + 'sa_ss12': [82, 71, [(27, 27), ]], + 'sa_ss13': [83, 72, [(27, 27), ]], + 'sa_ss14': [84, 73, [(27, 27), ]], + 'sa_ss15': [85, 74, [(27, 27), ]], + 'sa_ss16': [86, 75, [(27, 27), ]], + 'sa_ss17': [87, 76, [(27, 27), ]], + 'sa_ss18': [88, 77, [(27, 27), ]], + 'sa_ss19': [89, 78, [(27, 27), ]], + 'sa_ss20': [90, 79, [(27, 27), ]], + 'sa_ss21': [91, 80, [(27, 27), ]], + 'sa_ss22': [92, 81, [(27, 27), ]], + 'sa_ss23': [93, 82, [(27, 27), ]], + 'sa_ss24': [94, 83, [(27, 27), ]], + 'sa_ss25': [95, 84, [(27, 27), ]], + 'sa_ss26': [106, 93, [(27, 27), ]], # Most Cogs Defeated Shirt + 'sa_ss27': [110, 97, [(27, 27)]], + 'sa_ss28': [111, 98, [(27, 27)]], + 'sa_ss29': [120, 107, [(27, 27)]], + 'sa_ss30': [121, 108, [(27, 27)]], + 'sa_ss31': [118, 105, [(27, 27)]], + 'sa_ss32': [127, 114, [(27, 27)]], + 'sa_ss33': [128, 115, [(27, 27)]], + 'sa_ss34': [129, 116, [(27, 27)]], + 'sa_ss35': [130, 117, [(27, 27)]], + 'sa_ss36': [131, 118, [(27, 27)]], + 'sa_ss37': [132, 119, [(27, 27)]], + 'sa_ss38': [133, 120, [(27, 27)]], + 'sa_ss39': [134, 121, [(27, 27)]], + 'sa_ss40': [135, 122, [(27, 27)]], + 'sa_ss41': [136, 123, [(27, 27)]], + 'sa_ss42': [137, 124, [(27, 27)]], + 'sa_ss43': [138, 125, [(27, 27)]], + 'sa_ss44': [139, 126, [(27, 27)]], + 'sa_ss45': [140, 127, [(27, 27)]], + 'sa_ss46': [141, 128, [(27, 27)]], + 'sa_ss47': [142, 129, [(27, 27)]], + 'sa_ss48': [143, 130, [(27, 27)]], + 'sa_ss49': [144, 116, [(27, 27)]], + 'sa_ss50': [145, 131, [(27, 27)]], + 'sa_ss51': [146, 133, [(27, 27)]], + 'sa_ss52': [147, 134, [(27, 27)]], + 'sa_ss53': [148, 135, [(27, 27)]], + 'sa_ss54': [149, 136, [(27, 27)]], + 'sa_ss55': [150, 137, [(27, 27)]], + # Scientists + 'sc_1': [97, 86, [(27, 27), ]], + 'sc_2': [98, 86, [(27, 27), ]], + 'sc_3': [99, 86, [(27, 27), ]], + + # Silly Story Shirts + 'sil_1': [100, 87, [(27, 27), ]], # Silly Mailbox Shirt + 'sil_2': [101, 88, [(27, 27), ]], # Silly Trashcan Shirt + 'sil_3': [102, 89, [(27, 27), ]], # Loony Labs Shirt + 'sil_4': [103, 90, [(27, 27), ]], # Silly Hydrant Shirt + 'sil_5': [104, 91, [(27, 27), ]], # Sillymeter Whistle Shirt + 'sil_6': [105, 92, [(27, 27), ]], # Silly Cogbuster Shirt + 'sil_7': [107, 94, [(27, 27), ]], # Victory Party Shirt 1 + 'sil_8': [108, 95, [(27, 27), ]], # Victory Party Shirt 2 + # name : [ shirtIdx, sleeveIdx, [(ShirtColorIdx, sleeveColorIdx), ... ]] + + 'emb_us1': [103, 90, [(27, 27)]], + 'emb_us2': [100, 87, [(27, 27)]], + 'emb_us3': [101, 88, [(27, 27)]], + 'sb_1': [109, 96, [(27, 27)]], + 'jb_1': [112, 99, [(27, 27)]], + 'jb_2': [113, 100, [(27, 27)]], + 'ugcms': [117, 104, [(27, 27)]], + 'lb_1': [119, 106, [(27, 27)]] +} +BottomStyles = { + # name : [ bottomIdx, [bottomColorIdx, ...]] + # ------------------------------------------------------------------------- + # Boy styles (shorts) + # ------------------------------------------------------------------------- + # plain w/ pockets + 'bbs1': [5, [0, 1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20]], + # belt + 'bbs2': [79, [0, 1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20]], + # cargo + 'bbs3': [80, [0, 1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20]], + # hawaiian + 'bbs4': [81, [0, 1, 2, 4, 6, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, + 27]], + # side stripes (special) + 'bbs5': [82, [0, 1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20]], + # soccer shorts + 'bbs6': [83, [0, 1, 2, 4, 6, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, + 27]], + # side flames (special) + 'bbs7': [84, [0, 1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 20, 27]], + # denim + 'bbs8': [9, [0, 1, 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 27]], + # Valentines shorts + 'vd_bs1': [85, [27, ]], + # Green with red heart + 'vd_bs2': [86, [27, ]], + # Blue denim with green and red heart + 'vd_bs3': [87, [27, ]], + + # Catalog only shorts + # Orange with blue side stripes + 'c_bs1': [88, [27, ]], + + # Blue with gold cuff stripes + 'c_bs2': [89, [27, ]], + + # Green stripes - series 7 + 'c_bs5': [90, [27, ]], + + # St. Pats leprechaun shorts + 'sd_bs1': [15, [27, ]], + 'sd_bs2': [49, [27]], + + # Pajama shorts + 'pj_bs1': [20, [27, ]], # Blue Banana Pajama pants + 'pj_bs2': [21, [27, ]], # Red Horn Pajama pants + 'pj_bs3': [22, [27, ]], # Purple Glasses Pajama pants + + # Winter Holiday Shorts + 'wh_bs1': [91, [27, ]], # Winter Holiday Shorts Style 1 + 'wh_bs2': [92, [27, ]], # Winter Holiday Shorts Style 2 + 'wh_bs3': [93, [27, ]], # Winter Holiday Shorts Style 3 + 'wh_bs4': [94, [27, ]], # Winter Holiday Shorts Style 4 + + # Halloween Holiday Shorts + 'hw_bs1': [54, [27]], + 'hw_bs2': [55, [27]], + 'hw_bs5': [56, [27]], + 'hw_bs6': [57, [27]], + 'hw_bs7': [58, [27]], + + # ------------------------------------------------------------------------- + # Girl styles (shorts and skirts) + # ------------------------------------------------------------------------- + # skirts + # ------------------------------------------------------------------------- + # solid + 'gsk1': [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26, 27]], + # polka dots (special) + 'gsk2': [1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26]], + # vertical stripes + 'gsk3': [2, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26]], + # horizontal stripe + 'gsk4': [3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26]], + # flower print + 'gsk5': [4, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26]], + # 2 pockets (special) + 'gsk6': [7, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26, 27]], + # denim + 'gsk7': [8, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26, 27]], + + # shorts + # ------------------------------------------------------------------------- + # plain w/ pockets + 'gsh1': [5, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26, 27]], + # flower + 'gsh2': [6, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26, 27]], + # denim + 'gsh3': [9, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 21, 22, 23, 24, 25, + 26, 27]], + + # Special catalog-only skirts and shorts. + + # blue skirt with tan border and button + 'c_gsk1': [10, [27, ]], + + # purple skirt with pink and ribbon + 'c_gsk2': [11, [27, ]], + + # teal skirt with yellow and star + 'c_gsk3': [12, [27, ]], + + # Valentines skirt (note, do not name with gsk, otherwise NPC might randomly get this skirt) + # red skirt with hearts + 'vd_gs1': [13, [27, ]], + # Pink flair skirt with polka hearts + 'vd_gs2': [27, [27, ]], + # Blue denim skirt with green and red heart + 'vd_gs3': [28, [27, ]], + + # rainbow skirt - Series 3 + 'c_gsk4': [14, [27, ]], + + # St. Pats day shorts + 'sd_gs1': [15, [27, ]], + 'sd_gs2': [48, [27]], + + # Western skirts + 'c_gsk5': [16, [27, ]], + 'c_gsk6': [17, [27, ]], + + # Western shorts + 'c_bs3': [12, [27, ]], + 'c_bs4': [13, [27, ]], + + # July 4th shorts + 'j4_bs1': [14, [27, ]], + + # July 4th Skirt + 'j4_gs1': [18, [27, ]], + + # Blue with flower - series 7 + 'c_gsk7': [19, [27, ]], + + # pajama shorts + 'pj_gs1': [20, [27, ]], # Blue Banana Pajama pants + 'pj_gs2': [21, [27, ]], # Red Horn Pajama pants + 'pj_gs3': [22, [27, ]], # Purple Glasses Pajama pants + + # Winter Holiday Skirts + 'wh_gsk1': [23, [27, ]], # Winter Holiday Skirt Style 1 + 'wh_gsk2': [24, [27, ]], # Winter Holiday Skirt Style 2 + 'wh_gsk3': [25, [27, ]], # Winter Holiday Skirt Style 3 + 'wh_gsk4': [26, [27, ]], # Winter Holiday Skirt Style 4 + + # Special award clothes + 'sa_bs1': [25, [27, ]], + 'sa_bs2': [26, [27, ]], + 'sa_bs3': [27, [27, ]], + 'sa_bs4': [28, [27, ]], + 'sa_bs5': [29, [27, ]], + 'sa_bs6': [30, [27, ]], + 'sa_bs7': [31, [27, ]], + 'sa_bs8': [32, [27, ]], + 'sa_bs9': [33, [27, ]], + 'sa_bs10': [34, [27, ]], + 'sa_bs11': [35, [27, ]], + 'sa_bs12': [36, [27, ]], + 'sa_bs13': [41, [27]], + 'sa_bs14': [46, [27]], + 'sa_bs15': [45, [27]], + 'sa_bs16': [52, [27]], + 'sa_bs17': [53, [27]], + 'sa_bs18': [54, [27]], + 'sa_bs19': [55, [27]], + 'sa_bs20': [56, [27]], + 'sa_bs21': [57, [27]], + # Special award clothes + 'sa_gs1': [29, [27, ]], + 'sa_gs2': [30, [27, ]], + 'sa_gs3': [31, [27, ]], + 'sa_gs4': [32, [27, ]], + 'sa_gs5': [33, [27, ]], + 'sa_gs6': [34, [27, ]], + 'sa_gs7': [35, [27, ]], + 'sa_gs8': [36, [27, ]], + 'sa_gs9': [37, [27, ]], + 'sa_gs10': [38, [27, ]], + 'sa_gs11': [39, [27, ]], + 'sa_gs12': [40, [27, ]], + 'sa_gs13': [45, [27]], + 'sa_gs14': [50, [27]], + 'sa_gs15': [49, [27]], + 'sa_gs16': [57, [27]], + 'sa_gs17': [58, [27]], + 'sa_gs18': [59, [27]], + 'sa_gs19': [60, [27]], + 'sa_gs20': [61, [27]], + 'sa_gs21': [62, [27]], + # Scientists + 'sc_bs1': [37, [27, ]], + 'sc_bs2': [38, [27, ]], + 'sc_bs3': [39, [27, ]], + + 'sc_gs1': [41, [27, ]], + 'sc_gs2': [42, [27, ]], + 'sc_gs3': [43, [27, ]], + + 'sil_bs1': [40, [27, ]], # Silly Cogbuster Shorts + 'sil_gs1': [44, [27, ]], # Silly Cogbuster Shorts + 'hw_bs3': [42, [27]], + 'hw_gs3': [46, [27]], + 'hw_bs4': [43, [27]], + 'hw_gs4': [47, [27]], + 'hw_gs1': [51, [27]], + 'hw_gs2': [52, [27]], + 'hw_gs5': [54, [27]], + 'hw_gs6': [55, [27]], + 'hw_gs7': [56, [27]], + 'hw_gsk1': [53, [27]] +} MAKE_A_TOON = 1 TAMMY_TAILOR = 2004 LONGJOHN_LEROY = 1007 @@ -1666,81 +1253,49 @@ TAILOR_HARMONY = 4008 BONNIE_BLOSSOM = 5007 WARREN_BUNDLES = 3008 WORNOUT_WAYLON = 9010 -TailorCollections = {MAKE_A_TOON: [['bss1', 'bss2'], - ['gss1', 'gss2'], - ['bbs1', 'bbs2'], - ['gsk1', 'gsh1']], - TAMMY_TAILOR: [['bss1', 'bss2'], - ['gss1', 'gss2'], - ['bbs1', 'bbs2'], - ['gsk1', 'gsh1']], - LONGJOHN_LEROY: [['bss3', 'bss4', 'bss14'], - ['gss3', 'gss4', 'gss14'], - ['bbs3', 'bbs4'], - ['gsk2', 'gsh2']], - TAILOR_HARMONY: [['bss5', 'bss6', 'bss10'], - ['gss5', 'gss6', 'gss9'], - ['bbs5'], - ['gsk3', 'gsh3']], - BONNIE_BLOSSOM: [['bss7', 'bss8', 'bss12'], - ['gss8', 'gss10', 'gss12'], - ['bbs6'], - ['gsk4', 'gsk5']], - WARREN_BUNDLES: [['bss9', 'bss13'], - ['gss7', 'gss11'], - ['bbs7'], - ['gsk6']], - WORNOUT_WAYLON: [['bss11', 'bss15'], - ['gss13', 'gss15'], - ['bbs8'], - ['gsk7']]} -BOY_SHIRTS = 0 -GIRL_SHIRTS = 1 -BOY_SHORTS = 2 -GIRL_BOTTOMS = 3 +TailorCollections = { + # TailorId: [ [ Shirts ], [ Bottoms ] ] + MAKE_A_TOON : [ ['bss1', 'bss2', 'gss1', 'gss2'], + ['bbs1', 'bbs2', 'gsk1', 'gsh1'] ], + TAMMY_TAILOR : [ ['bss1', 'bss2', 'gss1', 'gss2'], + ['bbs1', 'bbs2', 'gsk1', 'gsh1'] ], + LONGJOHN_LEROY : [ ['bss3', 'bss4', 'bss14', 'gss3', 'gss4', 'gss14'], + ['bbs3', 'bbs4', 'gsk2', 'gsh2'] ], + TAILOR_HARMONY : [ ['bss5', 'bss6', 'bss10', 'gss5', 'gss6', 'gss9'], + ['bbs5', 'gsk3', 'gsh3'] ], + BONNIE_BLOSSOM : [ ['bss7', 'bss8', 'bss12', 'gss8', 'gss10', 'gss12'], + ['bbs6', 'gsk4', 'gsk5'] ], + WARREN_BUNDLES : [ ['bss9','bss13', 'gss7', 'gss11'], + ['bbs7', 'gsk6'] ], + WORNOUT_WAYLON : [ ['bss11', 'bss15', 'gss13', 'gss15'], + ['bbs8', 'gsk7'] ], + + +} +SHIRTS = 0 +BOTTOMS = 1 HAT = 1 GLASSES = 2 BACKPACK = 4 SHOES = 8 -MakeAToonBoyBottoms = [] -MakeAToonBoyShirts = [] -MakeAToonGirlBottoms = [] -MakeAToonGirlShirts = [] -MakeAToonGirlSkirts = [] -MakeAToonGirlShorts = [] -for style in TailorCollections[MAKE_A_TOON][BOY_SHORTS]: - index = BottomStyles[style][0] - MakeAToonBoyBottoms.append(index) -for style in TailorCollections[MAKE_A_TOON][BOY_SHIRTS]: + +MakeAToonShirts = [] +MakeAToonBottoms = [] +for style in TailorCollections[MAKE_A_TOON][SHIRTS]: index = ShirtStyles[style][0] - MakeAToonBoyShirts.append(index) - -for style in TailorCollections[MAKE_A_TOON][GIRL_BOTTOMS]: + MakeAToonShirts.append(index) +for style in TailorCollections[MAKE_A_TOON][BOTTOMS]: index = BottomStyles[style][0] - MakeAToonGirlBottoms.append(index) + MakeAToonBottoms.append(index) -for style in TailorCollections[MAKE_A_TOON][GIRL_SHIRTS]: - index = ShirtStyles[style][0] - MakeAToonGirlShirts.append(index) -for index in MakeAToonGirlBottoms: - flag = GirlBottoms[index][1] - if flag == SKIRT: - MakeAToonGirlSkirts.append(index) - elif flag == SHORTS: - MakeAToonGirlShorts.append(index) - else: - notify.error('Invalid flag') -def getRandomTop(gender, tailorId = MAKE_A_TOON, generator = None): +def getRandomTop(tailorId = MAKE_A_TOON, generator = None): if generator == None: generator = random collection = TailorCollections[tailorId] - if gender == 'm': - style = generator.choice(collection[BOY_SHIRTS]) - else: - style = generator.choice(collection[GIRL_SHIRTS]) + style = generator.choice(collection[SHIRTS]) styleList = ShirtStyles[style] colors = generator.choice(styleList[2]) return (styleList[0], @@ -1749,19 +1304,17 @@ def getRandomTop(gender, tailorId = MAKE_A_TOON, generator = None): colors[1]) -def getRandomBottom(gender, tailorId = MAKE_A_TOON, generator = None, girlBottomType = None): +def getRandomBottom(tailorId = MAKE_A_TOON, generator = None, girlBottomType = None): if generator == None: generator = random collection = TailorCollections[tailorId] - if gender == 'm': - style = generator.choice(collection[BOY_SHORTS]) - elif girlBottomType is None: - style = generator.choice(collection[GIRL_BOTTOMS]) + if girlBottomType is None: + style = generator.choice(collection[BOTTOMS]) elif girlBottomType == SKIRT: - skirtCollection = [style for style in collection[GIRL_BOTTOMS] if GirlBottoms[BottomStyles[style][0]][1] == SKIRT] + skirtCollection = [style for style in collection[BOTTOMS] if Bottoms[BottomStyles[style][0]][1] == SKIRT] style = generator.choice(skirtCollection) elif girlBottomType == SHORTS: - shortsCollection = [style for style in collection[GIRL_BOTTOMS] if GirlBottoms[BottomStyles[style][0]][1] == SHORTS] + shortsCollection = [style for style in collection[BOTTOMS] if Bottoms[BottomStyles[style][0]][1] == SHORTS] style = generator.choice(shortsCollection) else: notify.error('Bad girlBottomType: %s' % girlBottomType) @@ -1799,10 +1352,7 @@ def getRandomizedTops(gender, tailorId = MAKE_A_TOON, generator = None): if generator == None: generator = random collection = TailorCollections[tailorId] - if gender == 'm': - collection = collection[BOY_SHIRTS][:] - else: - collection = collection[GIRL_SHIRTS][:] + collection = collection[SHIRTS][:] tops = [] random.shuffle(collection) for style in collection: @@ -1821,10 +1371,8 @@ def getRandomizedBottoms(gender, tailorId = MAKE_A_TOON, generator = None): if generator == None: generator = random collection = TailorCollections[tailorId] - if gender == 'm': - collection = collection[BOY_SHORTS][:] - else: - collection = collection[GIRL_BOTTOMS][:] + + collection = collection[BOTTOMS][:] bottoms = [] random.shuffle(collection) for style in collection: @@ -1837,10 +1385,7 @@ def getRandomizedBottoms(gender, tailorId = MAKE_A_TOON, generator = None): def getTops(gender, tailorId = MAKE_A_TOON): - if gender == 'm': - collection = TailorCollections[tailorId][BOY_SHIRTS] - else: - collection = TailorCollections[tailorId][GIRL_SHIRTS] + collection = TailorCollections[tailorId][SHIRTS] tops = [] for style in collection: for color in ShirtStyles[style][2]: @@ -1870,10 +1415,7 @@ def getAllTops(gender): def getBottoms(gender, tailorId = MAKE_A_TOON): - if gender == 'm': - collection = TailorCollections[tailorId][BOY_SHORTS] - else: - collection = TailorCollections[tailorId][GIRL_BOTTOMS] + collection = TailorCollections[tailorId][BOTTOMS] bottoms = [] for style in collection: for color in BottomStyles[style][1]: @@ -1885,16 +1427,13 @@ def getBottoms(gender, tailorId = MAKE_A_TOON): def getAllBottoms(gender, output = 'both'): bottoms = [] for style in list(BottomStyles.keys()): - if gender == 'm': - if style[0] == 'g' or style[:3] == 'c_g' or style[:4] == 'vd_g' or style[:4] == 'sd_g' or style[:4] == 'j4_g' or style[:4] == 'pj_g' or style[:4] == 'wh_g' or style[:4] == 'sa_g' or style[:4] == 'sc_g' or style[:5] == 'sil_g' or style[:4] == 'hw_g': + + if style[0] == 'g' or style[:3] == 'c_g' or style[:4] == 'vd_g' or style[:4] == 'sd_g' or style[:4] == 'j4_g' or style[:4] == 'pj_g' or style[:4] == 'wh_g' or style[:4] == 'sa_g' or style[:4] == 'sc_g' or style[:5] == 'sil_g' or style[:4] == 'hw_g': continue elif style[0] == 'b' or style[:3] == 'c_b' or style[:4] == 'vd_b' or style[:4] == 'sd_b' or style[:4] == 'j4_b' or style[:4] == 'pj_b' or style[:4] == 'wh_b' or style[:4] == 'sa_b' or style[:4] == 'sc_b' or style[:5] == 'sil_b' or style[:4] == 'hw_b': continue bottomIdx = BottomStyles[style][0] - if gender == 'f': - textureType = GirlBottoms[bottomIdx][1] - else: - textureType = SHORTS + textureType = Bottoms[bottomIdx][1] if output == 'both' or output == 'skirts' and textureType == SKIRT or output == 'shorts' and textureType == SHORTS: for color in BottomStyles[style][1]: bottoms.append((bottomIdx, color)) @@ -1929,31 +1468,7 @@ allColorsList = [VBase4(1.0, 1.0, 1.0, 1.0), VBase4(0.898438, 0.617188, 0.90625, 1.0), VBase4(0.7, 0.7, 0.8, 1.0), VBase4(0.3, 0.3, 0.35, 1.0)] -defaultBoyColorList = [1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24] -defaultGirlColorList = [1, +defaultColorList = [1, 2, 3, 4, @@ -1977,8 +1492,9 @@ defaultGirlColorList = [1, 22, 23, 24] + allColorsListApproximations = [VBase4(round(x[0], 3), round(x[1], 3), round(x[2], 3), round(x[3], 3)) for x in allColorsList] -allowedColors = set([allColorsListApproximations[x] for x in set(defaultBoyColorList + defaultGirlColorList + [26])]) +allowedColors = set([allColorsListApproximations[x] for x in set(defaultColorList + [26])]) HatModels = [None, 'phase_4/models/accessories/tt_m_chr_avt_acc_hat_baseball', 'phase_4/models/accessories/tt_m_chr_avt_acc_hat_safari', @@ -2414,19 +1930,18 @@ class ToonDNA(AvatarDNA.AvatarDNA): return def __str__(self): - string = 'type = toon\n' - string = string + 'gender = %s\n' % self.gender - string = string + 'head = %s, torso = %s, legs = %s\n' % (self.head, self.torso, self.legs) - string = string + 'arm color = %d\n' % self.armColor - string = string + 'glove color = %d\n' % self.gloveColor - string = string + 'leg color = %d\n' % self.legColor - string = string + 'head color = %d\n' % self.headColor - string = string + 'top texture = %d\n' % self.topTex - string = string + 'top texture color = %d\n' % self.topTexColor - string = string + 'sleeve texture = %d\n' % self.sleeveTex - string = string + 'sleeve texture color = %d\n' % self.sleeveTexColor - string = string + 'bottom texture = %d\n' % self.botTex - string = string + 'bottom texture color = %d\n' % self.botTexColor + string = f'type = toon\n' + string += f'head = {self.head}, eyelashes = {self.eyelashes}, torso = {self.torso}, legs = {self.legs}\n' + string += f'arm color = {self.armColor}\n' + string += f'glove color = {self.gloveColor}\n' + string += f'leg color = {self.legColor}\n' + string += f'head color = {self.headColor}\n' + string += f'top texture = {self.topTex}\n' + string += f'top texture color = {self.topTexColor}\n' + string += f'sleeve texture = {self.sleeveTex}\n' + string += f'sleeve texture color = {self.sleeveTexColor}\n' + string += f'bottom texture = {self.botTex}\n' + string += f'bottom texture color = {self.botTexColor}\n' return string def clone(self): @@ -2442,12 +1957,9 @@ class ToonDNA(AvatarDNA.AvatarDNA): torsoIndex = toonTorsoTypes.index(self.torso) legsIndex = toonLegTypes.index(self.legs) dg.addUint8(headIndex) + dg.addUint8(self.eyelashes) dg.addUint8(torsoIndex) dg.addUint8(legsIndex) - if self.gender == 'm': - dg.addUint8(1) - else: - dg.addUint8(0) dg.addUint8(self.topTex) dg.addUint8(self.topTexColor) dg.addUint8(self.sleeveTex) @@ -2473,19 +1985,17 @@ class ToonDNA(AvatarDNA.AvatarDNA): if type not in ('t',): return False headIndex = dgi.getUint8() + eyelashes = dgi.getUint8() torsoIndex = dgi.getUint8() legsIndex = dgi.getUint8() if headIndex >= len(toonHeadTypes): return False + if eyelashes > 1 or eyelashes < 0: + return False if torsoIndex >= len(toonTorsoTypes): return False if legsIndex >= len(toonLegTypes): return False - gender = dgi.getUint8() - if gender == 1: - gender = 'm' - else: - gender = 'f' topTex = dgi.getUint8() topTexColor = dgi.getUint8() sleeveTex = dgi.getUint8() @@ -2504,7 +2014,7 @@ class ToonDNA(AvatarDNA.AvatarDNA): return False if sleeveTexColor >= len(ClothesColors): return False - if botTex >= choice(gender == 'm', len(BoyShorts), len(GirlBottoms)): + if botTex >= len(Bottoms): return False if botTexColor >= len(ClothesColors): return False @@ -2524,16 +2034,12 @@ class ToonDNA(AvatarDNA.AvatarDNA): self.type = dgi.getFixedString(1) if self.type == 't': headIndex = dgi.getUint8() + self.eyelashes = dgi.getUint8() torsoIndex = dgi.getUint8() legsIndex = dgi.getUint8() self.head = toonHeadTypes[headIndex] self.torso = toonTorsoTypes[torsoIndex] self.legs = toonLegTypes[legsIndex] - gender = dgi.getUint8() - if gender == 1: - self.gender = 'm' - else: - self.gender = 'f' self.topTex = dgi.getUint8() self.topTexColor = dgi.getUint8() self.sleeveTex = dgi.getUint8() @@ -2564,7 +2070,7 @@ class ToonDNA(AvatarDNA.AvatarDNA): self.head = dna[0] self.torso = dna[1] self.legs = dna[2] - self.gender = dna[3] + self.eyelashes = dna[3] self.topTex = 0 self.topTexColor = 0 self.sleeveTex = 0 @@ -2581,12 +2087,12 @@ class ToonDNA(AvatarDNA.AvatarDNA): notify.error("tuple must be in format ('%s', '%s', '%s', '%s')") return - def newToonFromProperties(self, head, torso, legs, gender, armColor, gloveColor, legColor, headColor, topTexture, topTextureColor, sleeveTexture, sleeveTextureColor, bottomTexture, bottomTextureColor): + def newToonFromProperties(self, head, torso, legs, eyelashes, armColor, gloveColor, legColor, headColor, topTexture, topTextureColor, sleeveTexture, sleeveTextureColor, bottomTexture, bottomTextureColor): self.type = 't' self.head = head self.torso = torso self.legs = legs - self.gender = gender + self.eyelashes = eyelashes self.armColor = armColor self.gloveColor = gloveColor self.legColor = legColor @@ -2598,15 +2104,15 @@ class ToonDNA(AvatarDNA.AvatarDNA): self.botTex = bottomTexture self.botTexColor = bottomTextureColor - def updateToonProperties(self, head = None, torso = None, legs = None, gender = None, armColor = None, gloveColor = None, legColor = None, headColor = None, topTexture = None, topTextureColor = None, sleeveTexture = None, sleeveTextureColor = None, bottomTexture = None, bottomTextureColor = None, shirt = None, bottom = None): + def updateToonProperties(self, head = None, torso = None, legs = None, eyelashes = None, armColor = None, gloveColor = None, legColor = None, headColor = None, topTexture = None, topTextureColor = None, sleeveTexture = None, sleeveTextureColor = None, bottomTexture = None, bottomTextureColor = None, shirt = None, bottom = None): if head: self.head = head if torso: self.torso = torso if legs: self.legs = legs - if gender: - self.gender = gender + if eyelashes: + self.eyelashes = eyelashes if armColor: self.armColor = armColor if gloveColor: @@ -2640,7 +2146,7 @@ class ToonDNA(AvatarDNA.AvatarDNA): self.botTex = defn[0] self.botTexColor = defn[1][colorIndex] - def newToonRandom(self, seed = None, gender = 'm', npc = 0, stage = None): + def newToonRandom(self, seed = None, eyelashes = 'm', npc = 0, stage = None): if seed: generator = random.Random() generator.seed(seed) @@ -2664,43 +2170,30 @@ class ToonDNA(AvatarDNA.AvatarDNA): self.head = generator.choice(toonHeadTypes) else: self.head = generator.choice(toonHeadTypes[:22]) - top, topColor, sleeve, sleeveColor = getRandomTop(gender, generator=generator) - bottom, bottomColor = getRandomBottom(gender, generator=generator) - if gender == 'm': - self.torso = generator.choice(toonTorsoTypes[:3]) - self.topTex = top - self.topTexColor = topColor - self.sleeveTex = sleeve - self.sleeveTexColor = sleeveColor - self.botTex = bottom - self.botTexColor = bottomColor - color = generator.choice(defaultBoyColorList) - self.armColor = color - self.legColor = color - self.headColor = color + top, topColor, sleeve, sleeveColor = getRandomTop(generator=generator) + bottom, bottomColor = getRandomBottom(generator=generator) + self.torso = generator.choice(toonTorsoTypes[:6]) + self.topTex = top + self.topTexColor = topColor + self.sleeveTex = sleeve + self.sleeveTexColor = sleeveColor + if self.torso[1] == 'd': + bottom, bottomColor = getRandomBottom(generator=generator, girlBottomType=SKIRT) else: - self.torso = generator.choice(toonTorsoTypes[:6]) - self.topTex = top - self.topTexColor = topColor - self.sleeveTex = sleeve - self.sleeveTexColor = sleeveColor - if self.torso[1] == 'd': - bottom, bottomColor = getRandomBottom(gender, generator=generator, girlBottomType=SKIRT) - else: - bottom, bottomColor = getRandomBottom(gender, generator=generator, girlBottomType=SHORTS) - self.botTex = bottom - self.botTexColor = bottomColor - color = generator.choice(defaultGirlColorList) - self.armColor = color - self.legColor = color - self.headColor = color + bottom, bottomColor = getRandomBottom(generator=generator, girlBottomType=SHORTS) + self.botTex = bottom + self.botTexColor = bottomColor + color = generator.choice(defaultColorList) + self.armColor = color + self.legColor = color + self.headColor = color self.gloveColor = 0 def asTuple(self): return (self.head, self.torso, self.legs, - self.gender, + self.eyelashes, self.armColor, self.gloveColor, self.legColor,