Toon: Even more progress on removal of gender

This commit is contained in:
DarthNihilus1 2023-11-13 19:47:21 -05:00
parent bcff94ff44
commit 3a83435282
31 changed files with 142 additions and 316 deletions

View File

@ -2,9 +2,9 @@
class PickANamePattern:
def __init__(self, nameStr, gender):
def __init__(self, nameStr):
self._nameStr = nameStr
self._namePattern = self._compute(self._nameStr, gender)
self._namePattern = self._compute(self._nameStr)
def hasNamePattern(self):
return self._namePattern is not None
@ -12,8 +12,8 @@ class PickANamePattern:
def getNamePattern(self):
return self._namePattern
def getNameString(self, pattern, gender):
nameParts = self._getNameParts(gender)
def getNameString(self, pattern):
nameParts = self._getNameParts()
invNameParts = []
for i in range(len(nameParts)):
invNameParts.append(invertDict(nameParts[i]))
@ -27,8 +27,8 @@ class PickANamePattern:
return name
def getNamePartString(self, gender, patternIndex, partIndex):
nameParts = self._getNameParts(gender)
def getNamePartString(self, patternIndex, partIndex):
nameParts = self._getNameParts()
invNamePart = invertDict(nameParts[patternIndex])
return invNamePart[partIndex]
@ -49,8 +49,8 @@ class PickANamePattern:
for splitName in self._genWordListSplitPermutations(name.split()):
yield splitName
def _compute(self, nameStr, gender):
return self._computeWithNameParts(nameStr, self._getNameParts(gender))
def _compute(self, nameStr ):
return self._computeWithNameParts(nameStr, self._getNameParts())
def _computeWithNameParts(self, nameStr, nameParts):
for splitPermutation in self._genNameSplitPermutations(nameStr):
@ -60,7 +60,7 @@ class PickANamePattern:
return
def _getNameParts(self, gender):
def _getNameParts(self):
pass
def _recursiveCompute(self, words, nameParts, wi = 0, nwli = 0, pattern = None):
@ -82,8 +82,8 @@ class PickANamePattern:
class PickANamePatternTwoPartLastName(PickANamePattern):
def getNameString(self, pattern, gender):
name = PickANamePattern.getNameString(self, pattern, gender)
def getNameString(self, pattern,):
name = PickANamePattern.getNameString(self, pattern)
if pattern[-2] != -1:
words = name.split()
name = ''
@ -104,8 +104,8 @@ class PickANamePatternTwoPartLastName(PickANamePattern):
def _getLastNameCapPrefixes(self):
return []
def _compute(self, nameStr, gender):
nameParts = self._getNameParts(gender)
def _compute(self, nameStr):
nameParts = self._getNameParts()
combinedNameParts = nameParts[:-2]
combinedNameParts.append({})
combinedIndex2indices = {}

View File

@ -101,10 +101,12 @@ def teleportIn(attack, npc, pos = Point3(0, 0, 0), hpr = Vec3(180.0, 0.0, 0.0)):
def teleportOut(attack, npc):
if npc.style.getGender() == 'm':
a = ActorInterval(npc, 'bow')
else:
# instead of gender check the torso type
if npc.style.torso[1] == 'd':
a = ActorInterval(npc, 'curtsy')
else:
a = ActorInterval(npc, 'bow')
b = Func(npc.setChatAbsolute, TTLocalizer.MovieNPCSOSGoodbye, CFSpeech | CFTimeout)
c = npc.getTeleportOutTrack()
d = Func(npc.removeActive)

View File

@ -392,16 +392,15 @@ class CatalogClothingItem(CatalogItem.CatalogItem):
defn = ToonDNA.BottomStyles[str]
dna.botTex = defn[0]
dna.botTexColor = defn[1][self.colorIndex]
if dna.getGender() == 'f':
try:
bottomPair = ToonDNA.GirlBottoms[dna.botTex]
except:
bottomPair = ToonDNA.GirlBottoms[0]
try:
bottomPair = ToonDNA.Bottoms[dna.botTex]
except:
bottomPair = ToonDNA.Bottoms[0]
if dna.torso[1] == 's' and bottomPair[1] == ToonDNA.SKIRT:
dna.torso = dna.torso[0] + 'd'
elif dna.torso[1] == 'd' and bottomPair[1] == ToonDNA.SHORTS:
dna.torso = dna.torso[0] + 's'
if dna.torso[1] == 's' and bottomPair[1] == ToonDNA.SKIRT:
dna.torso = dna.torso[0] + 'd'
elif dna.torso[1] == 'd' and bottomPair[1] == ToonDNA.SHORTS:
dna.torso = dna.torso[0] + 's'
avatar.b_setDNAString(dna.makeNetString())
avatar.d_catalogGenClothes()
return ToontownGlobals.P_ItemAvailable

View File

@ -1108,10 +1108,7 @@ class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem):
def nextAvailableCloset(avatar, duplicateItems):
if avatar.getStyle().getGender() == 'm':
index = 0
else:
index = 1
index = 0
if not hasattr(avatar, 'maxClothes'):
return None
closetIds = ClothesToCloset.get(avatar.getMaxClothes())
@ -1132,10 +1129,7 @@ def nextAvailableCloset(avatar, duplicateItems):
def get50ItemCloset(avatar, duplicateItems):
if avatar.getStyle().getGender() == 'm':
index = 0
else:
index = 1
index = 0
closetId = MaxClosetIds[index]
item = CatalogFurnitureItem(closetId)
if item in avatar.onOrder or item in avatar.mailboxContents:
@ -1160,10 +1154,8 @@ def getAllClosets():
def get50ItemTrunk(avatar, duplicateItems):
if avatar.getStyle().getGender() == 'm':
index = 0
else:
index = 1
index = 0
trunkId = MaxTrunkIds[index]
item = CatalogFurnitureItem(trunkId)
if item in avatar.onOrder or item in avatar.mailboxContents:

