Example #1
0
//static
void FaceGenManager::BlitFaceIm(SDLSurfacePtr &faceim, Sint8 &genderOut, const Uint32 flags, const Uint32 seed)
{
	Random rand(seed);

	const int species = (m_species.size()==1) ? 0 : rand.Int32(0,m_species.size()-1);
	const int race = rand.Int32(0,NumRaces(species)-1);

	int gender;
	switch (flags & GENDER_MASK) {
		case GENDER_MALE:
			gender = 0;
			break;
		case GENDER_FEMALE:
			gender = 1;
			break;
		case GENDER_RAND:
		default:
			gender = rand.Int32(0,NumGenders(species)-1);
			break;
	}
	genderOut = gender;

	const int head  = rand.Int32(0,NumHeads(species,race)-1);
	const int eyes  = rand.Int32(0,NumEyes(species,race)-1);
	const int nose  = rand.Int32(0,NumNoses(species,race)-1);
	const int mouth = rand.Int32(0,NumMouths(species,race)-1);
	const int hair  = rand.Int32(0,NumHairstyles(species,race)-1);

	const int clothes     = rand.Int32(0,NumClothes(species)-1);
	const int armour      = rand.Int32(0,NumArmour(species)-1);
	const int accessories = rand.Int32(0,NumAccessories(species)-1);
	const int background  = rand.Int32(0,NumBackground(species)-1);

	FaceGenManager::TQueryResult res;
	FaceGenManager::GetImagesForCharacter(res, species, race, gender, head, eyes,
		nose, mouth, hair, clothes, armour, accessories, background);

	_blit_image(faceim, res.mBackground, 0, 0);
	_blit_image(faceim, res.mHead, 0, 0);

	if (!(flags & ARMOUR)) {
		_blit_image(faceim, res.mClothes, 0, 135);
	}

	_blit_image(faceim, res.mEyes, 0, 41);
	_blit_image(faceim, res.mNose, 1, 89);
	_blit_image(faceim, res.mMouth, 0, 155);

	if (!(flags & ARMOUR)) {
		if (rand.Int32(0,1)>0)
			_blit_image(faceim, res.mAccessories, 0, 0);

		_blit_image(faceim, res.mHairstyle, 0, 0);
	}
	else {
		_blit_image(faceim, res.mArmour, 0, 0);
	}
}
Example #2
0
void FaceParts::BuildFaceImage(SDL_Surface *faceIm, const FaceDescriptor &face, bool armoured) {
	const Uint32 selector = _make_selector(face.species, face.race, face.gender);

	_blit_image(faceIm, s_partdb->background_general.Get(), 0, 0);
	_blit_image(faceIm, _get_part(s_partdb->heads, selector, face.head), 0, 0);
	if (!armoured) {
		_blit_image(faceIm, _get_part(s_partdb->clothes, selector, face.clothes), 0, 135);
	}
	_blit_image(faceIm, _get_part(s_partdb->eyes, selector, face.eyes), 0, 41);
	_blit_image(faceIm, _get_part(s_partdb->noses, selector, face.nose), 1, 89);
	_blit_image(faceIm, _get_part(s_partdb->mouths, selector, face.mouth), 0, 155);
	if (!armoured) {
		_blit_image(faceIm, _get_part(s_partdb->accessories, selector, face.accessories), 0, 0);
		_blit_image(faceIm, _get_part(s_partdb->hairstyles, selector, face.hairstyle), 0, 0);
	} else {
		_blit_image(faceIm, _get_part(s_partdb->armour, selector, face.armour), 0, 0);
	}
}
Example #3
0
Face::Face(Context *context, Uint32 flags, Uint32 seed) : Single(context)
{
	if (!seed) seed = time(0);
	MTRand rand(seed);

	m_flags = flags;
	m_seed = seed;

	int race = rand.Int32(0,2);

	int gender;
	switch (flags & GENDER_MASK) {
		case MALE:
			gender = 0;
			break;
		case FEMALE:
			gender = 1;
			break;
		case RAND:
		default:
			gender = rand.Int32(0,1);
			break;
	}

	int head  = rand.Int32(0,MAX_HEAD);
	int eyes  = rand.Int32(0,MAX_EYES);
	int nose  = rand.Int32(0,MAX_NOSE);
	int mouth = rand.Int32(0,MAX_MOUTH);
	int hair  = rand.Int32(0,MAX_HAIR);

	int clothes = rand.Int32(0,MAX_CLOTHES);

	int armour = rand.Int32(0,MAX_ARMOUR);

	int accessories = rand.Int32(0,MAX_ACCESSORIES);

	int background = rand.Int32(0,MAX_BACKGROUND);

	char filename[1024];

	SDLSurfacePtr faceim = SDLSurfacePtr::WrapNew(SDL_CreateRGBSurface(SDL_SWSURFACE, FACE_WIDTH, FACE_HEIGHT, 24, 0xff, 0xff00, 0xff0000, 0));

	snprintf(filename, sizeof(filename), "facegen/backgrounds/background_%d.png", background);
	_blit_image(faceim, filename, 0, 0);

	snprintf(filename, sizeof(filename), "facegen/race_%d/head/head_%d_%d.png", race, gender, head);
	_blit_image(faceim, filename, 0, 0);

	if (!(flags & ARMOUR)) {
		snprintf(filename, sizeof(filename), "facegen/clothes/cloth_%d_%d.png", gender, clothes);
		_blit_image(faceim, filename, 0, 135);
	}

	snprintf(filename, sizeof(filename), "facegen/race_%d/eyes/eyes_%d_%d.png", race, gender, eyes);
	_blit_image(faceim, filename, 0, 41);

	snprintf(filename, sizeof(filename), "facegen/race_%d/nose/nose_%d_%d.png", race, gender, nose);
	_blit_image(faceim, filename, 1, 89);

	snprintf(filename, sizeof(filename), "facegen/race_%d/mouth/mouth_%d_%d.png", race, gender, mouth);
	_blit_image(faceim, filename, 0, 155);

	if (!(flags & ARMOUR)) {
		snprintf(filename, sizeof(filename), "facegen/accessories/acc_%d.png", accessories);
		if (rand.Int32(0,1)>0)	_blit_image(faceim, filename, 0, 0);

		snprintf(filename, sizeof(filename), "facegen/race_%d/hair/hair_%d_%d.png", race, gender, hair);
		_blit_image(faceim, filename, 0, 0);
	}
	else {
		snprintf(filename, sizeof(filename), "facegen/clothes/armour_%d.png", armour);
		_blit_image(faceim, filename, 0, 0);
	}

	m_texture.Reset(Graphics::TextureBuilder(faceim, Graphics::LINEAR_CLAMP, true, true).CreateTexture(GetContext()->GetRenderer()));

	if (!s_material) {
		Graphics::MaterialDescriptor matDesc;
		matDesc.textures = 1;
		s_material.Reset(GetContext()->GetRenderer()->CreateMaterial(matDesc));
	}
}
Example #4
0
static void _blit_image(const SDLSurfacePtr &s, const char *filename, int xoff, int yoff)
{
	_blit_image(s.Get(), filename, xoff, yoff);
}
Example #5
0
FaceVideoLink::FaceVideoLink(float w, float h, Uint32 flags, Uint32 seed,
	const std::string &name, const std::string &title) : VideoLink(w, h)
{
	m_created = SDL_GetTicks();
	m_message = new Gui::ToolTip(Lang::VID_LINK_ESTABLISHED);

	if (!seed) seed = time(NULL);
	MTRand rand(seed);

	m_flags = flags;
	m_seed = seed;

	int race = rand.Int32(0,2);

	int gender;
	switch (flags & GENDER_MASK) {
		case GENDER_MALE:
			gender = 0;
			break;
		case GENDER_FEMALE:
			gender = 1;
			break;
		case GENDER_RAND:
		default:
			gender = rand.Int32(0,1);
			break;
	}

	std::string charname = name;
	if (charname.empty())
		charname = Pi::luaNameGen->FullName((gender != 0), rand);

	m_characterInfo = new CharacterInfoText(w * 0.8f, h * 0.15f, charname, title);

	int head  = rand.Int32(0,MAX_HEAD);
	int eyes  = rand.Int32(0,MAX_EYES);
	int nose  = rand.Int32(0,MAX_NOSE);
	int mouth = rand.Int32(0,MAX_MOUTH);
	int hair  = rand.Int32(0,MAX_HAIR);

	int clothes = rand.Int32(0,MAX_CLOTHES);

	int armour = rand.Int32(0,MAX_ARMOUR);

	int accessories = rand.Int32(0,MAX_ACCESSORIES);

	int background = rand.Int32(0,MAX_BACKGROUND);

	char filename[1024];

	SDL_Surface *s = SDL_CreateRGBSurface(SDL_SWSURFACE, ceil_pow2(FACE_WIDTH), ceil_pow2(FACE_HEIGHT), 32, 0xff, 0xff00, 0xff0000, 0xff000000);

	snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/backgrounds/background_%d.png", background);
	//printf("%s\n", filename);
	_blit_image(s, filename, 0, 0);

	snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/race_%d/head/head_%d_%d.png", race, gender, head);
	//printf("%s\n", filename);
	_blit_image(s, filename, 0, 0);

	if (!(flags & ARMOUR)) {
		snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/clothes/cloth_%d_%d.png", gender, clothes);
		//printf("%s\n", filename);
		_blit_image(s, filename, 0, 135);
	}

	snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/race_%d/eyes/eyes_%d_%d.png", race, gender, eyes);
	//printf("%s\n", filename);
	_blit_image(s, filename, 0, 41);

	snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/race_%d/nose/nose_%d_%d.png", race, gender, nose);
	//printf("%s\n", filename);
	_blit_image(s, filename, 1, 89);

	snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/race_%d/mouth/mouth_%d_%d.png", race, gender, mouth);
	//printf("%s\n", filename);
	_blit_image(s, filename, 0, 155);

	if (!(flags & ARMOUR)) {
		snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/accessories/acc_%d.png", accessories);
		//printf("%s\n", filename);
		if (rand.Int32(0,1)>0)	_blit_image(s, filename, 0, 0);

		snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/race_%d/hair/hair_%d_%d.png", race, gender, hair);
		//printf("%s\n", filename);
		_blit_image(s, filename, 0, 0);
	}
	else {
		snprintf(filename, sizeof(filename), PIONEER_DATA_DIR "/facegen/clothes/armour_%d.png", armour);
		_blit_image(s, filename, 0, 0);
	}

	glEnable(GL_TEXTURE_2D);
	glGenTextures(1, &m_tex);
	glBindTexture(GL_TEXTURE_2D, m_tex);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, s->w, s->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, s->pixels);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glDisable(GL_TEXTURE_2D);

	SDL_FreeSurface(s);
}