def CreateVXPExpansionFromColor(name,author,outfile,shortname,color,uniqueid,progress):
	created_files=[]
	try:
				if name=='':
					raise SaveError('No name')
				if author=='':
					raise SaveError('No author')
				if shortname=='':
					raise SaveError('No shortname')
				try:
					r,g,b=color
					if r<0 or r>255:
						raise SaveError('R channel out of bounds!')
					if g<0 or g>255:
						raise SaveError('G channel out of bounds!')
					if b<0 or b>255:
						raise SaveError('B channel out of bounds!')
				except ValueError:
					raise SaveError('Bad color')
				if outfile=='':
					raise SaveError('No outfile')
				def SaveCFG(outzip):
					cfg='Name=%s\nAuthor=%s\nOriginal Author=%s\nType=Portable\nContent=Backgrounds\nDate=%i\nGenerator=rgb2vxp %s\n' % (name,author,author,int(time()),version)
					outzip.writestr(shortname+'.cfg',cfg)
					progress()
				def Save3CN(outzip):
					bkgd=lib3dmm.Quad('BKGD',uniqueid,2)
					bkgd.setData('\x01\x00\x03\x03\x0A\x5C\xF8\x77')
					bkgd.setString(name)
					bds=lib3dmm.Quad('BDS ',uniqueid)
					bds.setData('\x01\x00\x03\x03\x00\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x44\x4E\x53\x4D\xFF\x4F\x00\x00')
					cam=lib3dmm.Quad('CAM ',uniqueid)
					cam.setData('\x01\x00\x03\x03\x00\x00\x01\x00\x00\x00\x88\x13\xbd\x16\x5f\x4e\x4a\xb7\x5a\x00\x00\x00\x00\x00\x23\x13\x11\x00\x27\x18\x00\x00\x00\x00\x00\x00\x2c\x01\xff\xff\x94\xfd\xff\xff\xf4\xff\x00\x00\xc5\xff\xff\xff\xcc\xfe\x00\x00\x6e\x02\x00\x00\x27\x18\x00\x00\x6c\x28\xa9\x00\xcf\xda\x15\x00\x94\xa8\x17\x00\xc8\xa0\x38\x00\x00\x00\x00\x00\xfb\xdb\x1f\x00')
					mbmp=lib3dmm.Quad('MBMP',uniqueid)
					mbmp.setDataFromFile('code/templates/rgbtemplate.MBMP')
					zbmp=lib3dmm.Quad('ZBMP',uniqueid,4) # compressed
					zbmp.setDataFromFile('code/templates/rgbtemplate.ZBMP')

					gllt=lib3dmm.Quad('GLLT',uniqueid)
					gllt.setData('\x01\x00\x03\x03\x38\x00\x00\x00\x02\x00\x00\x00\x24\xce\x00\x00\x00\x00\x00\x00\xbd\x97\x00\x00\xc9\x44\x00\x00\x26\xe4\x00\x00\x8c\xa2\xff\xff\xc3\x78\xff\xff\x0e\x74\x00\x00\xba\xb7\x00\x00\x1a\xa2\x38\x00\x33\xf2\x9a\x00\x06\x34\x5a\x00\x00\x00\x01\x00\x01\x00\x00\x00\xdb\x11\xff\xff\x00\x00\x00\x00\x27\xa2\xff\xff\x3a\xe0\xff\xff\xda\xf0\x00\x00\xa0\x50\x00\x00\x4d\x58\x00\x00\xac\x56\x00\x00\xef\x1f\xff\xff\x19\x21\x65\x02\xf2\x30\x71\x01\x44\x8b\xaa\xfb\x00\x00\x01\x00\x01\x00\x00\x00')
					glcr=lib3dmm.Quad('GLCR',uniqueid)
					glcrdata=str(open('code/templates/rgb_template.GLCR','rb').read())
					glcrdata=glcrdata[0:772]+pack('<3B',b,g,r)+glcrdata[772+3:]
					glcr.setData(glcrdata)