To be honnest, I think that great part of the data can be thrown away. If you look at the actual data bytes after RLE, it is mostly just 8bits from "000000001111111100000000" string scrolling towards start or end. If you make a custom routine for this, you have to store only few bytes+car graphics anymore. I hope you understand, what I mean...
Most of the bytes in the data are the sprites that makes up the road. As you
said, they could probably be generated using a simple routine instead of data.
Btw, when does your version end?
I think this merged version has all the features from both versions. As you
see there is quite a lot of free space. After the change I did, there is no more
data which means that its easier to restart the game. Maybe we should add some highscores as well
1 DEFINTA-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE"' 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 KEYOFF:SCREEN1,3,0:FORI=0TO2:VPOKE8208+I,85:NEXT:LOCATE8,1:PRINT"PLEASE WAIT...":FORI=256TO991:O=VPEEK(I):VPOKEI,(OOR(O/2))/(2-(IAND4)/4):NEXT:FORB=0TO1:FORI=1TO212STEP3:Q=ASC(MID$(S$(B),I,1))-65:Y=VAL("&H"+MID$(S$(B),I+1,2)):FORA=ATOA+Q 4 VPOKE14336+A,Y:NEXT:NEXT:PUTSPRITE8+B,(80+64*B,159),V,6+B:NEXT:FORI=0TO11:FORH=0TO31:VPOKE6528+H+I*32,(I<8ORH0):M=(X>72)-(X<0):O=S:G=N/128:LOCATE0,1:GOSUB5:I=55930!/(25+S):SOUND9,-9*(S=0):SOUND1,I/256:PRINTUSING"SPEED:####mph RANK:###";S*10;G 8 SOUND0,IAND255:GOSUB5:L=X-E/3:N=N+9-S:E=NAND128:D=96-(NAND127):Y=D>0:D=D*D/96:GOSUB5:PUTSPRITE1,(115-(D<34)*((24-D)*(B-1)+(F-1)*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:T=T-1+(Z\20):Z=0:NEXT:SCREEN0:PRINT"Time:";TIME\60;"RANK:"G
I found out that the merge I did was a bit broken ... but here is an update
:
1 :DEFINTA-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 KEYOFF:SCREEN1,3,0:FORI=0TO2:VPOKE8208+I,85:NEXT:LOCATE8,1:PRINT"PLEASE WAIT...":FORI=256TO991:O=VPEEK(I):VPOKEI,(OOR(O/2))/(2-(IAND4)/4):NEXT:FORB=0TO1:FORI=1TO212STEP3:Q=ASC(MID$(S$(B),I,1))-65:Y=VAL("&H"+MID$(S$(B),I+1,2)):FORA=ATOA+Q 4 VPOKE14336+A,Y:NEXT:NEXT:PUTSPRITE8+B,(80+64*B,159),V,6+B:NEXT:FORI=0TO11:FORH=0TO31:VPOKE6528+H+I*32,(I<8ORH0):S=-S*(S>0):LOCATE0,1:GOSUB5:I=55930!/(25+S):SOUND9,-9*(S=0):SOUND1,I/256:PRINTUSING"SPEED:####mph RANK:###";S*10;N/128:SOUND0,IAND255:GOSUB5:L=X-E/3:N=N+9-S:E=NAND128:D=96-(NAND127):Y=D>0:D=D*D/96:GOSUB5 8 PUTSPRITE1,(115-(D<34)*((24-D)*(B-1)+(F-1)*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:NEXT:SCREEN0:PRINT"Time:";TIME\60;"RANK:"G
Sorry for spamming the poor forum with code updates
I found a couple of small bugs in the last version. I also added a
nice ending to the game. Feel free to change the ending if you like
This is probably my last post before my short vacation.
Happy racing
1 :DEFINTA-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 KEYOFF:SCREEN1,3,0:FORI=0TO2:VPOKE8208+I,85:NEXT:LOCATE8,1:PRINT"PLEASE WAIT...":FORI=256TO991:O=VPEEK(I):VPOKEI,(OOR(O/2))/(2-(IAND4)/4):NEXT:FORB=0TO1:FORI=1TO212STEP3:Q=ASC(MID$(S$(B),I,1))-65:Y=VAL("&H"+MID$(S$(B),I+1,2)):FORA=ATOA+Q 4 VPOKE14336+A,Y:NEXT:NEXT:PUTSPRITE8+B,(80+64*B,159),V,6+B:NEXT:FORI=0TO11:FORH=0TO31:VPOKE6528+H+I*32,(I<8ORH0):S=-S*(S>0):LOCATE0,1:GOSUB5:I=55930!/(25+S):SOUND9,-9*(S=0):SOUND1,I/256:PRINTUSING"SPEED:####mph RANK:###";S*10;N/128:SOUND0,IAND255:GOSUB5:L=X-E/3:N=N+9-S:E=NAND128:D=96-(NAND127):Y=D>0:D=D*D/96:GOSUB5' 2005 8 PUTSPRITE1,(115-(D<34)*((24-D)*(B-1)+(F-1)*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:NEXT:A=TIME\60:FORJ=0TO999:LOCATE6,4:PRINTMID$(" Game Over Time ="+STR$(A)+"s ",J\6MOD42+1,16):NEXT:SCREEN0' dvik and NYYRIKKI
I'm terrible sorry for posting yet another listing but I did some improvments to
reduce the flicker in the last version.
So once again, here is the code:
1 DEFINT A-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 KEYOFF:SCREEN1,3,0:FORI=0TO2:VPOKE8208+I,85:NEXT:LOCATE8,1:PRINT"PLEASE WAIT...":FORI=256TO991:O=VPEEK(I):VPOKEI,(OOR(O/2))/(2-(IAND4)/4):NEXT:FORB=0TO1:FORI=1TO212STEP3:Q=ASC(MID$(S$(B),I,1))-65:Y=VAL("&H"+MID$(S$(B),I+1,2)):FORA=ATOA+Q 4 VPOKE14336+A,Y:NEXT:NEXT:PUTSPRITE8+B,(80+64*B,159),V,6+B:NEXT:FORI=0TO11:FORH=0TO31:VPOKE6528+H+I*32,(I<8ORH0):S=-S*(S>0):LOCATE0,1:I=55930!/(25+S):SOUND9,-9*(S=0):SOUND1,I/256:GOSUB5:PRINTUSING"SPEED:####mph RANK:###";S*10;(N-75)/128:SOUND0,IAND255:L=X-E/3:N=N+9-S:E=NAND128:D=96-(NAND127):Y=D>0:D=D*D/96:GOSUB5' 8 PUTSPRITE1,(115-(D<34)*((24-D)*(B-1)+(F-1)*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:NEXT:A=TIME\60:FORJ=0TO999:LOCATE6,4:PRINTMID$(" Game Over Time ="+STR$(A)+"s ",J\6MOD42+1,16):NEXT:SCREEN0' dvik and NYYRIKKI
Man, there's still plenty of space left!
Compacting the data even more should indeed be possible! As long as the decode routine is short enough
The question is: do you still have inspiration to *do* something with that space?
By the way: doesn't the timer go wrong on 50Hz machines?
Just few stupid changes, that makes sound worse and handling of the car "more realistic" Still under development...
1 DEFINT A-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 KEYOFF:SCREEN1,3,0:FORI=0TO2:VPOKE8208+I,85:NEXT:LOCATE8,1:PRINT"PLEASE WAIT...":FORI=256TO991:O=VPEEK(I):VPOKEI,(OOR(O/2))/(2-(IAND4)/4):NEXT:FORB=0TO1:FORI=1TO212STEP3:Q=ASC(MID$(S$(B),I,1))-65:Y=VAL("&H"+MID$(S$(B),I+1,2)):FORA=ATOA+Q 4 VPOKE14336+A,Y:NEXT:NEXT:PUTSPRITE8+B,(80+64*B,159),V,6+B:NEXT:FORI=0TO11:FORH=0TO31:VPOKE6528+H+I*32,(I<8ORH0):X=X+5*M+U-(S*(B-1)\4):LOCATE1,1:SOUND9,V:SOUND1,83:GOSUB5:PRINTUSING"SPEED:####kmh RANK:###";S*10;(N-75)/128-70:SOUND0,255-S*14:L=X-E/3:N=N+9-S:E=NAND128:D=96-(NAND127):Y=D>0:D=D*D/96:GOSUB5 8 PUTSPRITE1,(115-(D<34)*((24-D)*(B-1)+(F-1)*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:NEXT:A=TIME\60:BEEP:A$=SPACE$(14):FORJ=0TO999:LOCATE6,4:PRINTMID$(A$+"Game Over Time ="+STR$(A)+"s"+A$,J\6MOD42+1,16):NEXT:SCREEN0' dvik and NYYRIKKI
Btw, when does your version end?
It was meant to end, when you are quite a near first position that's why it now starts from position 30 instead of 100
Maybe we should add some highscores as well
Maybe... I was also thinking something like Chase HQ type of ending, where camera stops and car drives away...
How about this one. It's not *really* obfuscated, just a bit hard to read
0 ' MANDEL.BAS -- by AuroraMSX -- MSX2 and up -- for MSX.org's IOMBCC 2005 1 DEFINTA-G:DEFSTRH:DEFSNGI-Z:DIM A[8],AX[8],BX[8],AY[8],BY[8]:COLOR15,0,0:SCREEN7:FORA=1TO15:READB,C,D:COLOR=(A,B,C,D):NEXT:AW=512:AH=212:KX=-1.5:KY=-.8:LX=1.25:LY=.8:FORF2=0TO1STEP0:AX[0]=0:AY[0]=0:BX[0]=AW:BY[0]=AH:F=0:G=0:CLS:GOSUB4:'A 2 A=AW/4:B=AH/4:FORF=0TO1STEP0:LINE(A,B)-(A+AW/2-1,B+AH/2-1),15,B,XOR:G=STRIG(0):IFG<0THENLX=LX-KX:LY=LY-KY:KX=KX+(A*LX)/AW:KY=KY+(B*LY)/AH:LX=KX+LX/2:LY=KY+LY/2:NEXTF2:DATA7,7,7,7,7,6,7,7,5,7,7,4,7,7,3,7,7,2,7,7,1,7,7,0,7,6,0,7,5,0,7,4:'u 3 G=STICK(0):LINE(A,B)-(A+AW/2-1,B+AH/2-1),15,B,XOR:IFG=0THENNEXTFELSEA=A-(G=7)*(A>0)*(AW/4)+(G=3)*(A<AW/2)*(AW/4):B=B-(G=1)*(B>0)*(AH/4)+(G=5)*(BPatience is silver, 7MHz is gold, fast emu is gold-plated latinum
Quick manual: [ESC] to stop rendering, then use arrows to select new focus, [SPACE] to restart rendering. [CTRL]-[STOP] to quit.[edit]Updates-R-us! A slight formatting improvement[/edit]
I'd rather have seen it formatted like this: (written by Martijn Leisink)
float c, C ,x,X,k,K=0.5, _= 2;char o,O,Q,l;i() {k=x+=_;X=C;o=96;while ( 4>(c=k*k)+X*X&&--o){k= 2*k*X+x; X=X*X+C-c;}}main(){char I[99]="\040,m,`;b|~P#T`:dl\033[H"; 98[I]=0;while(3>((_*=K<0.2?1.1:1)>1e-3?_*= 0.970:(K-=_)))for(Q=-11;Q<12;){for (O=-39;O <40;x=_*2*Q-(_-1)/2*K,C = (K/2*K-1.3)*(1-_)+O*_, i(),l=o&3,i(),I[O+++58 ]=I[l*4+o%4]);puts ( I+(9<-++Q?16: 19 )) ;};};