186 lines
3.5 KiB
Lua
186 lines
3.5 KiB
Lua
NumToColor = {
|
|
'White', 'Peach', 'Bright Red', 'Red', 'Maroon', 'Sienna', 'Brown', 'Tan',
|
|
'Coral', 'Orange', 'Yellow', 'Cream', 'Citrine', 'Lime', 'Sea Green',
|
|
'Green', 'Light Blue', 'Aqua', 'Blue', 'Periwinkle', 'Royal Blue',
|
|
'Slate Blue', 'Purple', 'Lavender', 'Pink', 'Plum', 'Black'
|
|
}
|
|
|
|
AnimalToSpecies = {
|
|
dog = 'Dog',
|
|
cat = 'Cat',
|
|
mouse = 'Mouse',
|
|
horse = 'Horse',
|
|
rabbit = 'Rabbit',
|
|
duck = 'Duck',
|
|
monkey = 'Monkey',
|
|
bear = 'Bear',
|
|
pig = 'Pig'
|
|
}
|
|
|
|
toonHeadTypes = {'dls',
|
|
'dss',
|
|
'dsl',
|
|
'dll',
|
|
'cls',
|
|
'css',
|
|
'csl',
|
|
'cll',
|
|
'hls',
|
|
'hss',
|
|
'hsl',
|
|
'hll',
|
|
'mls',
|
|
'mss',
|
|
'rls',
|
|
'rss',
|
|
'rsl',
|
|
'rll',
|
|
'fls',
|
|
'fss',
|
|
'fsl',
|
|
'fll',
|
|
'pls',
|
|
'pss',
|
|
'psl',
|
|
'pll',
|
|
'bls',
|
|
'bss',
|
|
'bsl',
|
|
'bll',
|
|
'sls',
|
|
'sss',
|
|
'ssl',
|
|
'sll'}
|
|
|
|
toonHeadTypeToAnimalName = {
|
|
d = 'dog',
|
|
c = 'cat',
|
|
m = 'mouse',
|
|
h = 'horse',
|
|
r = 'rabbit',
|
|
f = 'duck',
|
|
p = 'monkey',
|
|
b = 'bear',
|
|
s = 'pig'
|
|
}
|
|
|
|
-- DNA validation:
|
|
DNA_FIRST_CHAR = "t"
|
|
DNA_LENGTH = 15
|
|
|
|
DNA_MAX_HEAD_INDEX = 34
|
|
DNA_MAX_TORSO_INDEX = 9
|
|
DNA_MAX_LEG_INDEX = 3
|
|
|
|
DNA_MAX_SHIRTS = 151
|
|
DNA_MAX_CLOTHING_COLORS = 31
|
|
DNA_MAX_SLEEVES = 138
|
|
|
|
DNA_MAX_MALE_BOTTOMS = 58
|
|
DNA_MAX_FEMALE_BOTTOMS = 63
|
|
|
|
DNA_MAX_COLOR = 27
|
|
|
|
function isValidNetString(dnaString)
|
|
local validDna = true
|
|
|
|
local dg = datagram:new()
|
|
dg:addString(dnaString)
|
|
|
|
local _dgi = datagramiterator.new(dg)
|
|
_dgi:readUint16() -- length, unused
|
|
|
|
if _dgi:getRemainingSize() ~= DNA_LENGTH then
|
|
validDna = false
|
|
end
|
|
|
|
if _dgi:readFixedString(1) ~= DNA_FIRST_CHAR then
|
|
validDna = false
|
|
end
|
|
|
|
-- headIndex
|
|
local headIndex = _dgi:readUint8()
|
|
if headIndex >= DNA_MAX_HEAD_INDEX then
|
|
validDna = false
|
|
end
|
|
|
|
-- torsoIndex
|
|
if _dgi:readUint8() >= DNA_MAX_TORSO_INDEX then
|
|
validDna = false
|
|
end
|
|
|
|
-- legsIndex
|
|
if _dgi:readUint8() >= DNA_MAX_LEG_INDEX then
|
|
validDna = false
|
|
end
|
|
|
|
-- gender
|
|
local validForGender
|
|
|
|
if _dgi:readUint8() == 1 then
|
|
validForGender = DNA_MAX_MALE_BOTTOMS
|
|
else
|
|
validForGender = DNA_MAX_FEMALE_BOTTOMS
|
|
end
|
|
|
|
local topTex = _dgi:readUint8()
|
|
local topTexColor = _dgi:readUint8()
|
|
local sleeveTex = _dgi:readUint8()
|
|
local sleeveTexColor = _dgi:readUint8()
|
|
local botTex = _dgi:readUint8()
|
|
local botTexColor = _dgi:readUint8()
|
|
local armColor = _dgi:readUint8()
|
|
local gloveColor = _dgi:readUint8()
|
|
local legColor = _dgi:readUint8()
|
|
local headColor = _dgi:readUint8()
|
|
|
|
-- Shirts
|
|
if topTex >= DNA_MAX_SHIRTS then
|
|
validDna = false
|
|
end
|
|
|
|
-- ClothesColors
|
|
if topTexColor >= DNA_MAX_CLOTHING_COLORS then
|
|
validDna = false
|
|
end
|
|
|
|
-- Sleeves
|
|
if sleeveTex >= DNA_MAX_SLEEVES then
|
|
validDna = false
|
|
end
|
|
|
|
-- ClothesColors
|
|
if sleeveTexColor >= DNA_MAX_CLOTHING_COLORS then
|
|
validDna = false
|
|
end
|
|
|
|
if botTex >= validForGender then
|
|
validDna = false
|
|
end
|
|
|
|
-- ClothesColors
|
|
if botTexColor >= DNA_MAX_CLOTHING_COLORS then
|
|
validDna = false
|
|
end
|
|
|
|
-- allColorsList
|
|
if armColor >= DNA_MAX_COLOR then
|
|
validDna = false
|
|
end
|
|
|
|
if gloveColor ~= 0 then
|
|
validDna = false
|
|
end
|
|
|
|
if legColor >= DNA_MAX_COLOR then
|
|
validDna = false
|
|
end
|
|
|
|
if headColor >= DNA_MAX_COLOR then
|
|
validDna = false
|
|
end
|
|
|
|
local head = toonHeadTypes[headIndex + 1]
|
|
return validDna, {headColor + 1, toonHeadTypeToAnimalName[head:sub(1, 1)]}
|
|
end
|