View File

@ -119,17 +119,16 @@ class ToontownClientRepository(OTPClientRepository.OTPClientRepository):
for head in ToonDNA.getHeadList(species):
for torso in ToonDNA.toonTorsoTypes:
for legs in ToonDNA.toonLegTypes:
for gender in ('m', 'f'):
print('species: %s, head: %s, torso: %s, legs: %s, gender: %s' % (species,
print('species: %s, head: %s, torso: %s, legs: %s' % (species,
head,
torso,
legs,
gender))
))
dna = ToonDNA.ToonDNA()
dna.newToon((head,
torso,
legs,
gender))
legs
))
toon = Toon.Toon()
try:
toon.setDNA(dna)

View File

@ -19,7 +19,6 @@ class ClosetGUI(ClothesGUI.ClothesGUI):
self.isOwner = isOwner
self.deleteEvent = deleteEvent
self.cancelEvent = cancelEvent
self.genderChange = 0
self.verify = None
return
@ -75,7 +74,6 @@ class ClosetGUI(ClothesGUI.ClothesGUI):
def setupScrollInterface(self):
self.notify.debug('setupScrollInterface')
self.dna = self.toon.getStyle()
self.gender = self.dna.getGender()
self.swappedTorso = 0
if self.topsList == None:
self.topsList = self.toon.getClothesTopsList()
@ -125,9 +123,6 @@ class ClosetGUI(ClothesGUI.ClothesGUI):
else:
self.bottomTrashButton['text'] = TTLocalizer.ClosetDeleteShorts
def setGender(self, gender):
self.ownerGender = gender
self.genderChange = 1
def swapBottom(self, offset):
length = len(self.bottoms)
@ -140,11 +135,6 @@ class ClosetGUI(ClothesGUI.ClothesGUI):
return None
self.toon.style.botTex = self.bottoms[self.bottomChoice][0]
self.toon.style.botTexColor = self.bottoms[self.bottomChoice][1]
if self.genderChange == 1:
if self.bottomChoice > 0:
self.__handleGenderBender(1)
else:
self.__handleGenderBender(0)
if self.toon.generateToonClothes() == 1:
self.toon.loop('neutral', 0)
self.swappedTorso = 1
@ -153,20 +143,6 @@ class ClosetGUI(ClothesGUI.ClothesGUI):
if self.swapEvent != None:
messenger.send(self.swapEvent)
def __handleGenderBender(self, type):
if type == 1:
if self.toon.style.gender != self.ownerGender and self.toon.style.gender == 'f':
self.toon.swapToonTorso(self.toon.style.torso[0] + 's', genClothes=0)
self.toon.loop('neutral', 0)
self.swappedTorso = 1
self.toon.style.gender = self.ownerGender
else:
self.toon.style.gender = self.gender
if self.toon.style.gender != self.ownerGender and self.toon.style.gender == 'm':
self.toon.swapToonTorso(self.toon.style.torso[0] + 's', genClothes=0)
self.toon.loop('neutral', 0)
self.swappedTorso = 1
def removeTop(self, index):
listLen = len(self.tops)
if index < listLen:

View File

