Wow, A lot of new nice entries since last time I checked I especially like the brainfuck interpreter but the other ones are really impressive as well.
I made some optimizations to the Rally game (mainly interesting for NYYRIKKI I think) I managed to shrink the program with another 100 characters so now there is plenty of space for a nice Chase HQ type ending. Here's the update:
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:LOCATE9,1:PRINT"PLEASE WAIT!":FORI=256TO991:VPOKE7952+I,85:O=VPEEK(I):VPOKEI,(OORO/2)/(2-(IAND4)/4):NEXT:FORW=0TO1:FORI=1TO212STEP3:Q=ASC(MID$(S$(W),I,1))-65:Y=VAL("&H"+MID$(S$(W),I+1,2)):N=14336:FORA=ATOA+Q:VPOKEA+N,Y 4 NEXT:NEXT:PUTSPRITE8+W,(80+64*W,159),V,6+W:NEXT:FORI=0TO11:FORH=0TO31:VPOKE6528+H+I*32,(I<8ORH72)-(X<0):U=STICK(0):GOSUB5:S=S-(S<18ANDSTRIG(0))*2-1:S=S*((X-15-E/3)\15<>0ORD<73)*(M=0ANDS>0):GOSUB5:T=T+S-1:X=X+5*(M+(U=7)-(U=3))-S*B\4:LOCATE1,1:SOUND9,V:SOUND1,83:SOUND0,255-S*V:F=B:N=N+9-S:GOSUB5:IFC 0:D=D*D/96:GOSUB5:PUTSPRITE1,(115-(D<34)*((24-D)*B+F*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:NEXT:BEEP:A=TIME\60:A$=SPACE$(V):FORJ=0TO999:LOCATE6,4 8 PRINTMID$(A$+"Game Over Time ="+STR$(A)+"s"+A$,J\6MOD42+1,16):NEXT:SCREEN0' IOMBCC 2005 by dvik and NYYRIKKI
w00t!
I just did some optimizations to the Bomberman Battle game, now everything is squeezed into 4 BASIC lines. The bug mentioned by Vampier has been fixed (I already did before, but sometimes I accidently press F12 in blueMSX ), plus I also disabled the keyclick.
1 'Bomberman Battle IOMBCC 2 'todo: map, grahics 3 ' 32=space,33=explosion,34=brick,35=player,36=bomb,37=wall,36+32 4 DEFINTA-Z:ONERRORGOTO7:SCREEN1,,0:WIDTH18:KEYOFF:LOCATE,5:L$=STRING$(18,"%"):C (0)=6410:C(1)=6482:S$=CHR$(37)+CHR$(34)+SPACE$(15)+CHR$(37):S$=S$+S$:PRINTL$;S$; S$;S$;S$;L$:FORP=0TO3:H=0:M=H:S=M:P=X:D=H:A=STICK(P):GOSUB5:VPOKEC(P),35:NEXT 5 N=C(P)-(A=3)+(A=7)+((A=1)-(A=5))*32:IFVPEEK(N)<34ANDC(P)<>NTHENVPOKEC(P),32:C( P)=N:GOSUB8ELSEGOSUB8 7 IFHTHENV=B(P)+S:S=S*2:R=VPEEK(V):IFR<>37ANDM=0THENVPOKEV,G:RESUMENEXTELSEM=1:I FR=34THENVPOKEV,32:RESUMENEXTELSERESUMENEXTELSEW=E(P):D=1:IFWTHENW=W-1:E(P)=W:IF W=11ORW=0THENG=33+(W=0):H=1:X:S=-1:X:X:M=0:S=1:X:X:M=0:S=-32:X:X:M=0:S=32:X:X 8 IFDTHENX=1-P:IFVPEEK(C(P))=33THENY(X)=Y(X)+1:LOCATEX*10,2:PRINTY(X):RETURNELSE RETURNELSEIFSTRIG(P)AND(T(P)+E(P))=0THENT(P)=25:B(P)=C(P):RETURNELSEIFT(P)>0THEN VPOKEB(P),36+32*(T(P)AND1):T(P)=T(P)-1:E(P)=-12*(T(P)=0):RETURNELSERETURN
There's still enough room to implement a nice map (or maybe multiple maps) and some graphics.
This is BASIC, man. Of course it's dead slow!
If you don't have all the time in the world, here is raped version, that works on X-BASIC as well...
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):NEXTA: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)*(B
Ok, Now I have something that is working pretty well. I was able to optimize
the Rally game a bit more and make it run smother and I made it a bit harder
to play. I also added a nice ending.
I think this one could be the final version unless NYYRIKKI or someone else
finds something more cool to add or there are some bugs I haven't seen yet.
1 DEFINTA-Z:V=014:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 J=S-J*(J<96-S):H=J\16:FORW=0TO2:VPOKE8208+W,P(H+W):NEXT:IFTTHENRESUMENEXTELSEKEYOFF:SCREEN1,3,0:LOCATE8,1:PRINT"PLEASE WAIT!":FORI=256TO1023:VPOKE7952+I,85:O=VPEEK(I):VPOKEI,(OORO/2)/(2-(IAND4)\4):NEXT:TIME=--0:FORW=0TO1:FORO=1TO212STEP3 4 Q=ASC(MID$(S$(W),O,1))-65:Y=VAL("&H"+MID$(S$(W),O+1,2)):N=14336:FORA=ATOA+Q:VPOKEA+N,Y:NEXT:NEXT:PUTSPRITE8+W,(80+64*W,159),V,6+W:NEXT:ONERRORGOTO3:FORO=1TO12:FORH=0TO31:VPOKE6496+H+O*32,(O<9ORH0:D=D*D/96:PUTSPRITE1,(115-(D<34)*((24-D)*B+F*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:I:U=STICK(0):PRINTUSING"SPEED:####kmh RANK:###";S*10;(N-65)/128-82:NEXT:A$=SPACE$(V):A=TIME\60:PUTSPRITE1,,0:FORN=0TO99 8 S=16:D=88-3*N:Y=D>0:U=Y*(N\6-V):SOUND8,U:SOUND9,U:PUTSPRITE0,(116-(D<58)*((24-D*D/96)*B+F*10)+(X-36)*D/126,-Y*(98+D)-31),1,16+Y*D/24:LOCATE6,4:PRINTMID$(A$+"Game Over Time ="+STR$(TIME\60)+"s"+A$,N\2MOD42+1,16):IOMBCC 2005:NEXT:SCREENY
That end demo was looking so great, that I even extended the lenght a bit! The on error goto idea was also brilliant! How ever there was a tiny bug in the time thing:
1 DEFINTA-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 J=S-J*(J<96-S):H=J\16:FORW=0TO2:VPOKE8208+W,P(H+W):NEXT:IFTTHENRESUMENEXTELSEKEYOFF:SCREEN1,3,0:LOCATE8,1:PRINT"PLEASE WAIT!":FORI=256TO1023:VPOKE7952+I,85:O=VPEEK(I):VPOKEI,(OORO/2)/(2-(IAND4)\4):NEXT:TIME=--0:FORW=0TO1:FORO=1TO212STEP3 4 Q=ASC(MID$(S$(W),O,1))-65:Y=VAL("&H"+MID$(S$(W),O+1,2)):N=14336:FORA=ATOA+Q:VPOKEA+N,Y:NEXT:NEXT:PUTSPRITE8+W,(80+64*W,159),V,6+W:NEXT:ONERRORGOTO3:FORO=1TO12:FORH=0TO31:VPOKE6496+H+O*32,(O<9ORH0:D=D*D/96:PUTSPRITE1,(115-(D<34)*((24-D)*B+F*10)+(E-64)*D/225,-Y*(98+D)-31),6,16-D/24:I:U=STICK(0):PRINTUSING"SPEED:###kmh RANK:###";S*10;(N-65)/128-82:NEXT:A$=SPACE$(V):A=TIME\60:PUTSPRITE1,,0:FORN=0TO244 8 S=16:D=88-3*N:Y=D>0:U=Y*(N\6-V):SOUND8,U:SOUND9,U:PUTSPRITE0,(116-(D<58)*((24-D*D/96)*B+F*10)+(X-36)*D/126,-Y*(98+D)-31),1,16+Y*D/24:LOCATE6,4:PRINTMID$(A$+"Game Over Time ="+STR$(A)+"s"+A$,N\2MOD42+1,15):IOMBCC 2005:NEXT:SCREENY
As Manuel already pointed out the time is still going wrong even after the fix in 50Hz machines. To fix that, we should make a=time\(60-(peek(43)\128)*10) to fit in there... I'll try to experiment with the sprite data, if I'll get enough time from somewhere, but I think, that it is starting to get quite a ready.
Holy crap, this is crazy. turboR owners: just look at that blazing speed on R800 ^_^
BASIC slow? PAH!
I did some speed improvments to speed it up a little. It may need some fine tuning though (I don't really think it was needed on TR machines though ).
I'll also try to find space to get the 50/60Hz switch in.
1 DEFINTA-Z:V=14:S$(0)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 J=S-J*(J<96-S):H=J\16:FORW=0TO2:VPOKE8208+W,P(H+W):NEXT:IFTTHENRESUMENEXTELSEKEYOFF:SCREEN1,3,0:LOCATE8,1:PRINT"PLEASE WAIT!":FORI=256TO1023:VPOKE7952+I,85:O=VPEEK(I):VPOKEI,(OORO\2)\(2-(IAND4)\4):NEXT:TIME=--0:FORW=0TO1:FORO=1TO212STEP3 4 Q=ASC(MID$(S$(W),O,1))-65:Y=VAL("&H"+MID$(S$(W),O+1,2)):N=14336:FORA=ATOA+Q:VPOKEA+N,Y:NEXT:NEXT:PUTSPRITE8+W,(80+64*W,159),V,6+W:NEXT:ONERRORGOTO3:FORO=1TO12:FORH=0TO31:VPOKE6496+H+O*32,(O<9ORH0:D=D*D\96:PUTSPRITE1,(115-(D<34)*((24-D)*B+F*10)+(E-64)*D\225,-Y*(98+D)-31),6,15-D\24:I:U=STICK(0):PRINTUSING"SPEED:###kmh RANK:###";S*10;(N-65)\128-82:NEXT:A$=SPACE$(V):A=TIME\60:PUTSPRITE1,,0:FORN=0TO244 8 S=16:D=88-3*N:Y=D>0:U=Y*(N\6-V):SOUND8,U:SOUND9,U:PUTSPRITE0,(116-(D<58)*((24-D*D\96)*B+F*10)+(X-36)*D\126,-Y*(98+D)-31),1,15+Y*D\24:LOCATE6,4:PRINTMID$(A$+"Game Over Time ="+STR$(A)+"s"+A$,N\2MOD42+1,15):IOMBCC 2005:NEXT:SCREENY
I found some more characters and added the time on 50Hz machines.
I also made the time with one decimal to make it a bit more interesting.
Then I added an extra line in the horizon to make it look more distant.
1 DEFINTA-Y:V=14:S$(O1)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 J=S-J*(J<96-S):K=J\16:FORW=0TO2:VPOKE8208+W,P(W+K):NEXT:IFTTHENRESUMENEXTELSEKEYOFF:SCREEN1,3,0:LOCATE8,1:PRINT"PLEASE WAIT!":FORI=256TO1023:VPOKE7952+I,85:O=VPEEK(I):VPOKEI,(OORO\2)\(2-(IAND4)\4):NEXT:SOUND3,V:FORW=0TO1:FORO=1TO212STEP3 4 Q=ASC(MID$(S$(W),O,1))-65:Y=VAL("&H"+MID$(S$(W),O+1,2)):N=14336:FORA=ATOA+Q:VPOKEA+N,Y:NEXT:NEXT:PUTSPRITE8+W,(80+64*W,159),V,6+W:NEXT:ONERRORGOTO3:FORR=1TO12:FORH=0TO31:VPOKE6496+H+R*32,(R<9ORH0:D=D*D\96:U=STICK(0):.:PRINTUSING"SPEED:###kmh RANK:###";S*10;N\128-82:NEXT:Z$=SPACE$(V):Z=(TIME\(6-PEEK(43)\128))/10 8 FORN=0TO244:D=88-3*N:S=16:U=Y*(N\6-V):Y=D>0:SOUND8,U:SOUND9,U:PUTSPRITE0,(116-(D<58)*((21-D*D\96)*B+F*10)+(X-36)*D\126,-Y*(98+D)-31),1,15+Y*D\24:LOCATE6,4:PRINTMID$(Z$+"Race Over Time ="+STR$(Z)+"s"+Z$,N\2MOD42+1,15):NEXTI:NEXT:SCREENY
I didn't check but . expands to 0! which made line 7 too long. So I fixed that and
also a sound bug at startup. Here is an update:
1 DEFINTA-Y:V=14:S$(O1)="A18A0CA0FB07C03C01H00A80AE0AF0AFCIFFH00A80AE0AF0AF8AFCBFEAFFP00F3FF7FTFFAF0AF8AFCAFELFFE00A80AC0AE0BF0AF8AFCBFEBFFP00B01B03B07B0FB1FB3FB7FBFFB80BC0BE0BF0BF8BFCBFEBFFP00B01B03B07B0FB1FB3FB7FbFFB80BC0BE0BF0BF8BFCBFE" 2 COLOR15,5,1:X=V:S$(1)="BFFX00A01A07A0FA1FA3FB7FAFFC00A01A07A0FA3FIFFA18A30AF0BE0CC0C80J00A01A03A07B0FA1FA3FB7FBFFA0FA1FA3FA7F\FFFFCFFEDFFG00A1FA20A40A7FBCFA7FB70G00AC0A20A10AF0B98AF0B70J00A0FA10A1FA2FA1FA19K00B80A40B80L00A06A0FA09_00A03" 3 J=S-J*(J<96-S):K=J\16:FORW=0TO2:VPOKE8208+W,P(W+K):NEXT:IFTTHENRESUMENEXTELSEKEYOFF:SCREEN1,3,0:LOCATE8,1:PRINT"PLEASE WAIT!":FORI=256TO1023:VPOKE7952+I,85:O=VPEEK(I):VPOKEI,(OORO\2)\(2-(IAND4)\4):NEXT:SOUND3,V:FORW=0TO1:FORO=1TO212STEP3 4 Q=ASC(MID$(S$(W),O,1))-65:Y=VAL("&H"+MID$(S$(W),O+1,2)):N=14336:FORA=ATOA+Q:VPOKEA+N,Y:NEXT:NEXT:PUTSPRITE8+W,(80+64*W,159),V,6+W:NEXT:ONERRORGOTO3:FORR=1TO12:FORH=0TO31:VPOKE6496+H+R*32,(R<9ORH0:D=D*D\96:U=STICK(0):*:PRINTUSING"SPEED:###kmh RANK:###";S*10;N\128-82:NEXT:Z$=SPACE$(V):Z=(TIME\(6-PEEK(43)\128))/10 8 FORN=0TO244:D=88-3*N:S=16:U=Y*(N\6-V):Y=D>0:SOUND8,U:SOUND9,U:PUTSPRITE0,(116-(D<58)*((21-D*D\96)*B+F*10)+(X-36)*D\126,-Y*(98+D)-31),1,15+Y*D\24:LOCATE6,4:PRINTMID$(Z$+"Race Over Time ="+STR$(Z)+"s"+Z$,N\2MOD42+1,15):NEXTI:NEXT:SCREENY