// -*- C++ -*- //Chrisoft Bullet Lab Remix HGE //Score Recording Implementations //"Copyleft" Chrisoft 2013 struct TRecord { long long score; int len,rescol,scoll,clrusg; int af_int,af_fric; char name[16]; }ERec[10],NRec[10],ExRec[10],FPMRec[10]; unsigned int Ecnt,Ncnt,Excnt,FPMcnt; unsigned int header,seprt; char newname[16]; int newlen,tbframebrk; unsigned int Getuint() { unsigned int c1,c2,c3,c4,res; c1=c2=c3=c4=0; scanf("%c%c%c%c",&c1,&c2,&c3,&c4); res=(c1<<24)+(c2<<16)+(c3<<8)+c4; return res; } int Getint() { return (int)Getuint(); } long long Getll() { long long c1,c2,c3,c4,c5,c6,c7,c8,res; c1=c2=c3=c4=c5=c6=c7=c8=0; scanf("%c%c%c%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8); res=(c1<<56)+(c2<<48)+(c3<<40)+(c4<<32)+(c5<<24)+(c6<<16)+(c7<<8)+c8; return res; } void Putuint(unsigned int a) { unsigned int c1,c2,c3,c4; c1=a&0xFF000000;c2=a&0x00FF0000; c3=a&0x0000FF00;c4=a&0x000000FF; printf("%c%c%c%c",c1,c2,c3,c4); } void Putint(int a) { Putuint((unsigned int)a); } void Putll(long long a) { int c1,c2,c3,c4,c5,c6,c7,c8; c1=a&0xFF00000000000000; c2=a&0x00FF000000000000; c3=a&0x0000FF0000000000; c4=a&0x000000FF00000000; c5=a&0x00000000FF000000; c6=a&0x0000000000FF0000; c7=a&0x000000000000FF00; c8=a&0x00000000000000FF; printf("%c%c%c%c%c%c%c%c",c1,c2,c3,c4,c5,c6,c7,c8); } TRecord GetTRecord() { TRecord res; res.len=Getint(); memset(res.name,0,sizeof(res.name)); for (int i=0;iscore)return -1; if (Ecnt<5&&ERec[Ecnt].score>score)return Ecnt+1; return i; break; case 1: for (i=1;i<=Ncnt;++i) if (NRec[i].scorescore)return -1; if (Ncnt<5&&NRec[Ncnt].score>score)return Ncnt+1; return i; break; case 2: for (i=1;i<=Excnt;++i) if (ExRec[i].scorescore)return -1; if (Excnt<5&&ExRec[Ncnt].score>score)return Excnt+1; return i; break; case 3: for (i=1;i<=FPMcnt;++i) if (FPMRec[i].scorescore)return -1; if (FPMcnt<5&&FPMRec[Ncnt].score>score)return FPMcnt+1; return i; break; } } void Score_Write() { freopen("score.cfg","w",stdout); Putuint(0x3b424c53u); Putuint(0xd1ffa0c0u); Putint(Ecnt); for (int i=1;i<=Ecnt;++i) PutTRecord(ERec[i]); Putuint(0xd1ffa0c1u); Putint(Ncnt); for (int i=1;i<=Ncnt;++i) PutTRecord(NRec[i]); Putuint(0xd1ffa0c2u); Putint(Excnt); for (int i=1;i<=Excnt;++i) PutTRecord(ExRec[i]); Putuint(0xd1ffa0c3u); Putint(FPMcnt); for (int i=1;i<=FPMcnt;++i) PutTRecord(FPMRec[i]); fclose(stdout); } void Score_Initailize() { freopen("score.cfg","w",stdout); printf(";BLS"); printf("%c%c%c%c",0xd1,0xff,0xa0,0xc0);printf("%c%c%c%c",0,0,0,0); printf("%c%c%c%c",0xd1,0xff,0xa0,0xc1);printf("%c%c%c%c",0,0,0,0); printf("%c%c%c%c",0xd1,0xff,0xa0,0xc2);printf("%c%c%c%c",0,0,0,0); printf("%c%c%c%c",0xd1,0xff,0xa0,0xc3);printf("%c%c%c%c",0,0,0,0); fclose(stdout); } void InsertHighScore() { int pos=CheckHighScore(); switch (mode) { case 4: if (pos<=Ecnt) for (int i=5;i>pos;--i) ERec[i]=ERec[i-1]; else ++Ecnt; if (Ecnt<5)++Ecnt; ERec[pos].score=score; ERec[pos].len=newlen; memcpy(ERec[pos].name,newname,sizeof(newname)); ERec[pos].clrusg=clrusg; ERec[pos].rescol=restarts;ERec[pos].scoll=semicoll; ERec[pos].af_int=(int)averfps; ERec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10; break; case 1: if (pos<=Ncnt) for (int i=5;i>pos;--i) NRec[i]=NRec[i-1]; if (Ncnt<5)++Ncnt; NRec[pos].score=score; NRec[pos].len=newlen; memcpy(NRec[pos].name,newname,sizeof(newname)); NRec[pos].clrusg=clrusg; NRec[pos].rescol=restarts;NRec[pos].scoll=semicoll; NRec[pos].af_int=(int)averfps; NRec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10; break; case 2: if (pos<=Excnt) for (int i=5;i>pos;--i) ExRec[i]=ExRec[i-1]; if (Excnt<5)++Excnt; ExRec[pos].score=score; ExRec[pos].len=newlen; memcpy(ExRec[pos].name,newname,sizeof(newname)); ExRec[pos].clrusg=clrusg; ExRec[pos].rescol=restarts;ExRec[pos].scoll=semicoll; ExRec[pos].af_int=(int)averfps; ExRec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10; break; case 3: if (pos<=FPMcnt) for (int i=5;i>pos;--i) FPMRec[i]=FPMRec[i-1]; if (FPMcnt<5)++FPMcnt; FPMRec[pos].score=score; FPMRec[pos].len=newlen; memcpy(FPMRec[pos].name,newname,sizeof(newname)); FPMRec[pos].clrusg=clrusg; FPMRec[pos].rescol=coll;FPMRec[pos].scoll=semicoll; FPMRec[pos].af_int=(int)averfps; FPMRec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10; break; } Score_Write(); }