@ -46,7 +46,6 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
self.purchaseDoneEvent = ''
self.swapEvent = ''
self.locked = 0
self.gender = None
self.topDeleted = 0
self.bottomDeleted = 0
self.closetTrack = None
@ -130,7 +129,6 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
self.popupInfo = None
if self.av:
del self.av
del self.gender
del self.closetSphere
del self.closetSphereNode
del self.closetSphereNodePath
@ -200,10 +198,9 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
self.hasLocalAvatar = 1
return
def setState(self, mode, avId, ownerId, gender, topList, botList):
def setState(self, mode, avId, ownerId, topList, botList):
self.notify.debug('setState, mode=%s, avId=%s, ownerId=%d' % (mode, avId, ownerId))
self.isOwner = avId == ownerId
self.ownerGender = gender
if mode == ClosetGlobals.CLOSED:
self.fsm.request('closed')
return
@ -212,7 +209,6 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
self.av = self.cr.doId2do.get(self.customerId, None)
if self.av:
if base.localAvatar.getDoId() == self.customerId:
self.gender = self.av.style.gender
self.topList = topList
self.botList = botList
self.oldTopList = self.topList[0:]
@ -227,11 +223,7 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
self.fsm.request('open')
return
def _revertGender(self):
if self.gender:
self.av.style.gender = self.gender
self.av.loop('neutral')
def popupChangeClothesGUI(self, task):
self.notify.debug('popupChangeClothesGUI')
self.purchaseDoneEvent = self.uniqueName('purchaseDone')
@ -246,8 +238,6 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
if not self.closetGUI:
self.closetGUI = ClosetGUI.ClosetGUI(self.isOwner, self.purchaseDoneEvent, self.cancelEvent, self.swapEvent, self.deleteEvent, self.topList, self.botList)
self.closetGUI.load()
if self.gender != self.ownerGender:
self.closetGUI.setGender(self.ownerGender)
self.closetGUI.enter(base.localAvatar)
self.closetGUI.showButtons()
style = self.av.getStyle()
@ -374,7 +364,7 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
return
def printInfo(self):
print('avid: %s, gender: %s' % (self.av.doId, self.av.style.gender))
print('avid: %s' % (self.av.doId))
print('current top = %s,%s,%s,%s and bot = %s,%s,' % (self.av.style.topTex,
self.av.style.topTexColor,
self.av.style.sleeveTex,
@ -393,7 +383,6 @@ class DistributedCloset(DistributedFurnitureItem.DistributedFurnitureItem):
return
elif mode == ClosetGlobals.CLOSET_MOVIE_COMPLETE:
if self.isLocalToon:
self._revertGender()
print('-----------ending trunk interaction-----------')
self.printInfo()
print('-------------------------------------------------')

View File

@ -22,14 +22,15 @@ def dnaCodeFromToonDNA(dna):
return i
if dna.gender == 'f':
genderTypeNum = 0
if dna.eyelashes == 0:
eyelashesTypeNum = 0
else:
genderTypeNum = 1
eyelashesTypeNum = 1
legTypeNum = findItemNumInList(dna.legs, ToonDNA.toonLegTypes) << 1
torsoTypeNum = findItemNumInList(dna.torso, ToonDNA.toonTorsoTypes) << 3
headTypeNum = findItemNumInList(dna.head, ToonDNA.toonHeadTypes) << 7
return headTypeNum | torsoTypeNum | legTypeNum | genderTypeNum
return headTypeNum | torsoTypeNum | legTypeNum | eyelashesTypeNum
class DistributedToonStatuary(DistributedStatuary.DistributedStatuary):
@ -46,7 +47,7 @@ class DistributedToonStatuary(DistributedStatuary.DistributedStatuary):
self.model.setScale(self.worldScale * 1.5, self.worldScale * 1.5, self.worldScale)
self.getToonPropertiesFromOptional()
dna = ToonDNA.ToonDNA()
dna.newToonFromProperties(self.headType, self.torsoType, self.legType, self.gender, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
dna.newToonFromProperties(self.headType, self.torsoType, self.legType, self.eyelashes, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
self.setupStoneToon(dna)
self.poseToonFromTypeIndex(self.typeIndex)
self.toon.reparentTo(self.model)
@ -62,7 +63,7 @@ class DistributedToonStatuary(DistributedStatuary.DistributedStatuary):
self.toon.initializeBodyCollisions('toonStatue')
self.toon.stopBlink()
self.toon.stopLookAround()
self.gender = self.toon.style.gender
self.eyelashes = self.toon.style.eyelashes
self.speciesType = self.toon.style.getAnimal()
self.headType = self.toon.style.head
self.removeTextures()
@ -85,7 +86,7 @@ class DistributedToonStatuary(DistributedStatuary.DistributedStatuary):
self.toon.pose('victory', 30)
self.toon.setH(180)
self.speciesType = self.toon.style.getAnimal()
self.gender = self.toon.style.gender
self.eyelashes = self.toon.style.eyelashes
def setupCollision(self):
DistributedStatuary.DistributedStatuary.setupCollision(self)
@ -164,7 +165,7 @@ class DistributedToonStatuary(DistributedStatuary.DistributedStatuary):
tsLashes = TextureStage('tsLashes')
tsLashes.setPriority(2)
tsLashes.setMode(tsLashes.MDecal)
if self.gender == 'f':
if self.eyelashes:
if self.toon.hasLOD():
head = self.toon.getPart('head', '1000')
else:
@ -188,14 +189,14 @@ class DistributedToonStatuary(DistributedStatuary.DistributedStatuary):
self.optional = optional
def getToonPropertiesFromOptional(self):
genderTypeNum = self.optional & 1
eyelashesTypeNum = self.optional & 1
legTypeNum = (self.optional & 6) >> 1
torsoTypeNum = (self.optional & 120) >> 3
headTypeNum = (self.optional & 65408) >> 7
if genderTypeNum == 0:
self.gender = 'f'
if eyelashesTypeNum == 0:
self.eyelashes = 0
else:
self.gender = 'm'
self.eyelashes = 1
if legTypeNum <= len(ToonDNA.toonLegTypes):
self.legType = ToonDNA.toonLegTypes[legTypeNum]
if torsoTypeNum <= len(ToonDNA.toonTorsoTypes):

View File

@ -34,7 +34,7 @@ class DistributedTrunk(DistributedCloset.DistributedCloset):
self.isFreePlayer = 0
def printInfo(self):
print('avid: %s, gender: %s' % (self.av.doId, self.av.style.gender))
print('avid: %s, ' % (self.av.doId))
print('current hat = %s, glasses = %s, backpack = %s, shoes = %s' % (self.av.getHat(),
self.av.getGlasses(),
self.av.getBackpack(),
@ -44,10 +44,9 @@ class DistributedTrunk(DistributedCloset.DistributedCloset):
print('backpackList = %s' % self.av.getBackpackList())
print('shoesList = %s' % self.av.getShoesList())
def setState(self, mode, avId, ownerId, gender, hatList, glassesList, backpackList, shoesList):
def setState(self, mode, avId, ownerId, hatList, glassesList, backpackList, shoesList):
self.notify.debug('setState, mode=%s, avId=%s, ownerId=%d' % (mode, avId, ownerId))
self.isOwner = avId == ownerId
self.ownerGender = gender
if mode == ClosetGlobals.CLOSED:
self.fsm.request('closed')
return
@ -61,7 +60,7 @@ class DistributedTrunk(DistributedCloset.DistributedCloset):
else:
self.isFreePlayer = 0
if base.localAvatar.getDoId() == self.customerId:
self.gender = self.av.style.gender
self.eyelashes = self.av.style.eyelashes
self.hatList = hatList
self.glassesList = glassesList
self.backpackList = backpackList
@ -112,8 +111,6 @@ class DistributedTrunk(DistributedCloset.DistributedCloset):
if not self.closetGUI:
self.closetGUI = TrunkGUI.TrunkGUI(self.isOwner, self.purchaseDoneEvent, self.cancelEvent, self.swapHatEvent, self.swapGlassesEvent, self.swapBackpackEvent, self.swapShoesEvent, self.deleteEvent, self.hatList, self.glassesList, self.backpackList, self.shoesList)
self.closetGUI.load()
if self.gender != self.ownerGender:
self.closetGUI.setGender(self.ownerGender)
self.closetGUI.enter(base.localAvatar)
self.closetGUI.showButtons()
oldHat = self.av.getHat()

View File

@ -29,7 +29,6 @@ class TrunkGUI(StateData.StateData):
self.swapShoesEvent = swapShoesEvent
self.deleteEvent = deleteEvent
self.cancelEvent = cancelEvent
self.genderChange = 0
self.verify = None
return
@ -324,9 +323,7 @@ class TrunkGUI(StateData.StateData):
task = Task(self.rotateToonR)
taskMgr.add(task, self.taskName('rotateR'))
def setGender(self, gender):
self.ownerGender = gender
self.genderChange = 1
def swapHat(self, offset):
length = len(self.hats)

View File

@ -20,8 +20,7 @@ class ClothesGUI(StateData.StateData):
self.type = type
self.toon = None
self.swapEvent = swapEvent
self.gender = '?'
self.girlInShorts = 0
self.toonInShorts = 0
self.swappedTorso = 0
return
@ -119,18 +118,14 @@ class ClothesGUI(StateData.StateData):
self.ignore(self.shuffleFetchMsg)
def setupButtons(self):
self.girlInShorts = 0
if self.gender == 'f':
if self.bottomChoice == -1:
botTex = self.bottoms[0][0]
else:
botTex = self.bottoms[self.bottomChoice][0]
if ToonDNA.GirlBottoms[botTex][1] == ToonDNA.SHORTS:
self.girlInShorts = 1
if self.toon.style.getGender() == 'm':
self.bottomFrame['text'] = TTLocalizer.ClothesShopShorts
self.toonInShorts = 0
if self.bottomChoice == -1:
botTex = self.bottoms[0][0]
else:
self.bottomFrame['text'] = TTLocalizer.ClothesShopBottoms
botTex = self.bottoms[self.bottomChoice][0]
if ToonDNA.Bottoms[botTex][1] == ToonDNA.SHORTS:
self.toonInShorts = 1
self.bottomFrame['text'] = TTLocalizer.ClothesShopBottoms
self.acceptOnce('last', self.__handleBackward)
self.acceptOnce('next', self.__handleForward)
return None

View File

@ -18,17 +18,15 @@ class ColorShop(StateData.StateData):
self.colorAll = 1
return
def getGenderColorList(self, dna):
if self.dna.getGender() == 'm':
return ToonDNA.defaultBoyColorList
else:
return ToonDNA.defaultGirlColorList
def getColorList(self, dna):
return ToonDNA.defaultColorList
def enter(self, toon, shopsVisited = []):
base.disableMouse()
self.toon = toon
self.dna = toon.getStyle()
colorList = self.getGenderColorList(self.dna)
colorList = self.getColorList(self.dna)
try:
self.headChoice = colorList.index(self.dna.headColor)
self.armChoice = colorList.index(self.dna.armColor)
@ -44,7 +42,7 @@ class ColorShop(StateData.StateData):
self.startColor = 0
self.acceptOnce('last', self.__handleBackward)
self.acceptOnce('next', self.__handleForward)
choicePool = [self.getGenderColorList(self.dna), self.getGenderColorList(self.dna), self.getGenderColorList(self.dna)]
choicePool = [self.getColorList(self.dna), self.getColorList(self.dna), self.getColorList(self.dna)]
self.shuffleButton.setChoicePool(choicePool)
self.accept(self.shuffleFetchMsg, self.changeColor)
self.acceptOnce('MAT-newToonCreated', self.shuffleButton.cleanHistory)
@ -153,7 +151,7 @@ class ColorShop(StateData.StateData):
self.ignore('MAT-newToonCreated')
def __swapAllColor(self, offset):
colorList = self.getGenderColorList(self.dna)
colorList = self.getColorList(self.dna)
length = len(colorList)
choice = (self.headChoice + offset) % length
self.__updateScrollButtons(choice, length, self.allLButton, self.allRButton)
@ -164,7 +162,7 @@ class ColorShop(StateData.StateData):
self.__swapLegColor(choice - oldLegColorIndex)
def __swapHeadColor(self, offset):
colorList = self.getGenderColorList(self.dna)
colorList = self.getColorList(self.dna)
length = len(colorList)
self.headChoice = (self.headChoice + offset) % length
self.__updateScrollButtons(self.headChoice, length, self.headLButton, self.headRButton)
@ -173,7 +171,7 @@ class ColorShop(StateData.StateData):
self.toon.swapToonColor(self.dna)
def __swapArmColor(self, offset):
colorList = self.getGenderColorList(self.dna)
colorList = self.getColorList(self.dna)
length = len(colorList)
self.armChoice = (self.armChoice + offset) % length
self.__updateScrollButtons(self.armChoice, length, self.armLButton, self.armRButton)
@ -182,7 +180,7 @@ class ColorShop(StateData.StateData):
self.toon.swapToonColor(self.dna)
def __swapLegColor(self, offset):
colorList = self.getGenderColorList(self.dna)
colorList = self.getColorList(self.dna)
length = len(colorList)
self.legChoice = (self.legChoice + offset) % length
self.__updateScrollButtons(self.legChoice, length, self.legLButton, self.legRButton)
@ -210,7 +208,7 @@ class ColorShop(StateData.StateData):
def changeColor(self):
self.notify.debug('Entering changeColor')
colorList = self.getGenderColorList(self.dna)
colorList = self.getColorList(self.dna)
newChoice = self.shuffleButton.getCurrChoice()
newHeadColorIndex = colorList.index(newChoice[0])
newArmColorIndex = colorList.index(newChoice[1])

View File

@ -95,10 +95,6 @@ class MakeAToon(StateData.StateData):
base.playMusic(self.music, looping=1, volume=self.musicVolume)
camera.setPosHpr(-5.7, -12.3501, 2.15, -24.8499, 2.73, 0)
if self.warp:
if self.toon.style.torso[1] == 's':
self.toon.gender = 's'
else:
self.toon.gender = 'd'
self.toon.reparentTo(render)
self.toon.loop('neutral')
self.toon.setPosHpr(-4.1, -2, 0, 200, 0, 0)
@ -203,8 +199,6 @@ class MakeAToon(StateData.StateData):
ee.bind(DGG.B1PRESS, lambda x, ee = ee: self.toggleSlide())
self.eee = ee
self.room = loader.loadModel('phase_3/models/makeatoon/tt_m_ara_mat_room')
self.genderWalls = self.room.find('**/genderWalls')
self.genderProps = self.room.find('**/genderProps')
self.bodyWalls = self.room.find('**/bodyWalls')
self.bodyProps = self.room.find('**/bodyProps')
self.colorWalls = self.room.find('**/colorWalls')
@ -306,10 +300,6 @@ class MakeAToon(StateData.StateData):
self.cleanupFocusOutIval()
self.room.removeNode()
del self.room
self.genderWalls.removeNode()
self.genderProps.removeNode()
del self.genderWalls
del self.genderProps
self.bodyWalls.removeNode()
self.bodyProps.removeNode()
del self.bodyWalls

View File

@ -1,5 +1,4 @@
GENDERSHOP = 1
BODYSHOP = 2
BODYSHOP = 1
COLORSHOP = 3
CLOTHESSHOP = 4
NAMESHOP = 5

View File

@ -9,21 +9,13 @@ class MakeClothesGUI(ClothesGUI.ClothesGUI):
def setupScrollInterface(self):
self.dna = self.toon.getStyle()
gender = self.dna.getGender()
if gender != self.gender:
self.tops = ToonDNA.getRandomizedTops(gender, tailorId=ToonDNA.MAKE_A_TOON)
self.bottoms = ToonDNA.getRandomizedBottoms(gender, tailorId=ToonDNA.MAKE_A_TOON)
self.gender = gender
self.topChoice = 0
self.bottomChoice = 0
self.setupButtons()
def setupButtons(self):
ClothesGUI.ClothesGUI.setupButtons(self)
if len(self.dna.torso) == 1:
if self.gender == 'm':
torsoStyle = 's'
elif self.girlInShorts == 1:
if self.toonInShorts == 1:
torsoStyle = 's'
else:
torsoStyle = 'd'

View File

@ -94,6 +94,17 @@ class NameGenerator:
6: 2,
7: 2,
8: 3})
def getAllNameParts(self):
return self._getNameParts({0: 0,
1: 0,
2: 0,
3: 1,
4: 1,
5: 1,
6: 2,
7: 2,
8: 3})
def getLastNamePrefixesCapped(self):
return self.capPrefixes
@ -213,21 +224,13 @@ class NameGenerator:
retString = ''
if titleFlag:
titleList = self.neutralTitles[:]
if boy:
titleList += self.boyTitles
elif girl:
titleList += self.girlTitles
else:
self.error('Must be boy or girl.')
titleList += self.boyTitles
titleList += self.girlTitles
retString += random.choice(titleList) + ' '
if firstFlag:
firstList = self.neutralFirsts[:]
if boy:
firstList += self.boyFirsts
elif girl:
firstList += self.girlFirsts
else:
self.error('Must be boy or girl.')
firstList += self.boyFirsts
firstList += self.girlFirsts
retString += random.choice(firstList)
if lastFlag:
retString += ' '
@ -239,12 +242,7 @@ class NameGenerator:
retString += lastPrefix + lastSuffix
return retString
def randomNameMoreinfo(self, boy = 0, girl = 0):
if boy and girl:
self.error("A name can't be both boy and girl!")
if not boy and not girl:
boy = random.choice([0, 1])
girl = not boy
def randomNameMoreinfo(self):
uberFlag = random.choice(['title-first',
'title-last',
'first',
@ -272,20 +270,14 @@ class NameGenerator:
uberReturn[1] = firstFlag
uberReturn[2] = lastFlag
titleList = self.neutralTitles[:]
if boy:
titleList += self.boyTitles
elif girl:
titleList += self.girlTitles
titleList += self.boyTitles
titleList += self.girlTitles
else:
self.error('Must be boy or girl.')
uberReturn[3] = random.choice(titleList)
firstList = self.neutralFirsts[:]
if boy:
firstList += self.boyFirsts
elif girl:
firstList += self.girlFirsts
else:
self.error('Must be boy or girl.')
firstList += self.boyFirsts
firstList += self.girlFirsts
uberReturn[4] = random.choice(firstList)
lastPrefix = random.choice(self.lastPrefixes)
lastSuffix = random.choice(self.lastSuffixes)
@ -315,10 +307,7 @@ class NameGenerator:
name = self.randomName(boy, girl)
width = self.text.calcWidth(name)
widthStr = str(width)
if boy:
print('Boy: ' + name + ' (' + widthStr + ' units)')
if girl:
print('Girl: ' + name + ' (' + widthStr + ' units)')
print(name + ' (' + widthStr + ' units)')
i += 1
def percentOver(self, limit = 9.0, samples = 1000):

View File

@ -45,8 +45,6 @@ class NameShop(StateData.StateData):
'',
'']
self.toon = None
self.boy = 0
self.girl = 0
self.allTitles = []
self.allFirsts = []
self.allPrefixes = []
@ -134,20 +132,13 @@ class NameShop(StateData.StateData):
return
else:
self.toon = toon
if self.toon.style.gender == 'm':
self.boy = 1
self.girl = 0
else:
self.boy = 0
self.girl = 1
self.usedNames = usedNames
if not self.addedGenderSpecific or self.oldBoy != self.boy:
self.oldBoy = self.boy
if not self.addedGenderSpecific:
self.listsLoaded = 0
self.allTitles = [' '] + [' '] + self.nameGen.boyTitles * self.boy + self.nameGen.girlTitles * self.girl + self.nameGen.neutralTitles
self.allTitles = [' '] + [' '] + self.nameGen.boyTitles + self.nameGen.girlTitles + self.nameGen.neutralTitles
self.allTitles.sort()
self.allTitles += [' '] + [' ']
self.allFirsts = [' '] + [' '] + self.nameGen.boyFirsts * self.boy + self.nameGen.girlFirsts * self.girl + self.nameGen.neutralFirsts
self.allFirsts = [' '] + [' '] + self.nameGen.boyFirsts + self.nameGen.girlFirsts + self.nameGen.neutralFirsts
self.allFirsts.sort()
self.allFirsts += [' '] + [' ']
try:
@ -644,7 +635,7 @@ class NameShop(StateData.StateData):
def __randomName(self):
self.notify.debug('Finding random name')
uberReturn = self.nameGen.randomNameMoreinfo(self.boy, self.girl)
uberReturn = self.nameGen.randomNameMoreinfo()
flags = uberReturn[:3]
names = uberReturn[3:7]
fullName = uberReturn[-1]

View File

@ -7,13 +7,14 @@ class TTPickANamePattern(PickANamePatternTwoPartLastName):
NameParts = None
LastNamePrefixesCapped = None
def _getNameParts(self, gender):
def _getNameParts(self):
if TTPickANamePattern.NameParts is None:
TTPickANamePattern.NameParts = {}
ng = NameGenerator()
TTPickANamePattern.NameParts['m'] = ng.getMaleNameParts()
TTPickANamePattern.NameParts['f'] = ng.getFemaleNameParts()
return TTPickANamePattern.NameParts[gender]
TTPickANamePattern.NameParts['n'] = ng.getAllNameParts()
return TTPickANamePattern.NameParts['n']
def _getLastNameCapPrefixes(self):
if TTPickANamePattern.LastNamePrefixesCapped is None:

View File

@ -737,20 +737,14 @@ class DistributedPhotoGame(DistributedMinigame, PhotoGameBase.PhotoGameBase):
for pathIndex in range(len(self.data['PATHS'])):
path = self.data['PATHS'][pathIndex]
subject = Toon.Toon()
gender = random.choice(['m', 'f'])
eyelashes = random.choice([0, 1])
seed = int(random.random() * 571)
if gender == 'm':
boy = 1
girl = 0
else:
boy = 0
girl = 1
subject.setName(namegen.randomNameMoreinfo(boy=boy, girl=girl)[-1])
subject.setName(namegen.randomNameMoreinfo()[-1])
self.nameCounter += 1
subject.setPickable(0)
subject.setPlayerType(NametagGroup.CCNonPlayer)
dna = ToonDNA.ToonDNA()
dna.newToonRandom(seed, gender, 1)
dna.newToonRandom(seed, eyelashes, 1)
subject.setDNAString(dna.makeNetString())
subject.animFSM.request('neutral')
subject.setTag('subjectIndex', '%s' % len(self.subjects))

View File

@ -486,57 +486,10 @@ class NPCMoviePlayer(DirectObject.DirectObject):
self.setVar(varName, dialogue)
return
def parseLoadCCDialogue(self, line):
token, varName, filenameTemplate = line
if self.toon.getStyle().gender == 'm':
classicChar = 'mickey'
else:
classicChar = 'minnie'
filename = filenameTemplate % classicChar
if base.config.GetString('language', 'english') == 'japanese':
dialogue = base.loader.loadSfx(filename)
else:
dialogue = None
self.setVar(varName, dialogue)
return
def parseLoadChar(self, line):
token, name, charType = line
char = Char.Char()
dna = CharDNA.CharDNA()
dna.newChar(charType)
char.setDNA(dna)
if charType == 'mk' or charType == 'mn':
char.startEarTask()
char.nametag.manage(base.marginManager)
char.addActive()
char.hideName()
self.setVar(name, char)
def parseLoadClassicChar(self, line):
token, name = line
char = Char.Char()
dna = CharDNA.CharDNA()
if self.toon.getStyle().gender == 'm':
charType = 'mk'
else:
charType = 'mn'
dna.newChar(charType)
char.setDNA(dna)
char.startEarTask()
char.nametag.manage(base.marginManager)
char.addActive()
char.hideName()
self.setVar(name, char)
self.chars.append(char)
def parseUnloadChar(self, line):
token, name = line
char = self.getVar(name)
track = Sequence()
track.append(Func(self.__unloadChar, char))
track.append(Func(self.delVar, name))
return track
def parseLoadSuit(self, line):
token, name, suitType = line
@ -716,32 +669,9 @@ class NPCMoviePlayer(DirectObject.DirectObject):
quitButton, extraChatFlags, dialogueList = self.parseExtraChatArgs(line[4:])
return Func(avatar.setLocalPageChat, chatString, quitButton, extraChatFlags, dialogueList)
def parseCCChatConfirm(self, line):
lineLength = len(line)
avatarName = line[1]
avatar = self.getVar(avatarName)
if self.toon.getStyle().gender == 'm':
chatString = eval('TTLocalizer.' + line[2] % 'Mickey')
else:
chatString = eval('TTLocalizer.' + line[2] % 'Minnie')
quitButton, extraChatFlags, dialogueList = self.parseExtraChatArgs(line[3:])
return Func(avatar.setLocalPageChat, chatString, quitButton, extraChatFlags, dialogueList)
def parseCCChatToConfirm(self, line):
lineLength = len(line)
avatarKey = line[1]
avatar = self.getVar(avatarKey)
toAvatarKey = line[2]
toAvatar = self.getVar(toAvatarKey)
localizerAvatarName = toAvatar.getName().capitalize()
toAvatarName = eval('TTLocalizer.' + localizerAvatarName)
if self.toon.getStyle().gender == 'm':
chatString = eval('TTLocalizer.' + line[3] % 'Mickey')
else:
chatString = eval('TTLocalizer.' + line[3] % 'Minnie')
chatString = chatString.replace('%s', toAvatarName)
quitButton, extraChatFlags, dialogueList = self.parseExtraChatArgs(line[4:])
return Func(avatar.setLocalPageChat, chatString, quitButton, extraChatFlags, dialogueList)
def parsePlaySfx(self, line):
if len(line) == 2:

View File

@ -131,9 +131,9 @@ class QuestPoster(DirectFrame):
def createNpcToonHead(self, toNpcId):
npcInfo = NPCToons.NPCToonDict[toNpcId]
dnaList = npcInfo[2]
gender = npcInfo[3]
eyelashes = npcInfo[3]
if dnaList == 'r':
dnaList = NPCToons.getRandomDNA(toNpcId, gender)
dnaList = NPCToons.getRandomDNA(toNpcId, eyelashes)
dna = ToonDNA.ToonDNA()
dna.newToonFromProperties(*dnaList)
head = ToonHead.ToonHead()

View File

@ -1,6 +1,5 @@
GiveAwardErrors = Enum('Success, WrongGender, NotGiftable, FullMailbox, FullAwardMailbox, AlreadyInMailbox, AlreadyInGiftQueue, AlreadyInOrderedQueue, AlreadyInCloset, AlreadyBeingWorn, AlreadyInAwardMailbox, AlreadyInThirtyMinuteQueue, AlreadyInMyPhrases, AlreadyKnowDoodleTraining, AlreadyRented, GenericAlreadyHaveError, UnknownError, UnknownToon, NonToon,')
GiveAwardErrors = Enum('Success, NotGiftable, FullMailbox, FullAwardMailbox, AlreadyInMailbox, AlreadyInGiftQueue, AlreadyInOrderedQueue, AlreadyInCloset, AlreadyBeingWorn, AlreadyInAwardMailbox, AlreadyInThirtyMinuteQueue, AlreadyInMyPhrases, AlreadyKnowDoodleTraining, AlreadyRented, GenericAlreadyHaveError, UnknownError, UnknownToon, NonToon,')
GiveAwardErrorStrings = {GiveAwardErrors.Success: 'success',
GiveAwardErrors.WrongGender: 'wrong gender',
GiveAwardErrors.NotGiftable: 'item is not giftable',
GiveAwardErrors.FullMailbox: 'mailbox is full',
GiveAwardErrors.FullAwardMailbox: 'award mailbox is full',

View File

@ -143,7 +143,7 @@ class DistributedNPCTailor(DistributedNPCToonBase):
if self.isLocalToon:
taskMgr.doMethodLater(3.0, self.popupPurchaseGUI, self.uniqueName('popupPurchaseGUI'))
print('-----------Starting tailor interaction-----------')
print('avid: %s, gender: %s' % (self.av.doId, self.av.style.gender))
print('avid: %s' % (self.av.doId))
print('current top = %s,%s,%s,%s and bot = %s,%s,' % (self.av.style.topTex,
self.av.style.topTexColor,
self.av.style.sleeveTex,
@ -157,7 +157,7 @@ class DistributedNPCTailor(DistributedNPCToonBase):
self.setChatAbsolute(TTLocalizer.STOREOWNER_GOODBYE, CFSpeech | CFTimeout)
if self.av and self.isLocalToon:
print('-----------ending tailor interaction-----------')
print('avid: %s, gender: %s' % (self.av.doId, self.av.style.gender))
print('avid: %s' % (self.av.doId))
print('current top = %s,%s,%s,%s and bot = %s,%s,' % (self.av.style.topTex,
self.av.style.topTexColor,
self.av.style.sleeveTex,

View File

@ -489,10 +489,8 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
changed = False
if self.isPlayerControlled():
allowedColors = []
if self.dna.gender == 'm':
allowedColors = ToonDNA.defaultBoyColorList + [26]
else:
allowedColors = ToonDNA.defaultGirlColorList + [26]
allowedColors = ToonDNA.defaultColorList + [26]
if self.dna.legColor not in allowedColors:
self.dna.legColor = allowedColors[0]
changed = True

View File

@ -208,9 +208,9 @@ class NPCFriendCard(DirectFrame):
def createNPCToonHead(self, NPCID, dimension = 0.5):
NPCInfo = NPCToons.NPCToonDict[NPCID]
dnaList = NPCInfo[2]
gender = NPCInfo[3]
eyelashes = NPCInfo[3]
if dnaList == 'r':
dnaList = NPCToons.getRandomDNA(NPCID, gender)
dnaList = NPCToons.getRandomDNA(NPCID, eyelashes)
dna = ToonDNA.ToonDNA()
dna.newToonFromProperties(*dnaList)
head = ToonHead.ToonHead()

View File

@ -63,9 +63,9 @@ TAILOR_COUNTDOWN_TIME = 300
RTDNAFile = '/RTDNAFile.txt'
saveDNA = False
def getRandomDNA(seed, gender):
def getRandomDNA(seed, eyelashes):
randomDNA = ToonDNA.ToonDNA()
randomDNA.newToonRandom(seed, gender, 1)
randomDNA.newToonRandom(seed, eyelashes, 1)
return randomDNA.asTuple()
@ -81,7 +81,7 @@ def createNPC(air, npcId, desc, zoneId, posIndex = 0, questCallback = None):
from . import DistributedNPCSpecialQuestGiverAI
from . import DistributedNPCFlippyInToonHallAI
from . import DistributedNPCScientistAI
canonicalZoneId, name, dnaType, gender, protected, type = desc
canonicalZoneId, name, dnaType, eyelashes, protected, type = desc
if type == NPC_REGULAR:
npc = DistributedNPCToonAI.DistributedNPCToonAI(air, npcId, questCallback=questCallback)
elif type == NPC_HQ:
@ -111,7 +111,7 @@ def createNPC(air, npcId, desc, zoneId, posIndex = 0, questCallback = None):
npc.setName(name)
dna = ToonDNA.ToonDNA()
if dnaType == 'r':
dnaList = getRandomDNA(npcId, gender)
dnaList = getRandomDNA(npcId, eyelashes)
else:
dnaList = dnaType
if saveDNA:
@ -169,14 +169,14 @@ def createLocalNPC(npcId):
if npcId not in NPCToonDict:
return None
desc = NPCToonDict[npcId]
canonicalZoneId, name, dnaType, gender, protected, type = desc
canonicalZoneId, name, dnaType, eyelashes, protected, type = desc
npc = Toon.Toon()
npc.setName(name)
npc.setPickable(0)
npc.setPlayerType(NametagGroup.CCNonPlayer)
dna = ToonDNA.ToonDNA()
if dnaType == 'r':
dnaList = getRandomDNA(npcId, gender)
dnaList = getRandomDNA(npcId, eyelashes)
else:
dnaList = dnaType
dna.newToonFromProperties(*dnaList)

View File

@ -10,11 +10,10 @@ class TailorClothesGUI(ClothesGUI.ClothesGUI):
def setupScrollInterface(self):
self.dna = self.toon.getStyle()
gender = self.dna.getGender()
if self.swapEvent != None:
self.tops = ToonDNA.getTops(gender, tailorId=self.tailorId)
self.bottoms = ToonDNA.getBottoms(gender, tailorId=self.tailorId)
self.gender = gender
self.tops = ToonDNA.getTops(tailorId=self.tailorId)
self.bottoms = ToonDNA.getBottoms(tailorId=self.tailorId)
self.topChoice = -1
self.bottomChoice = -1
self.setupButtons()

View File

@ -610,7 +610,7 @@ class Toon(Avatar.Avatar, ToonHead):
return
def updateToonDNA(self, newDNA, fForce = 0):
self.style.gender = newDNA.getGender()
self.style.eyelashes = newDNA.getEyelashes()
oldDNA = self.style
if fForce or newDNA.head != oldDNA.head:
self.swapToonHead(newDNA.head)

View File

@ -358,7 +358,6 @@ GirlShirts = [(0, 0),
(22, 0)]
=
def isValidBoyShirt(index):
for pair in BoyShirts:
@ -1348,7 +1347,7 @@ def getRandomGirlBottomAndColor(type):
return (style[0], random.choice(style[1]))
def getRandomizedTops(gender, tailorId = MAKE_A_TOON, generator = None):
def getRandomizedTops(tailorId = MAKE_A_TOON, generator = None):
if generator == None:
generator = random
collection = TailorCollections[tailorId]
@ -1367,7 +1366,7 @@ def getRandomizedTops(gender, tailorId = MAKE_A_TOON, generator = None):
return tops
def getRandomizedBottoms(gender, tailorId = MAKE_A_TOON, generator = None):
def getRandomizedBottoms(tailorId = MAKE_A_TOON, generator = None):
if generator == None:
generator = random
collection = TailorCollections[tailorId]
@ -1384,7 +1383,7 @@ def getRandomizedBottoms(gender, tailorId = MAKE_A_TOON, generator = None):
return bottoms
def getTops(gender, tailorId = MAKE_A_TOON):
def getTops(tailorId = MAKE_A_TOON):
collection = TailorCollections[tailorId][SHIRTS]
tops = []
for style in collection:
@ -1397,11 +1396,10 @@ def getTops(gender, tailorId = MAKE_A_TOON):
return tops
def getAllTops(gender):
def getAllTops():
tops = []
for style in list(ShirtStyles.keys()):
if gender == 'm':
if style[0] == 'g' or style[:3] == 'c_g':
if style[0] == 'g' or style[:3] == 'c_g':
continue
elif style[0] == 'b' or style[:3] == 'c_b':
continue
@ -1414,7 +1412,7 @@ def getAllTops(gender):
return tops
def getBottoms(gender, tailorId = MAKE_A_TOON):
def getBottoms(tailorId = MAKE_A_TOON):
collection = TailorCollections[tailorId][BOTTOMS]
bottoms = []
for style in collection:
@ -1424,7 +1422,7 @@ def getBottoms(gender, tailorId = MAKE_A_TOON):
return bottoms
def getAllBottoms(gender, output = 'both'):
def getAllBottoms(output = 'both'):
bottoms = []
for style in list(BottomStyles.keys()):
@ -2146,7 +2144,7 @@ class ToonDNA(AvatarDNA.AvatarDNA):
self.botTex = defn[0]
self.botTexColor = defn[1][colorIndex]
def newToonRandom(self, seed = None, eyelashes = 'm', npc = 0, stage = None):
def newToonRandom(self, seed = None, eyelashes = 0, npc = 0, stage = None):
if seed:
generator = random.Random()
generator.seed(seed)
@ -2157,7 +2155,7 @@ class ToonDNA(AvatarDNA.AvatarDNA):
'l',
'l',
'l'])
self.gender = gender
self.eyelashes = eyelashes
if not npc:
if stage == MAKE_A_TOON:
if not base.cr.isPaid():
@ -2270,8 +2268,10 @@ class ToonDNA(AvatarDNA.AvatarDNA):
else:
notify.error('unknown leg size: ', self.legs)
def getGender(self):
return self.gender
def getEyelashes(self):
return self.eyelashes
def getClothes(self):
if len(self.torso) == 1:

View File

@ -736,7 +736,7 @@ class ToonHead(Actor.Actor):
return reachedTarget
def setupEyelashes(self, style):
if style.getGender() == 'm':
if style.getEyelashes():
if self.__eyelashOpen:
self.__eyelashOpen.removeNode()
self.__eyelashOpen = None

View File

@ -129,7 +129,6 @@ NSnameResult = (0.09, 0.084, 0.084)
NSnameLabel = 0.1
NStypeNotification = 0.08
NScolorPrecede = True
MATenterGenderShop = 0.18
MATenterBodyShop = 0.18
MATenterColorShop = 0.18
MATenterClothesShop = 0.16