Asi que este hilo podria tratar de avances con este tema, que da para mucho.
Me puse a hacerle un poco de ingenieria inversa al bytecode del Family Basic y pude hacer rapidamente un "decompilador" (patudamente lo llamo asi, no es un decompilador).
Mi decompilador funciona para los archivos "compilados" de Family Basic 3 (luego tal vez integre las otras versiones). Los programas que probe son los que vienen en la ROM "Family BASIC (Japan) (v3.0).nes": 4 juegos que para llamarlos hay que escribir "GAME 0", "GAME 1", etc...
El uso es bastante sencillo:
Código: Seleccionar todo
decompilador0 <binario> <base>
binario: el archivo con el bytecode
base: la base donde se encuentra el bytecode dentro del archivo
aqui esta el codigo fuente de esos 4 jueguillos decompilados (busque en internet y no encontre referencias)
GAME 0: (base 0x5410)
► Mostrar Spoiler
Código: Seleccionar todo
10 PLAY"M1V9Y2T3:M1V7Y1T3:M1T3"
20 PLAY"O3E5G:O3C5C:O2G5G"
30 PLAY"O4CO3B4A1:CC:#F#F"
40 PLAY"G4A1:F4F1:O3D4O2B1"
50 PLAY"B4O4C7:F4E7:G4C7"
60 CLS:LOCATE 8,10:Q=PEEK(&H4016) AND &H4:INPUT"PLAY ? Y/N=>",Y$:IF Y$="N" THEN Q=999
70 CLS:ERA0,1,2,3,4,5,6,7
80 SPRITE ON:CGSET0,0:U=&H15
90 PALETB 0,15,48,48,U
100 A$="AIIIIIIIIIIIIGIGGGGH"
110 B$="HHBHBBBEBEEE"
120 K$="ABCDEFGHI"
130 I$="ABCGHIDEF"
140 CLS:LOCATE9,10:PRINT"START !!":PAUSE80:CLS
150 X=13:Y=22:I=0
160 GOSUB220:SWAPA$,B$:GOSUB220
170 IF I=0THENSWAPK$,I$:I=1:GOTO160
180 GOSUB310:GOSUB430
190 IF Q<>999THEN60
200 GOTO70
210 END
220 L=LEN(A$):FORP=1TOL
230 IF(PEEK(&H4016) AND &H4)=Q THEN230
240 K=P
250 IF I=0THEN270
260 K=L+1-P
270 C=INSTR(K$,MID$(A$,K,1))-1
280 V=C/3:H=C MOD3
290 X=X+H+3*(H=2):Y=Y+V+3*(V=2)
300 LOCATEX,Y:PRINT"\xcf";:NEXT:RETURN
310 Y=22:S=0:E=13:T=0
320 LOCATE18,20:PRINT"SCORE:";
330 IF(PEEK(&H4016) AND &H4)=Q THEN330
340 T=T+1:LOCATE24,20:PRINTT
350 X=X+1:IFSCR$(X,Y)=" "AND X<=E THEN LOCATE X,Y:PRINT"\xcf":GOTO330
360 Y=Y-1:IFY<1THEN390
370 GOSUB410:IFX=-1THEN360
380 GOTO350
390 IFS=0THENS=13:E=26:Y=20:GOSUB410:GOTO330
400 RETURN
410 X=-1:FORC=S TOE:IFSCR$(C,Y)="\xcf"AND SCR$(C+1,Y)=" "THEN X=C:C=E
420 NEXT:RETURN
430 W=&H34:FORN=0TO1:DEFMOVE(N)=SPRITE(N,3+4*N,1,1,0,0):POSITIONN,236*N,200:NEXT
440 IF(PEEK(&H4016) AND &H4)=Q THEN440
450 T=T+1:LOCATE24,20:PRINTT
460 MOVE0,1:IFCRASH(0)=1THEN480
470 GOTO440
480 LOCATE10,10:PRINT"PERFECT":FORN=0TO100:PALETB 0,6,&H30,&H30,U:SWAPU,W:NEXT
490 PLAY"M1V2Y1T2:M1V10Y1T2:T2"
500 PLAY"O3E3G#DGDG#DG:O1#B5B#AB:R"
510 PLAY"EGO4CO3E:Y2O2#B6E3:O1C5C"
520 PLAY"#GAO4DC:F5#F:#C#C"
530 PLAY"O3B#ABO4A:F3O3DFA:D6F3"
540 PLAY"GO3AO4FO3B:E5DV15:GA#AB"
550 PLAY"#B3GT3FGE1DV12E7:C9:#B5T3GC7"
560 PALETB 0,15,48,48,21:RETURN
► Mostrar Spoiler
Código: Seleccionar todo
100 CLEAR:CGEN 2:CGSET 1,1:SCREEN 0,1
110 SPRITE ON:PLAY "V15T1:V15T1"
120 IF SCR$(1,2)<>" " GOTO 240
130 '\xfe\x81a\x8a
140 FOR JX=1 TO 21 STEP 4:FOR JY=2 TO 20 STEP 3
150 LOCATE JX,JY:PRINT "\xe8\xed\xed\xed\xe8":IF JY>19 GOTO 180
160 LOCATE JX,JY+1:PRINT "\xee \xee"
170 LOCATE JX,JY+2:PRINT "\xee \xee"
180 NEXT:NEXT
190 FOR S=5 TO 17 STEP 3:LOCATE 1,S:PRINT "\xec":LOCATE 25,S:PRINT "\xeb":NEXT
200 LOCATE 1,2:PRINT "\xef";
210 FOR S=0 TO 4:PRINT "\xed\xed\xed\xea";:NEXT:PRINT "\xed\xed\xed\xf0"
220 LOCATE 1,20:PRINT "\xf1";
230 FOR S=0 TO 4:PRINT "\xed\xed\xed\xe9";:NEXT:PRINT "\xed\xed\xed\xf2"
240 '\xfes\x88\x82x
250 SCREEN 0,0:VIEW:PRINT "ea\xa0bl\x88? A=nx~~ B=l\x88"
260 K=STRIG(0):IF K=0 GOTO 260
270 IF K=4 THEN BGTOOL
280 PLAY "O3C1DE:O3E1FG"
290 PS$="123456789":PL=LEN(PS$):PS=1
300 FOR S=1 TO PL
310 SX=2+RND(24):SY=2+RND(18):S$=SCR$(SX,SY)
320 IF S$=" " OR INSTR(PS$,S$)>0 GOTO 310
330 LOCATE SX,SY:PRINT MID$(PS$,S,1)
340 NEXT
350 '\xfe|\x8clb
360 PX=13*8+12:PY=2*8+16:C=3:T=0:FW=0:F=0
370 KN=2:W=219:KX=0:KY=0:KD=0
380 LOCATE 0,0:PRINT " \x8btxe\x9e";C;" sgr\x8c";T
390 DEF MOVE(7)=SPRITE (4,0,2,4,0,0):POSITION 7,PX,PY:MOVE 7
400 DIM E(KN-1)
410 '\xfeeu\xa4\x88
420 FOR F=0 TO KN-1
430 DEF MOVE(F)=SPRITE(14,1,2,4,0,3)
440 SX=1+RND(26):SY=10+RND(10):IF SCR$(SX,SY)=" " OR SCR$(SX,SY-1)=" " GOTO 440
450 POSITION F,SX*8+12,SY*8+24:MOVE F
460 NEXT
470 '\xfe\xfe\xfe\x81a\x8c\xfe\xfe\xfe
480 '\xfe\xfe\xfe\xfe\xfe\xae\x8c\x98\x8c
500 '\xfef-a\x8c/b\x9bg
510 S=0:SX=0:SY=0:K=STICK(0):IF K=0 GOTO 590
520 IF K=1 THEN S=3:SX=1
530 IF K=2 THEN S=7:SX=-1
540 IF K=4 THEN S=5:SY=1
550 IF K=8 THEN S=1:SY=-1
555 PX=(XPOS(7)-12)/8:PY=(YPOS(7)-16)/8
560 S$=SCR$(PX+SX,PY+SY)
570 IF S=0 OR S$=" " GOTO 590
580 DEF MOVE(7)=SPRITE (4,S,2,4,0,0):POSITION 7,PX*8+12,PY*8+16:MOVE 7
590 '\xfelb\x9dz\x8ab
600 IF S$<>MID$(PS$,PS,1) GOTO 650
610 PLAY "O4C0#CD#DEF#FG#G"
620 LOCATE PX+SX,PY+SY:PRINT CHR$(199);
630 T=T+10:LOCATE 21,0:PRINT T
640 PS=PS+1:IF PS>PL THEN PLAY "O4C3DEFG:O4E3FGAB":GOTO 1120
650 '\xfe\x8btdg
660 IF STRIG(0)<>8 OR INSTR(PS$,S$)<>0 OR C<1 OR FW=1 GOTO 690
670 PLAY "O2E2C":W$=S$:LOCATE PX+SX,PY+SY:PRINT CHR$(W)
680 FW=1:C=C-1:LOCATE 8,0:PRINT C
690 '\xfe\xfe\xfe\xfe\xfeeu
700 F=F+1:IF F>KN-1 THEN F=0
710 '\xfek\xa7\x89r\x88?
720 KD=VCT(F):IF KD>0 GOTO 760
730 IF MOVE(F)<>0 THEN PLAY "O0C0EGCEG":GOTO 1080
740 '\xfek\xa7\x89d\x8b\x87
750 KD=E(F)
760 '\xfe\x9cz\x95b
770 KX=(XPOS(F)-12)/8:JX=SGN(PX-KX)
780 KY=(YPOS(F)-16)/8:JY=SGN(PY-KY)
790 SK$=SCR$(KX,KY):SR$=SCR$(KX+1,KY):SL$=SCR$(KX-1,KY):SD$=SCR$(KX,KY+1):SU$=SCR$(KX,KY-1)
800 '\xfe\x8bt?
810 IF SK$<>CHR$(W) GOTO 850
820 DEF MOVE(F)=SPRITE (14,0,1,200,1,2):POSITION F,KX*8+12,KY*8+16:MOVE F
830 E(F)=KD:LOCATE KX,KY:PRINT W$:FW=0
840 GOTO 1080
850 '\xfe\xfe\xfedaeh\x88
860 IF(SR$+SL$<>" " AND SD$+SU$<>" ") GOTO 910
870 '\xfe\xfep\x95gk\x8c
880 IF(KD=3 AND JX=1)OR(KD=7 AND JX=-1)OR(KD=5 AND JY=1)OR(KD=1 AND JY=-1) GOTO 1060
890 '\xfey\x8cr\x8c
900 KD=(KD+4)+8*(KD>3):GOTO 1060
910 '\xfe\xfe\xa8\x8cf
920 '\xfeah\x88
930 IF JX*JY<>0 AND RND(2)=1 GOTO 960
940 IF JX=1 AND SR$<>" " THEN KD=3:GOTO 1060
950 IF JX=-1 AND SL$<>" " THEN KD=7:GOTO 1060
960 IF JY=1 AND SD$<>" " THEN KD=5:GOTO 1060
970 IF JY=-1 AND SU$<>" " THEN KD=1:GOTO 1060
980 '\xfeahta
990 S=RND(4)+1
1000 ON S GOTO 1010,1020,1030,1040
1010 IF SR$<>" " THEN KD=3 GOTO 1060
1020 IF SL$<>" " THEN KD=7 GOTO 1060
1030 IF SD$<>" " THEN KD=5 GOTO 1060
1040 IF SU$<>" " THEN KD=1 GOTO 1060
1050 GOTO 1010
1060 '\xfeb\x9bg
1070 DEF MOVE(F)=SPRITE (14,KD,1,4,0,3):POSITION F,KX*8+12,KY*8+16:MOVE F
1080 '\xfe\xa8qe\x96o?
1090 IF CRASH(7)>=0 THEN PLAY "O1B2AGFEDC":GOTO 1120
1100 '\xfe\xfe
1110 GOTO 470
1120 '\xfe\xfe\xfed\x8b\x87
1130 FOR JX=6 TO 8:READ S$:LOCATE 9,JX:PRINT S$:NEXT
1140 SPRITE OFF
1150 DATA "\xfd\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfd"
1160 DATA "\xfe\xfd dk~a \xfd\xfe"
1170 DATA "\xfd\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfd"
1180 S=STRIG(0):IF S=0 GOTO 1180
1190 IF S=1 THEN RUN
1200 END
► Mostrar Spoiler
Código: Seleccionar todo
10 CGSET 1,0
20 ON ERROR GOTO 910
30 W=F=K=T=R=Z=NI=NN=XE=YE=XN=YN=XB=XL=YL=S2=S1=S=G=V=X=Y=I=D:H=0:S$=G$
40 PALETB 3,13,48,54,22:SPRITE ON
50 K$=CHR$(24):R$=CHR$(25):H$=CHR$(26):U$=CHR$(27)
60 DEF SPRITE 0,(0,1,0,1,0)=R$+K$+U$+H$
70 K$=CHR$(12):R$=CHR$(13):H$=CHR$(14):U$=CHR$(15)
80 DEF SPRITE 1,(0,1,0,1,0)=R$+K$+U$+H$
90 DEF SPRITE 2,(0,1,0,0,0)=K$+R$+H$+U$
100 K$=CHR$(20):R$=CHR$(21):H$=CHR$(22):U$=CHR$(23)
110 DEF SPRITE 3,(0,1,0,0,0)=K$+R$+H$+U$
120 K$=CHR$(227):R$=CHR$(215):H$=CHR$(210):U$=CHR$(192):DIM Q(3),D(3)
130 'k\x95f m\x96ra
140 T=800:W=0:NN=1:X=116:Y=127:POSITION 7,X,Y:GOSUB 890:V=0:GOTO 540
150 'oa\x80 s sgr\x8c x y\x8cra
160 T=T-1:IF T MOD 10=0 THEN LOCATE 14,21:PRINT T;" ":IF T=0 THEN 660
170 IF Z=58 THEN IF R>15 THEN GOSUB 890
180 'uouo x \xad\x8a\x99\x86\x80
190 I=-(I+1)*(I<>NN)
200 XN=XPOS(I):YN=YPOS(I)
210 IF XN<12 OR XN>222 OR YN>188 THEN XN=RND(27)*8+12:YN=7:POSITION I,XN,YN:D=0:Q(I)=5:GOTO 280
220 XE=(XN-8)/8:YE=(YN-2)/8
230 G$=SCR$(XE,YE)
240 D=Q(I)
250 IF G$<>U$ THEN IF YL<>YE OR G$<>H$ THEN D=5:Q(I)=3-4*(X<XN):GOTO 270
260 IF D(I)=D THEN 300
270 XN=XE*8+12:YN=YE*8+7:POSITION I,XN,YN
280 DEF MOVE(I)=SPRITE(11,D,2,255+251*(D=5)):MOVE I:D(I)=D
290 '\xa8qe\x87 x y\x8cra
300 NI=CRASH(7):IF NI>-1 THEN IF ABS(YPOS(NI)-YPOS(7))<14 AND ABS(XPOS(NI)-XPOS(7))<14 THEN 660
310 IF F=1 THEN 780
320 '~\x87d x \xad\x8a\x99\x86\x80
330 S1=S:S=STICK(0):IF S>2 THEN S=3-(S>7)
340 X=XPOS(7):Y=YPOS(7)
350 XL=X/8-1:YL=(Y-2)/8
360 ON S GOTO 550,550,480,510
370 '
380 V=0:K=0:CUT 7
390 IF SCR$(XL,YL)=" " THEN IF SCR$(XL,YL-1)<>H$ THEN GOSUB 870:GOTO 750
400 XB=XL+(S1=1)-(S1=2):IF SCR$(XB,YL-1)=R$ THEN GOSUB 880
410 IF SCR$(XL,YL-1)=K$ THEN G=-15:GOTO 770
420 IF ASC(SCR$(XL,YL-1))=Z THEN LOCATE XL,YL-1:PRINT " ":Z=Z+1:W=W+30:LOCATE 14,23:PRINT W;
430 IF STRIG(0)<>8 THEN 470
440 IF SCR$(XL-1,YL)=U$ THEN 760
450 IF SCR$(XL,YL)=U$ THEN 760
460 IF SCR$(XL+1,YL)=U$ THEN 760
470 GOTO 160
480 V=5:G$=SCR$(XL,YL)
490 IF G$<>H$ THEN IF G$<>U$ THEN S=0:V=0:GOTO 750
500 GOTO 520
510 V=1:G$=SCR$(XL,YL-1)
520 IF G$<>H$ THEN S=0:GOTO 380
530 IF S1=0 OR K>0 THEN GOSUB 870:K=0
540 DEF MOVE(7)=SPRITE(0,V,1,4):MOVE 7:SPRITE S2:PAUSE 5:GOTO 160
550 V=4*S-1:K=1-(K+(K>3))*(S=S1)
560 G$=SCR$(XL+1+2*(S=2),YL):S$=SCR$(XL,YL)
570 XB=XL+1+2*(S=1):IF K>2 THEN IF SCR$(XB,YL-1)=R$ THEN GOSUB 880
580 IF SCR$(XL,YL-1)=R$ THEN XB=XL:GOSUB 880
590 IF G$<>U$ AND G$<>H$ THEN X=X+6*(S$<>" ")*((S=1)-(S=2)):GOTO 750
600 IF S$=" " THEN S=S1:GOTO 750
610 IF STRIG(0)=8 THEN IF G$=U$ OR S$=U$ OR SCR$(XB,YL)=U$ THEN 760
620 NI=CRASH(7):IF NI>-1 THEN IF ABS(XPOS(NI)-XPOS(7))<14 THEN 660
630 IF K<4 THEN DEF MOVE(7)=SPRITE(0,V,4-K,255):MOVE 7:SPRITE S2
640 GOTO 160
650 'd\x8b\x87 x \xad\x8a\x99\x86\x80
660 SPRITE S:SPRITE S1:SPRITE S2:ERA 7
670 FOR I=0 TO NN:ERA I:POSITION I,0,0:D(I)=0:NEXT
680 LOCATE 8,9:PRINT"*************"
690 LOCATE 8,10:PRINT"* GAME OVER *"
700 LOCATE 8,11:PRINT"*************"
710 IF W>H THEN H=W:LOCATE 14,22:PRINT H;
720 IF STRIG(0)=1 THEN 140
730 GOTO 720
740 '\x9d\x93\x8c\xad x \xad\x8a\x99\x86\x80
750 G=2:Y=Y+3:GOTO 770
760 G=-9:X=X+(2*K+6)*((S=2)-(S=1)):Y=Y-12
770 F=1:SPRITE S,X,Y:ERA 7::SPRITE 3:POSITION 7,X,Y:S2=S:K=K*((S=2)-(S=1)):GOTO 160
780 NI=CRASH(7):IF NI>-1 THEN IF ABS(YPOS(NI)-Y)<12 THEN 660
790 G=G+3+3*(G>6):X=X+K:Y=Y+G:SPRITE S,X,Y:POSITION 7,X,Y
800 XL=X/8-1:YL=(Y-2)/8:G$=SCR$(XL,YL):S$=SCR$(XL,YL-1)
810 IF G$=U$ THEN GOSUB 860:K=1:GOTO 540
820 IF S$=H$ THEN GOSUB 860:SPRITE 3,X,Y:SPRITE S2:S2=3:GOTO 160
830 IF G$=H$ THEN GOSUB 860:V=0:GOTO 540
840 GOTO 780
850 'SUB x \xad\x8a\x99\x86\x80
860 GOSUB 870:F=0:K=0:SPRITE S,X,Y:RETURN
870 CUT 7:X=XL*8+12:Y=YL*8+7:POSITION 7,X,Y:RETURN
880 LOCATE XB,YL-1:PRINT " ":R=R+1:W=W+15:LOCATE 14,23:PRINT W;:RETURN
890 VIEW:I=0:F=0:K=0:C=0:R=0:Z=48:LOCATE 10,21:PRINT"TIME";T:LOCATE 6,22:PRINT"HI-SCORE";H:LOCATE 9,23:PRINT"SCORE";W;
900 RETURN
910 'c\x86- k\x95\x87 x \xad\x8a\x99\x86\x80
920 IF ERL=560 THEN XL=-27*(XL<1):GOSUB 870:MOVE 7:RESUME 630
930 IF ERL=390 THEN XL=-27*(XL<0):GOSUB 870:S=S1:RESUME 550
940 IF YL>23 THEN RESUME 660
950 IF XL>27 THEN XL=0:GOSUB 870:RESUME
960 IF XL<0 THEN XL=27:GOSUB 870:RESUME
970 IF XB>27 THEN XB=0:MOVE7:RESUME
980 IF XB<0 THEN XB=27:MOVE7:RESUME
990 IF XL+1>27 THEN XL=0:GOSUB 870:RESUME
1000 IF XL-1<0 THEN XL=27:GOSUB 870:RESUME
1010 IF X<12 THEN X=228:RESUME
1020 IF X>228 THEN X=12:RESUME
1030 END
► Mostrar Spoiler
Código: Seleccionar todo
10 '"AREA 88 V7.3"
20 T=O=U=C=H=D=I=K=L=M=N=P=S=V=X=Y=MA=X0=X1=Y0=Y1=PP=Q
30 DIM D(1),V(1),F(8),SC(1),S(1)
40 L=9:MA=2:N=3:V=7:C=7:S(0)=4:S(1)=4
50 X0=70:Y0=80:X1=110:Y1=60
60 D(0)=3:V(0)=2:D(1)=7:V(1)=2:F(0)=3:F(1)=3:MA=MA+1:U=N:M=1
70 SPRITE ON:CGSET 1,1:PLAY"T1Y2M1V9O3R1":PALETS 1,13,48,38,18
80 FOR I=15 TO 18:A$=A$+SCR$(I,22):NEXT:H=VAL(A$)
90 GOSUB 1070
100 VIEW:FORP=0TO200:LOCATERND(27),RND(23):PRINTCHR$(205);:NEXT:P=0
110 '
120 I=P+6:IF F(P) THEN ON F(P) GOSUB 670,700,680:GOTO 150
130 IF M=P THEN GOSUB 390:GOTO 150
140 GOSUB 210
150 IF MOVE(I)=0 THEN ERA I
160 GOSUB 530
170 GOSUB 800
180 ON F(8)+1 GOSUB 940,1040
190 P=1-P:GOTO 120
200 '
210 S=STICK(P):T=STRIG(P)
220 IF T<>4 THEN F(I)=1
230 IF S+T=0 THEN RETURN
240 IFS=0THEN350
250 S=-1*(S=8)-3*(S=1)-5*(S=4)-7*(S=2)-2*(S=9)-4*(S=5)-6*(S=6)-8*(S=10)
260 Q=D(P)
270 IF S=Q THEN 350
280 IF Q>4 THEN 310
290 IF (S>Q AND S<=Q+4) THEN 320
300 GOTO 330
310 IF (S>=Q-4 AND S<Q)THEN 330
320 Q=Q+1:GOTO 340
330 Q=Q-1
340 PP=-1*(Q>8)-8*(Q<1):Q=-Q*(PP=0)+PP:D(P)=Q
350 IF T AND4 THEN IF F(I) THEN V(P)=V-V(P):F(I)=0
360 DEF MOVE(P)=SPRITE (P+8,D(P),V(P),255,1):MOVE P
370 IF T>7 THEN DEF MOVE(I)=SPRITE(12,D(P),1,80,0,P):POSITION I,(XPOS(P)+4)MOD256,(YPOS(P)+4)MOD256:MOVE I
380 RETURN
390 '
400 K=K-1:IF K>0 THEN RETURN
410 T=0:D=0:X=(XPOS(1-P)-XPOS(P))/13:Y=(YPOS(1-P)-YPOS(P))/13
420 IF X>0 THEN D=3
430 IF X<0 THEN D=7
440 IF Y>0 THEN D=D+5
450 IF Y<0 THEN D=D+1:IF X<0 THEN D=16
460 IF X AND Y THEN D=D/2
470 S=2:O=D-D(P):IF(0<O AND O<5)OR O<-3 THEN S=1
480 IF O=0 THEN S=0
490 IF V(1-P)<>V(P) THEN T=4
500 IF MOVE(I)=0 OR RND(10)=0 THEN T=T+8
510 IF X*X+Y*Y>200 THEN RETURN
520 K=RND(L):GOTO 220
530 '
540 D=CRASH(0):IF D>0 AND D<6 THEN O=0:GOSUB 590
550 D=CRASH(1):IF D>1 AND D<6 THEN O=1:GOSUB 590
560 D=CRASH(6):IF D>0 AND D<6 THEN O=6:GOSUB 610
570 D=CRASH(7):IF D=0 OR (D>1 AND D<6)THEN O=7:GOSUB 610
580 RETURN
590 X=ABS(XPOS(O)-XPOS(D)):Y=ABS(YPOS(O)-YPOS(D)):IF X<10 AND Y<10 THEN IF MOVE(O) AND MOVE(D) AND F(D)=0 AND F(O)=0 THEN F(O)=1:F(D)=1:IF D>1 THEN 650
600 RETURN
610 X=ABS(XPOS(O)-XPOS(D)-4):Y=ABS(YPOS(O)-YPOS(D)-4):IF X<8 AND Y<8 THEN IF MOVE(O) AND MOVE(D) AND F(D)=0 THEN ERA O:F(D)=1:GOTO 630
620 RETURN
630 IF D<2 THEN SC(O-6)=SC(O-6)+10:RETURN
640 SC(O-6)=SC(O-6)+1+F(8)*4
650 DEF MOVE(D)=SPRITE(10,RND(9),RND(3)+4,10):MOVE D:PLAY"O4C":RETURN
660 '
670 F(P)=2:DEF MOVE(P)=SPRITE(10,D(P),V(P),70/V(P),0):MOVE P:PLAY"O"+HEX$(P+3)+"GG":S(P)=S(P)-1:RETURN
680 IF P=M OR STRIG(P)+STICK(P) THEN F(P)=0:POSITION P,X0+P*X1,Y0+P*Y1
690 RETURN
700 IF MOVE(P) THEN RETURN
710 F(P)=3:ERA P
720 IF SC(0)>H AND M<>0 THEN H=SC(0)
730 IF SC(1)>H AND M<>1 THEN H=SC(1)
740 IF L<1 THEN L=5
750 LOCATE 0,20:PRINT"SCORE ",SC(0),SC(1),"LEVEL":PRINT"SHIPS",S(0),S(1),L;" ":PRINT"HI-SCORE",H,
760 IF S(P)>0 THEN RETURN
770 IF M=P THEN L=L-1:S(P)=4:GOTO 740
780 IF M=-1 THEN M=P:PRINT P;" COM":PLAY"EE":RETURN
790 LOCATE 10,10:PRINT "GAME OVER":PLAY"O1C5CDED6C4C5":PAUSE 200:RUN
800 '
810 X=XPOS(P)/8-1:Y=YPOS(P)/8-2
820 IF X<0 OR X>27 OR Y<0 OR Y>23 THEN 880
830 IF SCR$(X,Y)<>"\xcf"THEN 880
840 S=ASC(SCR$(X,Y,1))
850 IF S=P+1 THEN 880
860 IF F(P)=0 THEN F(P)=1
870 '
880 IF MOVE(I)=0 THEN RETURN
890 X=(XPOS(I)-12)/8:Y=(YPOS(I)-20)/8
900 IF X<0 OR X>27 OR Y<0 OR Y>23 THEN RETURN
910 IF SCR$(X,Y)<>"\xcf" THEN RETURN
920 S=ASC(SCR$(X,Y,1)):IF S=P+1 THEN RETURN
930 ERA I:LOCATE X,Y:PRINT " ";:RETURN
940 '
950 FOR I=2 TO MA:IF MOVE(I)OR F(I)=2 THEN 980
960 IF F(I)=1 THEN GOSUB 990:GOTO 980
970 DEF MOVE(I)=SPRITE (C,RND(9),RND(3)+C/2,80,0):MOVE I
980 NEXT:RETURN
990 '
1000 F(I)=0:ERA I:POSITION I,120,120:IF U<MA THEN F(I)=2
1010 U=U-1:IF U=0 THEN F(2)=0:F(8)=1:RETURN
1020 IF U<0 THEN U=N:F(2)=0:F(3)=0:F(4)=0:F(5)=0:F(8)=0:C=C-2:L=L-1:IF C<2 THEN C=7:IF M>-1 THEN S(1-M)=S(1-M)+1
1030 RETURN
1040 IF F(2) THEN I=2:GOTO990
1050 IF MOVE(2)=0 THEN DEF MOVE(2)=SPRITE(2,RND(8)+1,RND(3)+1,10,0):MOVE 2
1060 RETURN
1070 '
1080 VIEW:RESTORE 1070
1090 FORP=0TO200:LOCATERND(27),RND(23):PRINTCHR$(205):NEXT
1100 LOCATE8,3:PRINT"STAR KILLER"
1110 FOR P=0 TO 1:LOCATE 10,10+P*8:DEF MOVE(P)=SPRITE(P+8,D(P),2,30):POSITION P,X0+P*X1,Y0+P*Y1:MOVE P
1120 IF MOVE(P) THEN 1120
1130 READ A$:FOR I=1 TO LEN(A$):PRINT MID$(A$,I,1);:PLAY"C":NEXT:NEXT
1140 FOR P=2 TO 3:LOCATE 10,17+P:READ A$:FOR I=1 TO LEN(A$):PRINT MID$(A$,I,1);:PLAY"C":NEXT:NEXT:LOCATE1,22:PRINT"{o\x87 \xa4 `n\xa7~le(Y/N)";:M=-1
1150 A$=INKEY$(0):IFA$="N"THENM=1
1160 PAUSE80:RETURN
1170 DATA "PLAYER 1","PLAYER 2"," OR","COMPUTER"
Ahora necesito un GLK para seguir jugando, pero las posibilidades de verdad son infinitas y no se como esos GLK no son usados como plataforma de desarrollo aun.
Tambien seria bueno tener unas muestras de el audio que se grababa a las cintas ya que no he podido hacer funcionar el dispositivo de cinta del Nestopia.
Avisenme si alguien tiene algun buen dato sobre estos GLK.