Coder's block.
From code:
# Morphological Characteristics (Shape of Limb/Body Part)
# [Predations, Biomes, Exclusions, Stat Mods, Descriptive Synonyms, % Weight Mod]
# Exclusions = Other morph. characteristics which should not be shared with this one. Ex. long & short
# grade_off = Excludes intensity gradient AND variable stat changes. Changes must be static!
limbdict = {}
limbdict['long'] = ['*','*',['short'],[('SPD',2),('AGI',1),('STR',-1),('DEF',-2)],['long','lengthy','protracted'],0]
limbdict['short'] = ['*','*',['long'],[('DEF',2),('STR',1),('AGI',-1),('SPD',-2)],['short','stubby','stumpy'],-5]
limbdict['thick'] = ['*','*',['thin','lithe'],[('END',2),('DEF',1),('SPD',-1),('AGI',-2)],['thick','heavy','dense','solid'],5]
limbdict['thin'] = ['*','*',['thick','bulky'],[('AGI',2),('SPD',1),('DEF',-1),('END',-2)],['thin','light','flimsy','reedy'],-10]
limbdict['many-jointed'] = ['*','*',['grade_off','stumpy'],[('AGI',8),('END',-4),('SPD',-4)],['multi-jointed','several-jointed','many-jointed'],0]
limbdict['muscular'] = ['*','*',['lithe'],[('STR',2),('DEF',1),('AGI',-1),('END',-2)],['brawny','muscular','burly'],5]
limbdict['lithe'] = ['*','*',['thick','bulky'],[('SPD',3),('STR',-2),('DEF',-1)],['sinewy','lithe','supple'],-5]
limbdict['bulky'] = ['*','*',['thin','lithe'],[('STR',3),('END',-2),('AGI',-1)],['bulky','massive','hefty','immense'],15]
limbdict['stumpy'] = ['*','*',['thin','lithe','many-jointed','grade_off'],[('DEF',10),('STR',6),('AGI',-10),('SPD',-6)],['stumpy','stocky','stout'],5]
tentdict = {}
tentdict['long'] = ['*','*',['short'],[('SPD',2),('AGI',1),('STR',-1),('DEF',-2)],['long','lengthy','protracted'],0]
tentdict['short'] = ['*','*',['long'],[('DEF',2),('STR',1),('AGI',-1),('SPD',-2)],['short','stubby','stumpy'],-5]
tentdict['thick'] = ['*','*',['thin','lithe'],[('END',2),('DEF',1),('SPD',-1),('AGI',-2)],['thick','heavy','dense','solid'],5]
tentdict['thin'] = ['*','*',['thick','bulky'],[('AGI',2),('SPD',1),('DEF',-1),('END',-2)],['thin','light','flimsy','reedy'],-10]
tentdict['muscular'] = ['*','*',['lithe'],[('STR',2),('DEF',1),('AGI',-1),('END',-2)],['brawny','muscular','burly'],5]
tentdict['lithe'] = ['*','*',['thick','bulky','muscular'],[('SPD',3),('STR',-2),('DEF',-1)],['sinewy','lithe','supple'],-5]
tentdict['bulky'] = ['*','*',['thin','lithe'],[('STR',3),('END',-2),('AGI',-1)],['bulky','massive','hefty','immense'],15]
tentdict['stumpy'] = ['*','*',['thin','lithe','grade_off'],[('DEF',3),('STR',2),('AGI',-3),('SPD',-2)],['stumpy','stocky','stout'],5]
tentdict['sucker-covered'] = ['*','*',['grade_off'],[('AGI',8),('SPD',-4)],['sucker-covered']]
digitdict = {}
digitdict['long'] = ['*','*',['short'],[('AGI',3),('STR',-1),('DEF',-2)],['long','lengthy','protracted'],0]
digitdict['short'] = ['*','*',['long'],[('DEF',2),('STR',1),('AGI',-1),('ATK',-2)],['short','stubby','stumpy'],-1]
digitdict['thick'] = ['*','*',['thin','lithe'],[('END',2),('DEF',1),('ATK',-1),('AGI',-2)],['thick','heavy','dense','solid'],1]
digitdict['thin'] = ['*','*',['thick','bulky'],[('AGI',3),('DEF',-1),('END',-2)],['thin','light','flimsy','reedy'],-1]
digitdict['many-jointed'] = ['*','*',['grade_off','stumpy'],[('AGI',8),('END',-4),('DEF',-4)],['multi-jointed','several-jointed','many-jointed'],0]
digitdict['muscular'] = ['*','*',['lithe','bony'],[('STR',2),('DEF',1),('AGI',-1),('END',-2)],['brawny','muscular','burly'],1]
digitdict['lithe'] = ['*','*',['thick','bulky','muscular','bony'],[('AGI',3),('STR',-2),('DEF',-1)],['sinewy','lithe','supple'],-1]
digitdict['bulky'] = ['*','*',['thin','lithe'],[('STR',3),('END',-2),('AGI',-1)],['bulky','massive','hefty','immense'],2]
digitdict['stumpy'] = ['*','*',['thin','lithe','many-jointed','grade_off'],[('DEF',10),('STR',6),('AGI',-10),('ATK',-6)],['stumpy','stocky','stout'],1]
digitdict['clawed'] = ['*',['Terrestrial','Subterranean','Amphibian'],['grade_off'],[('ATK',10),('AGI',-2)],['clawed','spurred'],1]
digitdict['taloned'] = ['*',['Aerial'],['grade_off'],[('ATK',10),('AGI',-2)],['taloned'],1]
digitdict['bony'] = ['*','*',['muscular','lithe'],[('END',2),('STR',-2)],['bony','gaunt','skeletal'],-1]
hoofdict = {}
hoofdict['long'] = ['*','*',['short'],[('AGI',3),('STR',-1),('DEF',-2)],['long','lengthy','protracted'],1]
hoofdict['short'] = ['*','*',['long'],[('DEF',2),('STR',1),('AGI',-1),('ATK',-2)],['short','stubby','stumpy'],-2]
hoofdict['thick'] = ['*','*',['thin'],[('END',2),('DEF',1),('ATK',-1),('AGI',-2)],['thick','heavy','dense','solid'],2]
hoofdict['thin'] = ['*','*',['thick'],[('AGI',3),('DEF',-1),('END',-2)],['thin','light','flimsy','reedy'],-2]
hoofdict['stumpy'] = ['*','*',['thin','grade_off'],[('DEF',10),('STR',6),('AGI',-10),('ATK',-6)],['stumpy','stocky','stout'],2]
hoofdict['cloven'] = ['*','*',['single-toed','grade_off'],[('SPD',10)],['cloven','two-toed'],0]
hoofdict['single-toed'] = ['*','*',['cloven','grade_off'],[('SPD',6)],['single-toed','three-toed','five-toed'],0]
Format of the entries follows the commented-out reference guide at the top. The entries that contain 'no_grade' are not given an intensity multiplier. Both the weight modifier and the stat modifiers are by percentage.
Asterisks in place of acceptable predation/sphere lists will be parsed as 'this morphological quality is a general trait available to any predation/biome'.
Anyhow, I am rather bogged down in this section. Mostly with trying to come up with more traits/morphological variety. This, obviously, is just a small slice of what's needed. Add on to that the fact that there are a lot of exotic and/or predation- or biome-specific features or traits, and the amount of content needed is a bit daunting. Nothing to do for it but to keep plodding on, I suppose.