ti99iuc Posted October 24, 2015 Share Posted October 24, 2015 (edited) In an old italian cassette tape i found this " ZAXXON TRAINER " it is working in XB and i think it could be an interesting demo for developers, in not so much lines of code. KEYS: J = RIGHT K= LEFT Q=FIRE (working only in the 1st minigame) DOWNLOAD: Zaxxon.dsk 40 REM ******************* 50 REM *** ZAXXONS *** 60 REM ******************* 70 GOTO 200 :: S,A$,PT,K,C,A,TM,FRD,HT :: CALL CLEAR :: CALL SCREEN :: CALL CHAR :: CALL MAGNIFY 90 DATA 32,2,1000,36,12,10,104,15,300,108,10,0,128,5,500,124,16,0,132,5,500,124,16,0 100 DIM PAT(15),COL(15),AM(15) 110 !@P- 200 ON WARNING NEXT 300 CALL CLEAR :: CALL SCREEN(2) 400 FOR A=4 TO 15 :: READ PAT(A),COL(A),AM(A) :: NEXT A 500 CALL CHAR(92,"000000030000000000000000000000000C30C000000000000000000") 600 CALL CHAR(36,"03071F1F1F3F3F7F7FFFFFFF7F1F00008080808000000000C0E0E0E0C") 700 CALL CHAR(32,"6030180C050103273F0E00000000000000000080000080C08") 800 CALL CHAR(108,"000000003F3F3F3F3F3F3F3F3F1F070000000000FCFCFCFCFCFCFCFCFCF8E") 900 CALL CHAR(104,"071F3F7F7F3F1F474020180700000000E0F8FCFEFEFCF8E2020418E") 1000 CALL CHAR(120,"102349D367339E7117317BA76DF0B71105123871C46E55022AF2CFE64C196F86") 1100 CALL CHAR(96,"FFFF0C183060FFFF183C66C3FFFFC3C3C3E7663C3C66E7C37EFFC3C3C3C3FF7E") 1200 CALL CHAR(100,"C3E3F3DBCFC7C3C37EE7C1781E83E77E",64,"3C4299A1A199423C") 1300 FOR A=3 TO 8 :: CALL COLOR(A,16,2) :: NEXT A :: CALL COLOR(1,2,2,9,8,2) 1400 DISPLAY AT(12,:"`abbcde TRAINER" :: DISPLAY AT(20,5):"PRESS ANY KEY TO BEGIN": : : :"@1984 APT SOFTWARE" 1500 CALL KEY(0,K,S) :: IF S=0 THEN 1500 1600 DISPLAY AT(1,12)ERASE ALL BEEP:"OPTIONS": : : :"PRESS": :" 1 FOR FIRE": :" 2 FOR ESCAPE": :" 3 FOR GROUND": :" 4 FOR ENDING" 1700 CALL KEY(0,K,S) :: IF K>52 OR K<49 THEN 1700 1701 IF K=52 THEN CALL CLEAR :: STOP 1705 DISPLAY AT(20,1):"NUMBER OF TIMES? 200" :: ACCEPT AT(20,19)BEEP SIZE(-3)VALIDATE(DIGIT):TM 1800 DISPLAY AT(1,1)BEEP ERASE ALL :: RANDOMIZE 1900 CALL MAGNIFY(3) :: A$="0000000000000000" :: CALL CHAR(96,"181E1FFF3F0F0F00"&A$&"1C7CF8F0F0F0F0F03") 2000 CALL CHAR(124,"0000071F3F7F7F3F1F070000000000000000E0F8FCFEFEFCF8E") 2100 CALL CHAR(128,"030F0F03000000000000000000000000C0F0F0C030F80E030") 2200 CALL CHAR(132,"030F0F030C1F70C00000000000000000C0F0F0C0000000000") 2300 CALL CHAR(100,"000003FF3F0F0F00"&A$&"0C7CF8F0F0F0F0F03") 2400 CALL CHAR(112,"000002201406334B1F3F5F3F2F050000002122889CB8F8FCFFFCFDFCFEF88") 2500 CALL CHAR(116,"000000000000000101070F0701000000000000000000002040E0E0F04") 2600 CALL CHAR(136,"0C0F0F0F0F0F1F3E300000000000000060E0F0F0FCFFE0000") 2800 CALL COLOR(1,14,14,3,2,14,4,2,14) 2900 CALL SPRITE(#1,96,16,147,90,#2,100,2,154,90) 3000 ON K-48 GOSUB 3300,3100,3200 3010 GOTO 1100 3100 CALL COLOR(1,2,2) :: FOR A=3 TO 5 :: C=INT(58*RND)+28 :: HT=C*2+50 :: CALL SPRITE(#A,136,A+9,C,HT) :: NEXT A :: FRD=1 3105 CALL LOCATE(#2,147,90) :: CALL PATTERN(#2,112) 3110 HT=3 :: FOR A=1 TO TM :: DISPLAY AT(1,1):A :: CALL SHIP :: FRD=-FRD :: HT=HT+1+3*(HT=5) :: C=INT(3*RND)+2 :: K=C*2 :: CALL MOTION(#HT,FRD*C,FRD*K) 3120 CALL THEY(HT+1+3*(HT=5)) :: NEXT A :: CALL DELSPRITE(ALL) :: CALL CLEAR :: RETURN 3200 FOR A=4 TO 14 STEP 2 :: C=INT(255*RND)+1 :: CALL SPRITE(#A,PAT(A),COL(A),C,248,4,-8,#A+1,PAT(A+1),COL(A+1),C,247,4,- :: NEXT A 3210 FOR A=1 TO TM :: CALL SHIP :: CALL DEST :: NEXT A 3220 CALL MOTION(#1,0,0,#2,0,0) :: DISPLAY AT(12,5)BEEP:"PRESS REDO OR BACK" 3225 FOR A=1 TO 200 :: NEXT A 3230 FOR A=1 TO 300 :: CALL KEY(0,K,S) 3235 IF K=6 THEN CALL CLEAR :: GOTO 3210 ELSE IF S THEN 3245 3240 NEXT A 3245 CALL DELSPRITE(ALL) :: CALL CLEAR :: RETURN 3300 FOR A=4 TO 10 STEP 2 :: C=INT(255*RND)+1 :: CALL SPRITE(#A,PAT(A),COL(A),C,248,3,-6,#A+1,PAT(A+1),COL(A+1),C,247,3,-6) :: NEXT A 3350 PT,HT,FRD=0 3400 FOR A=1 TO TM :: CALL FIRE(PAT(),COL(),AM(),HT,FRD,PT) :: DISPLAY AT(24,3):A :: NEXT A :: CALL DELSPRITE(ALL) 3410 DISPLAY AT(3,1)ERASE ALL BEEP:"TIMES:";TM: :"SHOTS FIRED:";FRD: :"HIT TARGETS:";HT 3415 DISPLAY AT(9,1):"PERCENTAGE OF HITS:";INT(HT*100/FRD): :"ABILITY:";INT(HT*100/TM): :"SCORE:";PT: :"SCORE RATE:";INT(PT/TM) 3417 FOR A=1 TO 500 :: NEXT A 3420 CALL KEY(0,K,S) :: IF S=0 THEN 3420 3430 CALL CLEAR :: RETURN 3610 DATA 32,2,0,36,12,0,104,15,0,108,10,0 3620 !@P+ 3700 SUB SHIP 3800 CALL KEY(2,K,S) :: X=3*((K=2)-(K=3)) 3900 Y=6*((K=2)-(K=3)) :: CALL MOTION(#1,X,Y,#2,X,Y) 4000 SUBEND 4100 SUB FIRE(PAT(),COL(),AM(),HT,FRD,PT) 4200 CALL SHIP :: CALL KEY(1,K,S) :: IF S=0 THEN SUBEXIT ELSE CALL POSITION(#1,X,Y,#2,X1,Y) :: FRD=FRD+1 4300 CALL SPRITE(#3,92,16,X,Y,-60,120) :: FOR A=4 TO 10 STEP 2 :: CALL POSITION(#A,X,Y2) 4400 IF ABS((Y2-Y)/(X1-X)-2)<.3 THEN CALL COLOR(#A,12,#A+1,10) :: CALL PATTERN(#A,116,#A+1,112) :: CALL SOUND(-400,-5,0)ELSE 4700 4500 CALL DELSPRITE(#3) :: CALL SHIP :: C=INT(256*RND)+1 :: CALL PATTERN(#A,120) :: PT=PT+AM(A) :: DISPLAY AT(1,1):USING "######":PT 4600 HT=HT+1 :: CALL SPRITE(#A,PAT(A),COL(A),C,248,3,-6,#A+1,PAT(A+1),COL(A+1),C,247,3,-6) :: SUBEXIT 4700 NEXT A :: CALL DELSPRITE(#3) 4800 SUBEND 4900 SUB DEST 5100 CALL SHIP :: FOR A=4 TO 14 STEP 2 :: CALL COINC(#1,#A,9,DE) 5200 IF DE THEN CALL SOUND(500,-7,0) :: C=250*RND+3 :: CALL LOCATE(#A,C,248,#A+1,C,247) :: SUBEXIT 5300 NEXT A 5400 SUBEND 5500 SUB THEY(HT) 5600 CALL POSITION(#1,X,Y,#HT,X1,Y1) :: CALL SPRITE(#6,92,9,X1,Y1,45,-90) :: IF ABS((Y1-Y)/(X-X1)-2)>.3 THEN SUBEXIT 5700 CALL PATTERN(#1,120) :: CALL COLOR(#1,12,#2,10) :: CALL SOUND(-300,-7,0) :: CALL DELSPRITE(#6) :: CALL DEST :: CALL COLOR(#2,2,#1,16) 5710 CALL PATTERN(#1,96) 5800 SUBEND Edited October 25, 2015 by ti99iuc 1 Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted October 24, 2015 Share Posted October 24, 2015 Very nice. Quote Link to comment Share on other sites More sharing options...
Shift838 Posted October 24, 2015 Share Posted October 24, 2015 Sweet. I loved this game as a kid! Quote Link to comment Share on other sites More sharing options...
Opry99er Posted October 25, 2015 Share Posted October 25, 2015 I get the following: Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted October 25, 2015 Author Share Posted October 25, 2015 (edited) -- Edited October 25, 2015 by ti99iuc Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted October 25, 2015 Share Posted October 25, 2015 There has to be a space between BEEP and SIZE. 1705 DISPLAY AT(20,1):"NUMBER OF TIMES? 200" :: ACCEPT AT(20,19)BEEP SIZE(-3)VALIDATE(DIGIT):TM Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted October 25, 2015 Author Share Posted October 25, 2015 (edited) True in the code listed thru TIDir the "space" disappear, instead in the original FIAD it is present... is it a BUG for TIDir "View file (F3)" function ? anyway i've edited the first post and fixed the code now thank you- Edited October 25, 2015 by ti99iuc Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted October 25, 2015 Share Posted October 25, 2015 Yes. TIImageTool has the space. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted October 25, 2015 Share Posted October 25, 2015 Thank you, I will try in the morning. Quote Link to comment Share on other sites More sharing options...
unhuman Posted October 28, 2015 Share Posted October 28, 2015 Pretty amazing. Especially the fighter level. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.