-
Content Count
532 -
Joined
-
Last visited
Posts posted by OX.
-
-
Found this TI Basic game but can't get it to run, crashes out at line 1540 - any ideas?
100 CALL CLEAR 110 CALL SCREEN(12) 120 CALL SOUND(600,659,0) 130 PRINT " 000 0 000 000 0 000" 140 PRINT " 0 0 0 0 0 0 0 0 " 150 PRINT " 000 000 0 0 0 00" 160 PRINT " 0 0 0 0 0 0 0 0" 170 PRINT " 000 0 0 0 0 000 000": : : 180 FOR BASS=1 TO 7 190 CALL SOUND(125,165,4) 191 FOR REST=1 TO 30 192 NEXT REST 200 NEXT BASS 210 PRINT " FOR": : : : 220 CALL SCREEN(4) 230 CALL SOUND(125,659,0) 240 CALL SOUND(750,587,0) 250 CALL SCREEN(10) 260 PRINT " 000 0 000 000 0 0" 270 PRINT " 0 0 0 0 0 0 0 0" 280 PRINT " 00 000 000 0 000" 290 PRINT " 0 0 0 0 0 0 0 0" 300 PRINT " 000 0 0 0 0 0 0 0" 310 CALL SOUND(125,587,0) 320 CALL SCREEN(16) 330 CALL SOUND(500,523,0) 340 FOR REST=1 TO 125 350 NEXT REST 360 CALL SOUND(500,523,0) 370 CALL SCREEN(6) 380 FOR REST=1 TO 125 390 NEXT REST 400 CALL SCREEN(10) 410 CALL SOUND(500,587,0) 420 FOR REST=1 TO 125 430 NEXT REST 440 CALL SCREEN(12) 450 CALL SOUND(500,554,0) 460 FOR REST=1 TO 125 470 NEXT REST 480 CALL SCREEN(5) 490 CALL SOUND(500,587,0) 500 FOR REST=1 TO 125 510 NEXT REST 520 CALL SCREEN(10) 530 CALL SOUND(500,622,2) 540 CALL SCREEN(16) 550 CALL SOUND(500,659,0) 560 CALL SCREEN(5) 570 PRINT "COPYRIGHT BY JAMES REDDING" 580 PRINT "AND BRETT PIJAN - 1982" 640 REM LASAR BASE 650 CALL CHAR(96,"1818183C7EFF3CFF") 660 REM YOUR LASER 670 CALL CHAR(104,"1008100810081008") 680 REM INVADER SPACESHIP 690 CALL CHAR(112,"0080C0FE1FFEC080") 700 CALL CHAR(113,"0103077FFC7F0301") 710 REM INVADER LASER BEAM 720 CALL CHAR(120,"1008100810081008") 730 CALL CHAR(128,"FFFFFFFFFFFFFFFF") 740 CALL CHAR(129,"01071F3F3F7F7FFF") 750 CALL CHAR(130,"80E0FBFCFCFEFEFF") 760 CALL CHAR(131,"FF7F7F3F3F1F0701") 770 CALL CHAR(132,"FFFEFEFCFCF8E080") 780 CALL CHAR(136,"FFFFFFFFFFFFFFFF") 790 CALL CHAR(144,"3C7EFFFFFFFF7E3C") 800 CALL COLOR(9,4,1) 810 CALL COLOR(10,10,1) 820 CALL COLOR(11,16,1) 830 CALL COLOR(12,12,1) 840 CALL COLOR(14,4,1) 850 CALL COLOR(13,16,1) 860 CALL COLOR(15,9,5) 870 CALL CLEAR 880 CALL SCREEN(11) 890 PRINT " EARTH IS BEING" 900 CALL SOUND(125,165,4) 910 PRINT " ATTACKED BY ALIEN" 920 CALL SOUND(125,165,4) 930 PRINT "TENNIS SHOES WITH" 940 CALL SOUND(125,165,4) 950 PRINT "PLASMA PUMPKINS": : 960 CALL SOUND(125,165,4) 970 PRINT " HIT 'S' KEY" 980 CALL SOUND(125,165,4) 990 PRINT " TO MOVE LEFT" 1000 CALL SOUND(125,165,4) 1010 PRINT " HIT 'D' KEY" 1020 CALL SOUND(250,110,4) 1030 PRINT " TO MOVE RIGHT": : 1040 CALL SOUND(250,123,4) 1050 PRINT " HIT SPACE BAR" 1060 CALL SOUND(250,147,4) 1070 PRINT " TO FIRE YOUR LASER": : 1080 CALL SOUND(125,165,4) 1090 PRINT " WARNING !!!!" 1100 CALL SOUND(125,165,4) 1110 PRINT "INVADER HAS DEFENSIVE" 1120 CALL SOUND(125,165,4) 1130 PRINT "BAD BREATH (SHIELDS)" 1140 CALL SOUND(125,165,4) 1150 PRINT " CAN YOU SAVE" 1160 CALL SOUND(125,165,4) 1170 PRINT " THE UNIVERSE ?": : : : 1180 CALL SOUND(125,165,0) 1190 CALL SOUND(250,110,0) 1200 CALL SOUND(250,123,0) 1210 CALL SOUND(250,147,0) 1211 CALL SOUND(500,165,0) 1212 FOR DELAY=1 TO 3500 1214 NEXT DELAY 1220 PLAYS=4 1240 SCORE=0 1270 CALL CLEAR 1275 HITS=0 1280 CALL SCREEN(5) 1290 CA=15 1300 I=1 1310 J=32 1320 REM YOUR BASE APPEARS 1330 CALL HCHAR(23,CA,96) 1340 CALL HCHAR(24,1,136,32) 1350 REM START NEXT BASE 1360 IF I>=7 THEN 1370 ELSE 1390 1370 CALL HCHAR(2,I*4,32,3) 1375 CALL HCHAR(4,J-I*4,32,3) 1380 I=1 1390 CALL COLOR(11,16,1) 1400 CALL HCHAR(2,I*4,32,3) 1410 CALL HCHAR(4,J-1*4,32,3) 1420 I=I=(RND*7)/10 1430 REM BACKGROUND BEEPS 1440 CALL SOUND(125,165,6) 1450 C1=INT(I*4)+1 1460 C2=INT(J-I*4) 1470 REM BEGIN SHIP FIRE 1480 F=(RND*20) 1490 REM DRAW SHIP 1500 CALL HCHAR(2,J-I*4,112) 1510 CALL HCHAR(4,J-I*4,113) 1520 IF F>10 THEN 1660 1530 REM SHIP LASER 1540 CALL VCHAR(3,I*4,120,20) 1550 CALL VCHAR(5,J-I*4,120,18) 1560 CALL VCHAR(3,I*4,120,18) 1570 CALL VCHAR(5,J-I*4,32,18) 1600 CALL GCHAR(23,I*4,G) 1610 CALL GCHAR(23,J-1*4,G2) 1620 REM SHIP HITS BASE 1630 IF G=96 THEN 2380 1640 IF G2=96 THEN 2535 1650 IF F=0 THEN 1660 1660 CALL KEY(0,KEY,STATUS) 1670 IF F=1 THEN 1680 ELSE 1690 1680 STOP 1690 IF KEY<>83 THEN 1760 1700 IF CA=2 THEN 1710 ELSE 1730 1710 CA=2 1720 GOTO 1350 1730 CALL HCHAR(23,CA,32) 1740 CA=CA-2 1750 GOTO 1820 1760 IF KEY<>68 THEN 1840 1770 IF CA>30 THEN 1780 ELSE 1800 1780 CA=31 1790 GOTO 1350 1800 CALL HCHAR(23,CA,32) 1810 CA=CA+2 1820 CALL HCHAR(23,CA,96) 1830 GOTO 1350 1840 IF KEY<>32 THEN 1350 1850 REM BASE LASER 1860 CALL SOUND(150,659,2) 1870 CALL SOUND(150,-8,3) 1880 CALL VCHAR(3,CA,104,20) 1890 CALL VCHAR(3,CA,32,20) 1900 IF CA=C1 THEN 1930 1910 IF CA=C2 THEN 2130 ELSE 1350 1920 REM SHIP BLOWS UP 1930 CALL SCREEN(12) 1940 CALL SOUND(125,659,0) 1941 CALL HCHAR(2,I*4,144) 1950 CALL SOUND(875,587,2) 1960 CALL HCHAR(2,I*4,128) 1970 CALL HCHAR(2,I*4+1,128) 1980 CALL HCHAR(2,I*4-1,128) 1990 CALL HCHAR(1,I*4,128) 2000 CALL HCHAR(3,I*4,128) 2010 CALL HCHAR(1,I*4-1,129) 2020 CALL HCHAR(1,I*4+1,130) 2030 CALL HCHAR(3,I*4-1,131) 2040 CALL HCHAR(3,I*4+1,132) 2050 CALL SOUND(900,-7,2) 2060 CALL SCREEN(10) 2070 CALL COLOR(11,5,1) 2080 CALL HCHAR(4,J-I*4,32) 2090 FOR DELAY=1 TO 75 2100 NEXT DELAY 2110 CALL SCREEN(5) 2120 GOTO 2290 2130 CALL SCREEN(12) 2140 CALL SOUND(125,659,0) 2141 CALL HCHAR(4,J-I*4,144) 2150 CALL SOUND(875,587,2) 2160 CALL HCHAR(4,J-I*4-1,128,3) 2170 CALL HCHAR(5,J-I*4,128) 2180 CALL HCHAR(3,J-I*4,128) 2190 CALL HCHAR(3,J-I*4-1,129) 2200 CALL HCHAR(3,J-I*4+1,130) 2210 CALL HCHAR(5,J-I*4-1,131) 2220 CALL HCHAR(5,J-I*4+1,132) 2230 CALL SOUND(900,-7,0) 2240 CALL SCREEN(10) 2250 CALL HCHAR(2,I*4,32) 2260 FOR DELAY=1 TO 75 2270 NEXT DELAY 2280 CALL SCREEN(5) 2290 HITS=HITS+1 2300 M$="HITS="&STR$(HITS) 2310 FOR P=1 TO LEN(M$) 2320 CODE=ASC(SEG$(M$,P,1)) 2330 CALL HCHAR(24,10+P,CODE) 2340 NEXT P 2350 SCORE=SCORE+100+HITS 2360 GOTO 1300 2370 END
-
It's a pc99 disk image within the .zip file, but here's the listing if you prefer :-
100 CALL CLEAR 110 PRINT "ANT WARS" 120 PRINT "BY NOT-POLYOPTICS" 130 PRINT: : : : : : : : : : 140 RANDOMIZE 150 FOR J=0 TO 8 STEP 8 160 CALL CHAR(36+J,"005A3C187E3C5A") 170 CALL CHAR(37+J,"106478BA3D4C1008") 180 CALL CHAR(38+J,"004A2C7E7E2C4A") 190 CALL CHAR(39+J,"08104C3DBA78641") 200 NEXT J 210 CALL CHAR(42,"003C7E7E7E7E3C") 220 CALL CHAR(143,"8199DB7EDB7EBD99") 230 CALL CHAR(151,"DB85018241839A6F") 240 MATE(1)=100 250 MATE(2)=100 260 A$="0123456789ABCDEF" 270 FOR J=152 TO 159 275 CALL SOUND(-4000,(INT(RND*3)+2)*110,0,110,0) 280 FOR I=1 TO 16 290 B$=B$&SEG$(A$,INT(RND*16)+1,1) 300 NEXT I 310 CALL CHAR(J,B$) 320 B$="" 330 NEXT J 340 CALL CLEAR 345 INPUT "S FOR SPIDER N FOR NO SPIDER":S$ 346 INPUT "1 FOR COMPUTER PLAY 0 ELSE":COMPLAY 347 IF COMPLAY<>1 THEN 351 348 PRINT:"COMPUTER PLAYS BLACK" 349 FOR I=1 TO 100 350 NEXT I 351 CALL CLEAR 352 CALL COLOR(1,7,1) 360 CALL COLOR(3,7,10) 370 CALL COLOR(4,7,10) 380 CALL COLOR(5,7,10) 390 CALL COLOR(6,5,6) 400 CALL COLOR(7,5,6) 410 CALL COLOR(8,5,6) 420 CALL COLOR(14,2,4) 430 CALL COLOR(15,4,16) 440 CALL COLOR(16,13,4) 450 FOR I=1 TO 24 460 FOR J=1 TO 32 470 BRD=INT(RND*9)+151 480 IF BRD<>151 THEN 510 490 IF INT(RND*15)=1 THEN 510 500 GOTO 470 510 CALL HCHAR(I,J,BRD) 520 NEXT J 530 NEXT I 535 IF COMPLAY=0 THEN 540 536 BLAX=12 537 GOTO 545 540 BLAX=INT(RND*13)+6 545 CALL HCHAR(BLAX,1,42) 550 REDX=INT(RND*13)+6 552 CALL HCHAR(REDX,32,42) 555 IF S$<>"S" THEN 600 560 X=INT(RND*12)+6 570 Y=INT(RND*16)+8 580 CALL HCHAR(X,Y,143) 590 SPIDER$=STR$(X+10)&STR$(Y+10)&STR$(50) 600 DIM ANT$(45) 610 FOR I=48 TO 90 620 IF I=72 THEN 830 630 IF I=73 THEN 830 640 IF I<58 THEN 670 650 IF I>64 THEN 670 660 GOTO 830 670 IF I>72 THEN 700 680 K=24 690 GOTO 710 700 K=11 710 X=INT(RND*24)+11 720 Y=INT(RND*19)+K 730 CALL GCHAR(X-10,Y-10,BRD) 740 IF BRD>90 THEN 760 750 GOTO 710 760 SIZE=INT(RND*10)+11 770 BRD=INT(RND*+152 780 DIR=INT(RND*4)+36 790 IF I<72 THEN 810 800 DIR=DIR+8 801 IF COMPLAY=0 THEN 810 802 SIZE=20 810 ANT$(I-47)=STR$(DIR)&STR$(X)&STR$(Y)&STR$(SIZE)&STR$(BRD) 820 CALL HCHAR(X-10,Y-10,DIR) 830 NEXT I 840 FOR H=1 TO 10 850 CALL SOUND(-200,262,0) 860 CALL SOUND(-200,330,0) 870 CALL SOUND(200,524,0) 880 CALL SOUND(1000,110,30) 890 FOR I=1 TO H 900 CALL SOUND(500,524,0) 910 CALL SOUND(1000,110,30) 920 NEXT I 930 CALL SOUND(4000,110,30) 940 IF H=1 THEN 1020 950 FOR I=1 TO INT(RND*6) 960 X=INT(RND*24)+1 970 Y=INT(RND*32)+1 980 CALL GCHAR(X,Y,BRD) 990 IF BRD<157 THEN 960 1000 CALL HCHAR(X,Y,151) 1010 NEXT I 1020 FOR K=48 TO 64 1030 FOR J=0 TO 1 1040 I=K+(26*J) 1050 IF J=1 THEN 1080 1060 IF K<58 THEN 1080 1070 I=I+7 1080 IF ANT$(I-47)="0" THEN 1840 1081 IF S$<>"S" THEN 1390 1085 X=VAL(SEG$(SPIDER$,1,2))-10 1090 Y=VAL(SEG$(SPIDER$,3,2))-10 1100 CALL GCHAR(X,Y,BRD) 1110 IF BRD<>143 THEN 1390 1115 IF INT(RND*3)<>1 THEN 1235 1120 FOR SPX=X-1 TO X+1 1130 FOR SPY=Y-1 TO Y+1 1140 IF SPX<1 THEN 1203 1150 IF SPX>24 THEN 1203 1160 IF SPY<1 THEN 1202 1170 IF SPY>32 THEN 1202 1180 CALL GCHAR(SPX,SPY,BRD) 1185 IF BRD=42 THEN 1202 1190 IF BRD>47 THEN 1202 1200 EAT$=STR$(SPX+10)&STR$(SPY+10) 1201 GOTO 1210 1202 NEXT SPY 1203 NEXT SPX 1205 GOTO 1235 1210 FOR SPZ=1 TO 44 1220 IF EAT$=SEG$(ANT$(SPZ),3,4)THEN 1370 1230 NEXT SPZ 1235 CALL HCHAR(X,Y,INT(RND*+152) 1255 X=X+INT(RND*3)-INT(RND*3) 1275 Y=Y+INT(RND*3)-INT(RND*3) 1280 IF X>0 THEN 1300 1290 X=1 1300 IF X<25 THEN 1320 1310 X=24 1320 IF Y>0 THEN 1340 1330 Y=1 1340 IF Y<33 THEN 1360 1350 Y=32 1360 CALL GCHAR(X,Y,BRD) 1361 IF BRD=42 THEN 1255 1362 IF BRD<47 THEN 1255 1365 SPIDER$=STR$(X+10)&STR$(Y+10)&SEG$(SPIDER$,5,2) 1366 CALL HCHAR(X,Y,143) 1367 GOTO 1390 1370 CALL HCHAR(X,Y,INT(RND*+152) 1372 CALL HCHAR(SPX,SPY,143) 1373 SPIDER$=STR$(SPX+10)&STR$(SPY+10)&SEG$(SPIDER$,5,2) 1374 ANT$(SPZ)="0" 1390 IF ANT$(I-47)="0" THEN 1840 1400 IF I=72 THEN 1840 1410 IF I=73 THEN 1840 1420 IF I<58 THEN 1450 1430 IF I>64 THEN 1450 1440 GOTO 1840 1450 FOR T=1 TO 5 1460 IF ANT$(I-47)="0" THEN 1840 1470 DIR=VAL(SEG$(ANT$(I-47),1,2)) 1480 X=VAL(SEG$(ANT$(I-47),3,2))-10 1490 Y=VAL(SEG$(ANT$(I-47),5,2))-10 1500 SIZE=VAL(SEG$(ANT$(I-47),7,2))-10 1501 IF SIZE<11 THEN 1510 1505 SIZE=10 1510 BRD=VAL(SEG$(ANT$(I-47),9,3)) 1520 IF T>1 THEN 1770 1530 FOR L=1 TO 8 1540 CALL SOUND(-500,(1/SIZE)*1100,0) 1550 IF BRD<>999 THEN 1730 1560 CALL HCHAR(X,Y,DIR) 1570 CALL KEY(0,KEY,STS) 1580 CALL SOUND(-100,(1/SIZE)*1100,0) 1590 CALL HCHAR(X,Y,42) 1600 IF STS=0 THEN 1560 1605 IF KEY<>32 THEN 1670 1620 SIZE=SIZE+1 1625 CALL HCHAR(BLAX,1,42) 1626 CALL HCHAR(REDX,32,42) 1630 IF SIZE<10 THEN 1650 1640 SIZE=10 1650 ANT$(I-47)=SEG$(ANT$(I-47),1,6)&STR$(SIZE+10)&STR$(999) 1660 GOTO 1840 1670 BRD=42 1680 IF I>72 THEN 1710 1690 MATE(1)=MATE(1)-(SIZE*2) 1700 GOTO 1760 1710 MATE(2)=MATE(2)-(SIZE*2) 1720 GOTO 1760 1730 CALL HCHAR(X,Y,BRD) 1740 CALL HCHAR(X,Y,I) 1750 NEXT L 1760 CALL HCHAR(X,Y,DIR) 1770 M=X 1780 N=Y 1781 IF COMPLAY=0 THEN 1790 1783 IF I<72 THEN 1790 1785 GOSUB 7900 1786 GOSUB 2230 1787 GOTO 1830 1790 CALL KEY(0,KEY,STS) 1800 IF STS=0 THEN 1790 1810 IF KEY=66 THEN 1530 1820 GOSUB 1880 1821 CALL GCHAR(BLAX,1,LOK) 1822 IF LOK=42 THEN 1826 1823 MATE(2)=MATE(2)+SIZE*2 1824 GOTO 1620 1826 CALL GCHAR(REDX,32,LOK) 1827 IF LOK=42 THEN 1830 1828 MATE(1)=MATE(1)+SIZE*2 1829 GOTO 1620 1830 NEXT T 1840 NEXT J 1850 NEXT K 1860 NEXT H 1870 GOTO 3210 1880 IF KEY<>69 THEN 1920 1890 X=X-1 1900 DIR=36 1910 GOTO 2230 1920 IF KEY<>83 THEN 1960 1930 Y=Y-1 1940 DIR=38 1950 GOTO 2230 1960 IF KEY<>88 THEN 2000 1970 X=X+1 1980 DIR=36 1990 GOTO 2230 2000 IF KEY<>68 THEN 2040 2010 Y=Y+1 2020 DIR=38 2030 GOTO 2230 2040 IF KEY<>87 THEN 2090 2050 X=X-1 2060 Y=Y-1 2070 DIR=37 2080 GOTO 2230 2090 IF KEY<>82 THEN 2140 2100 X=X-1 2110 Y=Y+1 2120 DIR=39 2130 GOTO 2230 2140 IF KEY<>90 THEN 2190 2150 X=X+1 2160 Y=Y-1 2170 DIR=39 2180 GOTO 2230 2190 IF KEY<>67 THEN 3150 2200 X=X+1 2210 Y=Y+1 2220 DIR=37 2230 IF I<72 THEN 2250 2240 DIR=DIR+8 2250 CALL HCHAR(M,N,DIR) 2260 IF X>0 THEN 2280 2270 X=1 2280 IF X<25 THEN 2300 2290 X=24 2300 IF Y>0 THEN 2320 2310 Y=1 2320 IF Y<33 THEN 2340 2330 Y=32 2340 CALL GCHAR(X,Y,GOAL) 2341 IF GOAL<>143 THEN 2355 2342 SPZ=VAL(SEG$(SPIDER$,5,2))-INT(RND*SIZE) 2343 ANT$(I-47)="0" 2344 IF INT(RND*SPZ)>SIZE THEN 2348 2345 CALL HCHAR(X,Y,INT(RND*+152) 2348 SPIDER$=SEG$(SPIDER$,1,4)&STR$(SPZ) 2349 CALL HCHAR(M,N,BRD) 2350 T=5 2351 GOTO 3110 2355 IF GOAL<>151 THEN 2420 2360 FIGHT(1)=VAL(SEG$(ANT$(I-47),7,2))+2 2370 IF FIGHT(1)<11 THEN 2390 2380 FIGHT(1)=10 2390 ANT$(I-47)=SEG$(ANT$(I-47),1,2)&STR$(X+10)&STR$(Y+10)&STR$(FIGHT(1)+10)&STR$(INT(RND*+152) 2400 T=5 2410 GOTO 3130 2420 IF GOAL>151 THEN 3120 2430 IF GOAL<>42 THEN 2690 2431 IF COMPLAY=0 THEN 2440 2432 IF Y>5 THEN 2440 2433 IF I<72 THEN 2440 2434 GOTO 3110 2440 IF I<72 THEN 2570 2450 IF Y<5 THEN 2520 2460 MATE(1)=MATE(1)-(SIZE*2) 2470 ANT$(I-47)="0" 2480 IF MATE(1)<1 THEN 3170 2490 IF INT(RND*MATE(1))+1<(SIZE*2)THEN 3170 2500 CALL HCHAR(M,N,BRD) 2510 GOTO 3110 2520 MATE(2)=MATE(2)+(SIZE*2) 2530 T=5 2540 CALL HCHAR(M,N,BRD) 2550 ANT$(I-47)=STR$(DIR)&STR$(X+10)&STR$(Y+10)&STR$(SIZE+11)&STR$(999) 2560 GOTO 3110 2570 IF Y<5 THEN 2630 2580 MATE(1)=MATE(1)+(SIZE*2) 2590 ANT$(I-47)=STR$(DIR)&STR$(X+10)&STR$(Y+10)&STR$(SIZE+11)&STR$(999) 2600 CALL HCHAR(M,N,BRD) 2610 T=5 2620 GOTO 3110 2630 MATE(2)=MATE(2)-(SIZE*2) 2640 IF MATE(2)<1 THEN 3190 2650 IF INT(RND*MATE(2))+1<(SIZE*2)THEN 3190 2660 CALL HCHAR(M,N,BRD) 2670 ANT$(I-47)="0" 2680 GOTO 3110 2690 IF I>72 THEN 2720 2700 ANT(1)=0 2710 GOTO 2730 2720 ANT(1)=1 2730 IF GOAL>39 THEN 2760 2740 ANT(2)=0 2750 GOTO 2770 2760 ANT(2)=1 2770 FIGHT(1)=VAL(SEG$(ANT$(I-47),7,2))-10 2780 CHECK$=STR$(X+10)&STR$(Y+10) 2790 FOR LEG=(ANT(2)*24)+48 TO(ANT(2)*24)+72 2800 IF SEG$(ANT$(LEG-47),3,4)=CHECK$ THEN 2820 2810 NEXT LEG 2820 FIGHT(2)=VAL(SEG$(ANT$(LEG-47),7,2))-10 2830 IF ANT(1)=ANT(2)THEN 3040 2835 FOR LOK=1 TO 2 2836 IF FIGHT(LOK)<10 THEN 2839 2837 FIGHT(LOK)=10 2839 NEXT LOK 2840 CALL SOUND(250,(1/FIGHT(1))*1100,0) 2850 CALL SOUND(250,(1/FIGHT(2))*1100,0) 2860 IF FIGHT(1)>FIGHT(2)THEN 2900 2870 FIGHT(2)=FIGHT(2)-INT(RND*(FIGHT(2)-FIGHT(1)))-INT(RND*2) 2875 IF FIGHT(1)>FIGHT(2)THEN 2920 2880 FIGHT(1)=FIGHT(1)-INT(RND*(FIGHT(2)-FIGHT(1))) 2890 GOTO 2920 2900 FIGHT(1)=FIGHT(1)-INT(RND*(FIGHT(1)-FIGHT(2))) 2910 FIGHT(2)=FIGHT(2)-(FIGHT(1)-FIGHT(2))-INT(RND*2) 2920 IF FIGHT(1)>0 THEN 2960 2930 ANT$(I-47)="0" 2940 CALL HCHAR(M,N,BRD) 2950 CALL SOUND(200,-6,4,110,0) 2960 IF FIGHT(2)>0 THEN 2990 2970 CALL HCHAR(X,Y,VAL(SEG$(ANT$(LEG-47),9,3))) 2980 ANT$(LEG-47)="0" 2990 IF FIGHT(1)<1 THEN 3040 3000 IF FIGHT(2)<1 THEN 3040 3010 CALL SOUND(1500,110,30) 3020 CALL SOUND(250,(1/FIGHT(1))*1100,0) 3030 CALL SOUND(250,(1/FIGHT(2))*1100,0) 3040 X=M 3050 Y=N 3060 IF ANT$(I-47)="0" THEN 3080 3070 ANT$(I-47)=STR$(DIR)&SEG$(ANT$(I-47),3,4)&STR$(FIGHT(1)+10)&STR$(BRD) 3080 IF ANT$(LEG-47)="0" THEN 3110 3090 ANT$(LEG-47)=SEG$(ANT$(LEG-47),1,6)&STR$(FIGHT(2)+10)&SEG$(ANT$(LEG-47),9,3) 3100 GOAL=BRD 3110 RETURN 3120 ANT$(I-47)=STR$(DIR)&STR$(X+10)&STR$(Y+10)&STR$(SIZE+10)&STR$(GOAL) 3130 CALL HCHAR(M,N,BRD) 3140 CALL HCHAR(X,Y,DIR) 3150 CALL SOUND(1500,110,30) 3160 RETURN 3170 PRINT "BLACK WON!" 3180 END 3190 PRINT "RED WON!" 3200 END 3210 IF MATE(1)>MATE(2)THEN 3240 3220 PRINT "BLACK WON!" 3230 END 3240 IF MATE(1)=MATE(2)THEN 3270 3250 PRINT "RED WON!" 3260 END 3270 PRINT "TIE!" 3280 END 7900 IF Y>28 THEN 9000 8000 FOR ALX=-1 TO 1 8001 IF X+ALX<1 THEN 8100 8002 IF X+ALX>24 THEN 8100 8005 FOR ALY=-1 TO 1 8007 IF Y+ALY<1 THEN 8090 8009 IF Y+ALY>32 THEN 8090 8011 CALL GCHAR(X+ALX,Y+ALY,LOK) 8015 IF LOK>40 THEN 8090 8020 X=X+ALX 8030 Y=Y+ALY 8035 DIR=DIR-8 8040 RETURN 8090 NEXT ALY 8100 NEXT ALX 9000 IF INT(I/4)<>I/4 THEN 9100 9010 IF Y=INT(RND*2)THEN 10000 9012 IF Y=1 THEN 9105 9015 IF Y=INT(RND*2)+2 THEN 9105 9020 Y=Y-1 9030 GOTO 10000 9100 IF Y=32 THEN 9700 9105 Y=Y+1 9120 GOTO 10000 9500 IF X<BLAX THEN 9520 9505 IF X=BLAX THEN 9900 9510 X=X-1 9515 GOTO 9900 9520 X=X+1 9525 GOTO 9900 9700 IF X<REDX THEN 9720 9710 X=X-1 9715 GOTO 9900 9720 X=X+1 9900 DIR=38 9910 RETURN 10000 FOR ALX=-1 TO 1 10020 IF X+ALX<1 THEN 10100 10030 IF X+ALX>24 THEN 10100 10070 CALL GCHAR(X+ALX,Y,LOK) 10071 IF Y<5 THEN 10074 10072 IF LOK=42 THEN 11000 10074 IF LOK=42 THEN 10100 10075 IF LOK=151 THEN 11000 10077 IF LOK<40 THEN 11000 10079 IF LOK>48 THEN 10100 10080 ALX=INT(RND*3)-1 10081 IF X+ALX<1 THEN 10080 10082 IF X+ALX>24 THEN 10080 10083 CALL GCHAR(X+ALX,Y,LOKO) 10084 IF LOKO=42 THEN 10080 10085 JACK=JACK+1 10086 IF JACK=6 THEN 11000 10087 IF LOKO<48 THEN 10080 10088 GOTO 11000 10100 NEXT ALX 10105 IF Y>3 THEN 10110 10106 IF ABS(BLAX-X)>0 THEN 10110 10107 GOTO 9700 10110 IF Y<8 THEN 9500 10120 GOTO 9700 11000 X=X+ALX 11001 JACK=0 11002 DIR=DIR-8 11005 RETURN
-
-
Willsy, it's .. Bloody awesome!
Can't wait for TF Manic Miner now. -
Excellent, cheers Willsy! I was nearly there, was using TF 1.1 and an unformatted source of your Dark Star code.
-
I want to play it Willsy, how do I run it? Do I need to make a BLOCKS file from the above code, if so then how can I import the code?
-
Atlantis is inaccessible right now (both the city and the game), but I will be getting to it when I have finished setting my computer room back up, and have all the rest of my TI goodies unboxed and sorted.
Thank Keith, I'll keep my fingers crossed it's not too long to wait and look forward to playing it.
-
Excellent, nice one Keith! Already have the manual scan here thanks, seeing as your here I've been trying to get hold of a copy of "Atlantis" by Intrigue, as your original post of yonks ago whetted the appetite - did you manage a disk conversion? If not any chance of a d/l of .wav of the cassette so I can play it in MESS?
-
I have a ti99 game called Ant Wars Keith, don't think it's the version your after though as it does'nt mention anything about not polyoptics, written by a "J Planty".
-
Long time no update
-
Any progress on this game? This looks too awesome to go unfinished.
-
Nice project, did this game ever see the light of day?
-
The header says it's a c99 source code, by the author of c99 no less, so I'd have to assume yes. If not, it's not hard to put together a quick memory allocator.
It never frees the memory it allocates so they could just as easily be statically defined.So we can has Core Wars 4A

-
Just offhand, what makes it Geneve specific? I'm not seeing anything with a quick scan of the source...? I went so far as to try a quick port to Windows.. seems to be all console I/O except for a single call sound, which the 4A could do.

That said, the header isn't included so I don't know how big the program can be, or how to actually play it...

hmm, possible TI99/4A conversion here?
-
Geneve. I have it and have played with it a bit.
Thanks Hatter, any chance of posting the compiled version on here so I can take a look at it?
-
Found this C source code without any compiled version to run, does anyone know if it's for TI99/4A or Geneve?
/* COREW_C The game of Core War, as described by A.K. Dewdney in ** the May 1984 issue of Scientific American (pp 14-24) ** ** Copyright (c) 1984 Kevin A. Bjorke ** Released to the Public Domain for Non-Commercial Use Only ** ** c99 conversion by Clint Pulley - last edit 990418 1820 */ /* Opcode format : ** ** Since the Redcode Instruction set has only 9 instruction and 3 addressing ** modes, the code is split into three fields: ** ** Bit: 7 6 5 4 3 2 1 0 ** a a b b i i i i ** ** where a = mode of argument a ** b = mode of argument b ** i = instruction (0-8 -- 9-15 treated as 0, or invalid) ** ** modes: 0 = immediate 1 = direct 2 = indirect */ #include "hds1.c99.h.STDIO_H" #include "hds1.c99.h.CTYPE_H" #include "hds1.c99.h.STRING_H" #include "hds1.c99.h.STDLIB_H" #include "corew_h" /* ** Global Variables ** */ char *proga,*progb; /* names of the battle programs */ char *line; /* input buffer */ int pc[2]; /* Redcode program counters */ int toss,b1,b2; /* Variables for random starting loc */ int bot,top; /* Start/end location counters */ int instr; /* Current instruction */ int modea,modeb;/* Current addressing modes -- see below */ int now; /* programs 0 and 1 (pc index) */ int a,b,res; /* working storage for Redcode instructions */ int show; /* used to differentiate between showing and executing code */ int fulist; /* flag for full list option */ int *code; /* Redcode Instructions */ int *arga; /* Battle Prog Arguments */ int *argb; /* Total: 6 bytes per "location" */ FILE fp; /* ** Main Program ** */ main() { proga=malloc(41); progb=malloc(41); line=malloc(20); code=malloc(2*MAXSIZE); arga=malloc(2*MAXSIZE); argb=malloc(2*MAXSIZE); randomize(); while (TRUE) { logo(); clean(); prepare(); fight(); puts("\nList Memory? "); if (toupper(getchar()) == 'Y') showmem(0,MAXSIZE); puts("\n\nPlay Again (Y/N) ? "); if (toupper(getchar()) != 'Y') break; } puts("\n\n\tThththththat\'s all, folks....\n"); } /* Advertise the program and get game options */ logo() { puts("\f\n\n\t\t****************************************\n"); puts("\t\t** **\n"); puts("\t\t** C O R E W A R **\n"); puts("\t\t** **\n"); puts("\t\t****************************************\n\n\n"); printf("\t\t Core memory size = %4d locations\n\n",MAXSIZE); printf("\t\tMARS Version %s Kevin Bjorke 5/28/84\n\n",VERSION); printf("\t\tc99 conversion by Clint Pulley %s\n\n",REVDATE); puts( "\t\t\tFull listings? (y/n) "); fulist=0; if(toupper(getchar())=='Y')fulist=1; puts("\n\n"); } /* Input Routines ** */ /* Read in both programs */ prepare() { char *p; puts("\n\tEnter the name of Battle-Program A: "); gets(proga); puts("\n\tEnter the name of Battle-Program B: "); gets(progb); for (p = progb; *p; ++p) *p = toupper(*p); for (p = proga; *p; ++p) *p = toupper(*p); toss=rnd(2); b=MAXSIZE/5; b1 = rnd(b); b2 =(MAXSIZE / 2)+rnd(b); if(toss) bot=b1; else bot=b2; if ((fp = fopen(proga,"r")) == NULL) { printf("\f\n\nPlease enter code for %s:\n\n",proga); top = getprog(proga,bot); } else top = fgetprog(fp,bot); printf("\nNow listing Program %s:\n",proga); showmem(bot,top); pc[0] = bot; getpc(0); if(toss) bot=b2; else bot=b1; if ((fp = fopen(progb,"r")) == NULL) { printf("\f\n\nPlease enter code for %s:\n\n",progb); top = getprog(progb,bot); } else top = fgetprog(fp,bot); printf("\nNow listing Program %s:\n",progb); showmem(bot,top); pc[1] = bot; getpc(1); } /* get a program from the keyboard */ getprog(prg,ct) char *prg; int ct; { int i,row; char *pt; row = 10; puts("Enter program one line at a time.\n"); puts("Pressing RETURN between arguments.\n"); puts(" Use END to finish\n\n"); header(9); while (TRUE) { modea = modeb = DIRECT; locate(row,1); stout(ct); locate(row,10); gets(line); for (i = 0; line[i]; ++i) { if ((line[i] == '\t') || (line[i] == ' ')) line[i] = '\0'; line[i] = toupper(line[i]); } if ((i = getinst(ct)) == NULL) break; if (i == ERROR) { locate(row,10); puts("\007???\n"); continue; } locate(row,50); puts(line); if (code[ct] != 0) { locate(row,20); gets(line); pt = line; locate(row,60); if (*pt == '@') { puts("Indirect"); modea = INDEXED; ++pt; } else if (*pt == '#') { puts("Immediate"); modea = IMMEDIATE; ++pt; } else puts("Direct"); i = atoi(pt); arga[ct] = i; } if (code[ct] != 4) { locate(row,30); gets(line); pt = line; locate(row,70); if (*pt == '@') { puts("Indirect"); modeb = INDEXED; ++pt; } else if (*pt == '#') { puts("Immediate"); modeb = IMMEDIATE; ++pt; } else puts("Direct"); i = atoi(pt); argb[ct] = i; } modea = modea*64; modeb = modeb*16; code[ct] = code[ct]+(modea&192)+(modeb&48); ++ct; if ((++row) > 23) { row = 2; puts("\f"); header(1); } } printf("\n\tCode for %s completed.\n",prg); return(ct); } /* get a program from a file */ fgetprog(prg,ct) int prg,ct; { int i; char *pt; puts("\nNow reading program file...\n\n"); while (TRUE) { modea = modeb = DIRECT; if (nextword(prg) == FALSE) break; if ((i = getinst(ct)) == NULL) break; if (i == ERROR) { puts("\007\nError - file fouled up!!!\n"); exit(7); } if (code[ct] != 0) { nextword(prg); arga[ct] = rdarg(&modea); } if (code[ct] != 4) { nextword(prg); argb[ct] = rdarg(&modeb); } modea = modea*64; modeb = modeb*16; code[ct] = code[ct]+(modea&192)+(modeb&48); ++ct; } fclose(prg); return(ct); } /* select an instruction from the value in line[] */ getinst(indx) int indx; { if (strcmp(line,"MOV") == NULL) code[indx] = 1; else if (strcmp(line,"ADD") == NULL) code[indx] = 2; else if (strcmp(line,"SUB") == NULL) code[indx] = 3; else if (strcmp(line,"JMP") == NULL) code[indx] = 4; else if (strcmp(line,"JMZ") == NULL) code[indx] = 5; else if (strcmp(line,"JMG") == NULL) code[indx] = 6; else if (strcmp(line,"DJZ") == NULL) code[indx] = 7; else if (strcmp(line,"CMP") == NULL) code[indx] = 8; else if (strcmp(line,"DAT") == NULL) code[indx] = 0; else if (strcmp(line,"END") == NULL) return(NULL); else return(ERROR); return(TRUE); } /* get an argument value from line[] */ rdarg(md) int *md; { char *pt; int i; pt = line; if (*pt == '@') { *md = INDEXED; ++pt; } else if (*pt == '#') { *md = IMMEDIATE; ++pt; } i = atoi(pt); return(i); } /* set the program counters to their initial locations */ getpc(i) int i; { puts("\nStart execution at location: "); gets(line); pc[i] = reladr(atoi(line),0); } /* print programming header on screen */ header(rw) int rw; { locate(rw,1); puts("Addr"); locate(rw,10); puts("Instr"); locate(rw,20); putchar('A'); locate(rw,30); putchar('B'); locate(rw,55); puts("Modes:"); } /* Get the next word from a TEXTfile, making sure to capitalize */ nextword(fil) int fil; { char *pt; int c; pt = line; c = '\t'; while (isspace(c)) if ((c = toupper(getc(fil))) == EOF) return (FALSE); while (!isspace(c)) { *pt++ = c; if ((c = toupper(getc(fil))) == EOF) return (FALSE); } *pt++ = '\0'; return(TRUE); } /* Show memory */ showmem(start,finish) int start, finish; { int ct; printf("\n\nAddresses %4d through %4d.\n",start,(finish-1)); puts("\nPress ^E to Abort, any other key to pause\n\n"); show = TRUE; for (ct = start; ct < finish; ++ct) { readloc(ct); putchar('\n'); if (keypaus() == ENQ) break; } } /* MASTER BATTLE ROUTINES ** */ /* Fight it out */ fight() { int ct, i; char *w; show = FALSE; w=NULL; puts("\n\tPRESS ANY KEY TO BEGIN "); while(poll(0)); while(!poll(0)); puts("\f\t\t\tBeginning Battle!!!\n\n"); puts("\tPress ^E to Abort, any other key to pause\n\n"); printf("\tLeft side is %s\n\tRight side is %s\n\n\n",proga,progb); for (ct = 0; ct < CUTOFF; ++ct) { if ((ct % 5) == 0) putchar('\n'); stout(ct); now = 0; if (readloc(pc[0]) == NULL) { w=progb; break; } puts(" "); now = 1; if (readloc(pc[1]) == NULL) { w=proga; break; } putchar('\n'); if (keypaus() == ENQ) break; for (i = 0; i <2; ++i) pc[i] = reladr(pc[i],0); } sound(30,220,0,440,1,880,3); printf("\n\nBattle Completed after %d instruction cycles!\n\n",ct); if (ct == CUTOFF || !w) puts("The outcome is a DRAW\n"); else printf("The winning program is %s\n",w); } /* read a location, print the mnemonic, and perform it */ readloc(loc) int loc; { instr = modea = modeb = code[loc]; instr = instr&15; modea = (modea / 64) & 3; modeb = (modeb / 16) & 3; res = -1; switch(instr) { case 1 : mov(); break; case 2 : add(); break; case 3 : sub(); break; case 4 : jmp(); break; case 5 : jmz(); break; case 6 : jmg(); break; case 7 : djz(); break; case 8 : cmp(); break; default: puts("DAT"); if(fulist && !show) puts(" "); res = NULL; } printf(" %c%4d %c%4d [%4d]",mnem(modea), arga[loc],mnem(modeb),argb[loc],loc); return(res); } /* functions to perform Redcode operations ** */ /* Redcode MOV instruction */ mov() { puts("MOV"); if (show) return(NULL); b = findadr(pc[now], argb, modeb); if (modea == IMMEDIATE) { code[b] = 0; /* make it a DAT */ argb[b] = arga[pc[now]]; if(fulist) printf("|#%4d>%4d|",arga[pc[now]],b); } else { a = findadr(pc[now], arga, modea); if(fulist) printf("| %4d>%4d|",a,b); code[b] = code[a]; arga[b] = arga[a]; argb[b] = argb[a]; } ++pc[now]; } /* Redcode ADD instruction */ add() { puts("ADD"); if (show) return(NULL); b = findadr(pc[now], argb, modeb); if (modea == IMMEDIATE) { argb[b] = argb[b]+arga[pc[now]]; if(fulist) printf("|#%4d+%4d|",arga[pc[now]],b); } else { a = findadr(pc[now], arga, modea); if(fulist) printf("| %4d+%4d|",b,a); argb[b] = argb[b]+arga[a]; } ++pc[now]; } /* Redcode SUB instruction */ sub() { puts("SUB"); if (show) return(NULL); b = findadr(pc[now], argb, modeb); if (modea == IMMEDIATE) { argb[b] = argb[b]-arga[pc[now]]; if(fulist) printf("|%4d-#%4d|",b,arga[pc[now]]); } else { a = findadr(pc[now], arga,modea); if(fulist) printf("|%4d- %4d|",b,a); argb[b] = argb[b]-arga[a]; } ++pc[now]; } /* Redcode JMP Instruction */ jmp() { puts("JMP"); if (show) return(NULL); pc[now] = findadr(pc[now], arga, modea); if(fulist) printf("| %4d |",pc[now]); } /* Redcode JMZ instruction */ jmz() { puts("JMZ"); if (show) return(NULL); b = findadr(pc[now], argb, modeb); if(fulist) printf("| %4d |",b); if (argb[b] == 0) pc[now] = findadr(pc[now], arga, modea); else ++pc[now]; } /* Redcode JMG Instruction */ jmg() { puts("JMG"); if (show) return(NULL); b = findadr(pc[now], argb, modeb); if(fulist) printf("| %4d |",b); if (argb[b] > 0) pc[now] = findadr(pc[now], arga, modea); else ++pc[now]; } /* Redcode DJZ Instruction */ djz() { puts("DJZ"); if (show) return(NULL); b = findadr(pc[now], argb, modeb); if(fulist) printf("| %4d |",b); if ((--argb[b]) == NULL) pc[now] = findadr(pc[now], arga, modea); else ++pc[now]; } /* Redcode CMP Instruction */ cmp() { puts("CMP"); if (show) return(NULL); if (modea != IMMEDIATE) { a = findadr(pc[now], arga, modea); a = argb[a]; } else a = arga[pc[now]]; if (modeb != IMMEDIATE) { b = findadr(pc[now], argb, modeb); b = argb[b]; } else b = argb[pc[now]]; ++pc[now]; if(fulist) printf("|%4d==%4d|",a,b); if (a != b) ++pc[now]; } /* Addressing Routines ** */ /* find an address via direct or indirect */ findadr(orig,pab,mod) int orig, *pab, mod; { int p; if (mod == IMMEDIATE) return(orig); p = reladr(orig,pab[orig]); if (mod == INDEXED) p = reladr(p,argb[p]); return(p); } /* return an absolute address in the circular arena from a relative one */ reladr(abs,rel) int abs,rel; { int j; if ((j = abs + rel) >= MAXSIZE) j = reladr((j - MAXSIZE),0); else if (j < 0) j = reladr((j + MAXSIZE),0); return(j); } /* Miscellaneous routines ** */ /* Start with a "clean slate" in the battle-code arena */ clean() { int i; for (i = 0; i < MAXSIZE; ++i) { code[i] = '\0'; arga[i] = NULL; argb[i] = NULL; } } /* return appropriate character for addressing modes */ mnem(c) int c; { c = c&255; if (c == IMMEDIATE) return('#'); else if (c == INDEXED) return('@'); else return('.'); } /* print a string to stderr from an integer <= 9999 */ stout(i) int i; { printf("%4d:",i); } /* pause if key pressed - return key value */ keypaus() { int c; c=poll(0); while(poll(0)); return(c); } -
The attached disk image contains the game "Hordes" which has proved a bit of a bugger to find, however the listing appears to be bugged, can any TI basic coders out there help to put this right?
OX.
A look at the data file shows a bunch of 16 digit strings (character definitions ?) separated by periods. In the middle of this is oddly a 2 digit string of 'FF'.
At first glance the problem appears to lie there.
Yes I agree they seem to be character definitions as when I run the game without the file import code I get no game graphics which I think is what the data file is.
-
As far as I know these are the only two files associated with the game, the original on cassette being a case of loading the first file on side A then flipping the cassette to load the data file, so this disk version is probably a hack version of the cassette.
-
I think it originally came from a cassette re this article - http://www.retrogamingtimes.com/rtm69/ (scroll down to the article by Keith Bergman), iv'e tried finding it for quite a while and up until now this is the only copy I can find in existence apart from the one in the article by Keith Bergman (InfernalKeith on here) has along with Atlantis. The datafile could be bad or maybe it's been saved to disk after it's been loaded from cassette and the redefined output has been saved instead of the original file, if this is the case I wonder if the redefinition bit can be skipped and just load the file as is or reverse engineer the definition code to produce the original data file.
-
pleeeeease

-
Thought I'd bang out the cartridge while I was just sitting here with nothing better to do.
Busywork, guess nobody else felt like doing it...
Wow, that's service!
Thanks Gazoo. -
The attached disk image contains the game "Hordes" which has proved a bit of a bugger to find, however the listing appears to be bugged, can any TI basic coders out there help to put this right?
OX.
-
Trying to run this unreleased title from a development disk without any luck - any ideas?
Here it is in EA5 format. If you really want in in cart format, it'll take some time as I'll have to fire up the SNUG system
and transfer it there to make the cart.etonland.zip
Thanks Gazoo.
-
It's been a cart image for quite a few years
Any idea where I can get this cart image?

Battle For Earth
in TI-99/4A Development
Posted
Yes it's a bit of a mess, jumping to line numbers that don't exist and not undrawing graphics in places.