エメラルドのタマゴ

void Printegg(unsigned seedx,unsigned parent[2][7],unsigned method,unsigned status[]){
	unsigned seed[11],heresta[3],herepar[2],seedx2;
	unsigned i,j,k,l,m;
	
	seed[0]=seedx;
	seedx2=seedx;
	for(i=0;i<11;i++){//判定用乱数列作成
		seed[i+1]=(seed[i]*0x41C64E6D+0x6073)&0xFFFFFFFF;
		seed[i]=seed[i]>>16;
	}
	for(j=0;j<2;j++){seedx2=(0xEEB9EB65*seedx2+0xA3561A1)&0xFFFFFFFF;}//Printstatu用に初期seedを2つさかのぼる
	Printstatus(seedx2,status,method);//基礎個体値
	if(method==1){k=0;}
	else{k=1;}
	heresta[0]=seed[3+k]%6;//遺伝ステ1
	heresta[1]=seed[4+k]%5+1;//遺伝ステ2
	heresta[2]=seed[5+k]%4+2;//遺伝ステ3
	if(heresta[2]==2){heresta[2]=1;}
	for(l=0;l<3;l++){herepar[l]=seed[6+k+l]%2;}//遺伝親決定
	for(m=0;m<3;m++){status[heresta[m]]=parent[herepar[m]][heresta[m]];}//基礎個体値に遺伝を上書き
}
void Printstatus(unsigned seedx,unsigned status[],unsigned method){
	unsigned seed[4];//0,1:PID 2,3:IVs
	unsigned chara0,chara1,iv1,iv2;
	unsigned a,b,c,d,i;

	seed[0]=seedx;
	for(i=0;i<5;i++){seed[i+1]=(seed[i]*0x41C64E6D+0x6073)&0xFFFFFFFF;}//seed列作成
	switch(method){
		case 1://そのまま使用 [PID] [PID] [IVs] [IVs] [xxx]
			break;
		case 2://2を消して詰める [PID] [PID] [xxx] [IVs] [IVs]→[PID] [PID] [IVs] [IVs] [xxx]
			seed[2]=seed[3];
			seed[3]=seed[4];
			break;
		case 3://1を消して詰める [PID] [xxx] [PID] [IVs] [IVs]→[PID] [PID] [IVs] [IVs] [xxx]
			seed[1]=seed[2];
			seed[2]=seed[3];
			seed[3]=seed[4];
			break;
		case 4://3を消して詰める [PID] [PID] [IVs] [xxx] [IVs]→[PID] [PID] [IVs] [IVs] [xxx]
			seed[3]=seed[4];
			break;
		default:
			break;
	}
	chara0=seed[0]>>16;
	chara1=seed[1]>>16;
	chara1=chara1<<16;
	status[6]=chara0+chara1;

	iv1=seed[2]>>16;
	status[0]=iv1%32;
	a=iv1>>5; status[1]=a%32;
	b=iv1>>10; status[2]=b%32;

	iv2=seed[3]>>16;
	status[3]=iv2%32;
	c=iv2>>5; status[4]=c%32;
	d=iv2>>10; status[5]=d%32;
}

http://d.hatena.ne.jp/ayuzak/20090110
HABとCDSの生成seedが連続の場合はmethod=1、1つ空く場合はmethod=4。