ti99iuc Posted November 19, 2017 Share Posted November 19, 2017 (edited) The tantalizing one is the UK edition according to The Cyc. The wording of the title is supposed to be the only difference. There is a dutch (Tergende spelen...) and german version (Superspiele...) of the book as well. Many thanks, @KL99. There is also a French version, although it changes one of the author credits: Les Grands Classiques du Jeu pour votre TI-99/4A yes both true, these are the versions I found in the years indeed, so i noted that the dutch version missing to me : Edited November 19, 2017 by ti99iuc Quote Link to comment Share on other sites More sharing options...
+adamantyr Posted November 19, 2017 Share Posted November 19, 2017 I love that one "Homeward Bound". It actually has two speech effects, a croaking frog and a swishing sound when blood gushed out of your frog if he got ran over by a car. They don't render as well on the emulators though; like a lot of custom speech the newer core messes them up a bit. I typed it in long ago, I can find it in my archives and share both file and listing here. I've wondered for years how the author figured out how to make the sounds... nothing about the speech synthesizer was well documented and neither sound seems to have roots with any of the built in vocabulary. Listing: 10 ! ////////////// 20 ! / HOME BOUND / 30 ! ////////////// 40 ! 50 !//1ST SCREEN// 60 CALL CLEAR :: PRINT TAB(;"<<<<<<<>>>>>>>":TAB(;"< HOME BOUND >":TAB(;"<<<<<<<>>>>>>>": : : : : : : : : : : 70 CALL SOUND(100,888,0) :: PRINT " DO YOU NEED INSTRUCTIONS?"; 80 CALL KEY(0,K,S) :: IF S=0 THEN 80 ELSE IF K-89 THEN 150 90 PRINT TAB(10);"HOME BOUND": :" YOU ARE APPROACHED BY A GROUP OF AMPHIBIANS AND THEYASK YOU TO HELP THEM GET HOME..." 100 PRINT:"CONTROLS: ARROW KEYS": :TAB(12);"POINTS": :"HOP ON GROUND = 5 PTS":" HOP ON LOGS = 10 PTS" 110 PRINT " BLACK BUG = 80 PTS":" WHITE BEE = 200 PTS": :"GET HOME BEFORE BEE REACHES RIGHT EDGE OF SCREEN!" 120 PRINT:"USE "S"/"D" TO LICK BEE.": :"FREE FROG EVERY 1000 POINTS.": :"GOOD LUCK...PRESS ANY KEY"; 130 CALL KEY(0,K,S) :: IF S=0 THEN 130 140 ! // INITIALIZE // 150 DIM C$(1,1),N$(2),N(2) :: CALL CHARPAT(63,A$) :: CALL CHAR(59,A$) 160 CALL INIT :: CALL LOAD(-31878,0) :: CALL SPCH(CR$,BL$) :: CALL CLEAR :: RANDOMIZE :: CALL MAGNIFY(3) :: A$=RPT$("0",42) 170 CALL CHAR(33,RPT$("0",12)&"C0C"&RPT$("0",14)&"30300285A7E7E5A2800",36,"183C6C397E396C3C18"&A$) 180 CALL CHAR(40,"7F9EF17F8FF16F3700000000000000003FFACFFF96FFCD7E0") 190 CALL CHAR(44,"02051F1B1C0F21777F7F3E3F1E1F36362050FCEC1CF8C2F7FF7FBEFEBCFCB636",60,A$&A$) 200 CALL CHAR(128,"077BDD9D9DDD7B070000000000000000FFFDFFFFFFFFFDFF0") 210 CALL CHAR(132,"7073AEFDFDAE737000000000000000003CE4F8FCFCF8E43C0") 220 CALL CHAR(136,"3F151F3E3E1F153F0000000000000000B66ECEC6C6CE6EB60") 230 CALL CHAR(140,"38777C7F7F7C7738000000000000000070F8BCDCDCBCF8700") 240 C$(0,0)=RPT$("0",39)&"77CE" :: C$(0,1)="00C0E0603E0F00000000000000000000000000077CE" 250 C$(1,0)="000000E03E07" :: C$(1,1)="000000E03E0700000000000000000000000307067CF" 260 CALL CHAR(112,"00425A3C7E9942C3"&A$) 270 CALL CHAR(116,"506B0C0E0E0C6B5"&A$) 280 CALL CHAR(120,"00C342817E3C5A42"&A$) 290 CALL CHAR(124,"0AD630707030D6"&A$) 300 CALL CHAR(96,"105438100083") 310 CALL CHAR(100,"0000000000008183C3466C380000000000000E0B0F0C848CD858783") 320 RESTORE 1310 :: READ A$ :: CALL CHAR(92,A$,104,RPT$("F",22)&"07FFFFFFFFFFFFFF00FF00FFFFFF") 330 FOR I=3 TO 8 :: CALL COLOR(I,2,4) :: NEXT I 340 CALL SCREEN(4) :: CALL COLOR(1,2,6,2,2,6,9,3,4,10,2,12,11,13,4) 350 !//1ST SCREEN// 360 ! // SET UP // 370 SC=0 :: SC1=1000 :: S=7 :: FS=4 380 CALL HCHAR(23,1,96,128) 390 CALL HCHAR(14,1,96,64) 400 CALL HCHAR(16,1,104,224) :: CALL HCHAR(17,1,105,32) :: CALL HCHAR(19,1,106,32) :: CALL HCHAR(21,1,105,32) 410 CALL LOAD(-31878,0) :: FOR I=4 TO 31 STEP 5 :: CALL HCHAR(1,I,32,2) :: CALL HCHAR(2,I,33) :: CALL HCHAR(2,I+1,34) :: NEXT I 420 H=0 :: CALL SPRITE(#27,60,7,1,1) 430 ! /LOGS/ 440 X=24 450 FOR I=1 TO 11 STEP 5 :: A=24 :: FOR J=I+1 TO I+5 :: CALL SPRITE(#J,40,15,A,X) :: A=A+16 :: NEXT J :: X=X+87 :: NEXT I 460 ! /VEHICLES/ 470 A=120 480 FOR I=17 TO 20 :: CALL SPRITE(#I,(I-17)*4+128,INT(RND*13+3),A,1,#I+4,(I-17)*4+128,INT(RND*13+3),A,INT(RND*200+30)) :: A=A+16 :: NEXT I 490 ! /ARRAY/ 500 FOR I=0 TO 4 :: RANDOMIZE :: CALL COLOR(#I+2,15,#I+7,15,#I+12,15) :: IF INT(RND*2)AND H THEN 540 510 M(I)=INT(RND*S+RND*4)+1 :: IF M(I)=0 THEN 510 520 B=(I/2=INT(I/2)) :: IF B=0 THEN B=B+1 530 M(I)=M(I)*B 540 NEXT I :: CALL SCREEN(4) 550 FOR J=0 TO 4 :: CALL MOTION(#J+2,0,M(J),#J+7,0,M(J),#J+12,0,M(J)) :: NEXT J 560 !/MOVE CARS/ 570 FOR I=17 TO 20 580 RANDOMIZE :: IF INT(RND*3)=0 AND H THEN 590 ELSE B=SGN(I-18.5)*INT(RND*S+4+RND*4+1) :: CALL MOTION(#I,0,B,#I+4,0,B) 590 NEXT I :: GOTO 610 600 FOR I=0 TO 4 :: CALL COLOR(#I+2,15,#I+7,15,#I+12,15) :: NEXT I 610 CALL LOAD(-31878,26) :: CALL SPRITE(#1,112,13,183,126,#25,36,16,1,16) :: IF INT(RND*3)>0 THEN CALL SPRITE(#26,100,2,104,1,0,RND*6+3) 620 RANDOMIZE :: B=INT(RND*6) :: CALL GCHAR(1,B*5+5,I) :: IF I=32 THEN CALL VCHAR(1,B*5+5,35)ELSE B=-4/5 630 ! // START // 640 CALL HCHAR(23,1,96,32) :: DISPLAY AT(24,3)SIZE(FS):RPT$(CHR$(112),FS-1)&CHR$(96) 650 DISPLAY AT(23,12)SIZE(6)BEEP:"READY;" :: FOR I=1 TO 8 :: CALL KEY(0,K,ST) :: IF ST THEN I=10 660 NEXT I :: CALL HCHAR(23,1,96,32) :: IF I=9 THEN 650 ELSE CALL HCHAR(15,10,96,15) 670 X=183 :: Y=126 :: CALL MOTION(#25,0,S/3) 680 !/ON LAND SECTION/ 690 CALL KEY(0,K,ST) :: CALL POSITION(#25,X1,Y1) :: IF Y1>243 THEN CALL TIMEEND :: GOTO 1060 ELSE IF ST=0 THEN 800 700 IF K-69 THEN 720 ELSE IF X<104 THEN 840 ELSE X=X-8 :: CALL PATTERN(#1,112) :: CALL LOCATE(#1,X,Y) :: GOSUB 790 710 IF HIT THEN 1060 ELSE X=X-8 :: CALL LOCATE(#1,X,Y) :: CALL SOUND(-100,690, :: GOTO 800 720 IF K-68 THEN 740 ELSE IF Y>248 THEN 780 ELSE Y=Y+4 :: CALL PATTERN(#1,116) :: CALL LOCATE(#1,X,Y) :: GOSUB 790 730 IF HIT THEN 1060 ELSE Y=Y+4 :: CALL LOCATE(#1,X,Y) :: CALL SOUND(-100,680, :: GOTO 800 740 IF K-88 THEN 760 ELSE IF X>180 THEN 780 ELSE X=X+8 :: CALL PATTERN(#1,120) :: CALL LOCATE(#1,X,Y) :: IF X>96 THEN GOSUB 790 ELSE HIT=0 750 IF HIT THEN 1060 ELSE X=X+8 :: CALL LOCATE(#1,X,Y) :: CALL SOUND(-100,880, :: GOTO 800 760 IF K-83 THEN 800 ELSE IF Y<12 THEN 780 ELSE Y=Y-4 :: CALL PATTERN(#1,124) :: CALL LOCATE(#1,X,Y) :: GOSUB 790 770 IF HIT THEN 1060 ELSE Y=Y-4 :: CALL LOCATE(#1,X,Y) :: CALL SOUND(-100,830, :: GOTO 800 780 CALL SOUND(100,110,5) :: GOTO 690 790 CALL COINC(ALL,HIT) :: CALL SOUND(-100,220,7) :: SC=SC+5 :: RETURN 800 CALL COINC(ALL,HIT) :: IF NOT HIT THEN CALL COINC(ALL,HIT) :: IF NOT HIT THEN CALL COINC(ALL,HIT) :: IF NOT HIT THEN 690 810 GOTO 1060 820 !/IN WATER SECTION/ 830 CALL KEY(0,K,ST) :: CALL POSITION(#25,X1,Y1) :: IF Y1>243 THEN CALL TIMEEND :: GOTO 1060 ELSE IF ST=0 THEN 830 ELSE CALL SOUND(10,999,5) 840 IF K-69 THEN 850 ELSE CALL MOTION(#1,0,0) :: CALL POSITION(#1,X,Y) :: IF X<24 THEN 900 ELSE CALL PATTERN(#1,112) :: CALL LOCATE(#1,X-16,Y) :: C=39 :: GOTO 1100 850 IF K-68 THEN 860 ELSE CALL MOTION(#1,0,0) :: CALL POSITION(#1,X,Y) :: IF Y>248 THEN 1060 ELSE CALL PATTERN(#1,116) :: CALL LOCATE(#1,X,Y+ :: C=23 :: GOTO 1100 860 IF K-88 THEN 870 ELSE CALL MOTION(#1,0,0) :: CALL POSITION(#1,X,Y) :: IF X<87 THEN CALL PATTERN(#1,120) :: CALL LOCATE(#1,X+16,Y) :: C=7 :: GOTO 1100 ELSE 740 870 IF K-83 THEN 880 ELSE CALL MOTION(#1,0,0) :: CALL POSITION(#1,X,Y) :: IF Y<12 THEN 1060 ELSE CALL PATTERN(#1,124) :: CALL LOCATE(#1,X,Y- :: C=23 :: GOTO 1100 880 GOTO 820 890 !/LAND IN HOME/ 900 IF Y>250 THEN 1060 ELSE Y=Y+4 :: CALL MOTION(#25,0,0) :: Y=INT(Y/8+.5)+1 :: CALL GCHAR(2,Y,HIT) :: IF HIT-34 THEN 1060 ELSE CALL GCHAR(1,Y,HIT) :: H=H+1 :: SC=SC+50 910 CALL DELSPRITE(#1) :: CALL SOUND(60,-3,0,110,0) :: CALL VCHAR(1,Y-1,44) :: CALL VCHAR(1,Y,46) :: CALL VCHAR(2,Y-1,45) :: CALL HCHAR(2,Y,47) 920 CALL SAY(,CR$,,CR$) :: IF HIT=35 THEN CALL SOUND(200,880,0,330,5) :: CALL SOUND(100,770,0) :: CALL SOUND(300,550,0)ELSE CALL VCHAR(1,B*5+5,32) 930 Y=(Y-1)*8 :: CALL KEY(0,K,I) :: IF K-83 AND K-68 THEN 1000 ELSE CALL POSITION(#25,X,I) :: CALL LOCATE(#27,3,Y+16*(K=83))!/LICK/ 940 CALL SOUND(-200,-7,19) :: CALL CHAR(60,C$((K=83)+1,0)) :: CALL SOUND(-240,-5,16) :: CALL CHAR(60,C$((K=83)+1,1)) 950 CALL COINC(ALL,I) :: IF I=0 THEN CALL COINC(ALL,I) :: IF I=0 THEN 980 960 CALL SOUND(50,-5,9,110,4) :: SC=SC+200 :: CALL CHAR(36,"0C1E0202060C181E"&RPT$("0",16)&"44EEAAAAAAAAEE44") 970 FOR I=800 TO 2000 STEP 100 :: CALL SOUND(99,I,4) :: NEXT I :: CALL DELSPRITE(#25) :: CALL CHAR(36,"183C6C397E396C3C18"&RPT$("0",15)) 980 IF K=68 THEN CALL CHAR(62,"0") 990 CALL CHAR(60,RPT$("0",33)) :: CALL LOCATE(#27,1,1) 1000 DISPLAY AT(15,10)SIZE(LEN(STR$(SC))+6):"SCORE:"&STR$(SC) :: IF HIT=35 THEN DISPLAY AT(23,10)SIZE(:"BONUS:80" :: CALL DING(SC,80) 1010 GOSUB 1140 :: IF S<14 THEN S=S+1 1020 IF H-6 THEN 1050 ELSE CALL SCREEN(6) :: DISPLAY AT(23,10)SIZE(10):"BONUS:500";CHR$(96) :: CALL DING(SC,500) :: CALL SONG(55) :: GOSUB 1140 1030 FOR I=4 TO 31 STEP 5 :: CALL SOUND(200,770-I*10,0) :: CALL HCHAR(2,I,33) :: CALL HCHAR(2,I+1,34) :: CALL VCHAR(1,I,45) :: CALL VCHAR(1,I+1,47) 1040 CALL SOUND(200,770+I*10,0) :: CALL HCHAR(1,I,32,2) :: NEXT I :: H=0 :: CALL SONG(14) :: GOTO 610 1050 X=14 :: CALL SONG(X) :: GOTO 1070 1060 CALL VCHAR(1,B*5+5,32) :: CALL MOTION(#25,0,0) :: IF X<104 THEN CALL DROWN(FS)ELSE CALL SQUISH(FS,BL$) 1070 CALL DELSPRITE(#25,#26) :: DISPLAY AT(15,10)SIZE(LEN(STR$(SC))+6):"SCORE:"&STR$(SC) :: GOSUB 1140 1080 IF FS=0 THEN CALL OVER(SC,N$(),N()) :: GOTO 370 ELSE IF X=14 THEN 500 ELSE CALL FROGO(FS+3,15) :: GOTO 600 1090 !/LAND ON LOGS/ 1100 CALL COINC(ALL,HIT) :: IF NOT HIT THEN CALL COINC(ALL,HIT) :: IF NOT HIT THEN CALL COINC(ALL,HIT) :: IF NOT HIT THEN 1060 1110 SC=SC+10 1120 CALL MOTION(#1,0,M((X-C)/16)) :: CALL SOUND(100,999,7) :: GOTO 830 1130 !//SUBR EXTRA FROG// 1140 IF SC<SC1 THEN RETURN ELSE CALL SCREEN(11) :: DISPLAY AT(23,10)SIZE(10):"EXTRA";CHR$(96);"FROG" :: CALL SOUND(200,440,6) :: CALL SOUND(600,550,4) :: CALL SOUND(99,770,0) 1150 CALL SOUND(999,880,9) :: CALL SCREEN(4) :: SC1=SC1+1000 :: FS=FS+1 :: CALL FROGO(1,FS+2) 1160 CALL DELSPRITE(#1) :: CALL VCHAR(24,FS+3,112) :: CALL VCHAR(24,4,96) :: RETURN 1170 !//SONG// 1180 DATA 261,250,349,250,349,250,391,250,391,250,440,375,466,125,523,250,466,250,440,250,440,250 1190 DATA 391,250,391,250,349,500 1200 DATA 261,250,349,250,349,250,391,250,391,250,440,375,466,125,523,250,466,250,440,250,440,250 1210 DATA 391,250,391,250,349,500 1220 DATA 523,125,466,125,440,250,440,250,440,250,466,125,440,125,391,250,391,250,391,250 1230 DATA 523,125,466,125,440,250,440,250,440,250,466,125,440,125,391,250,391,250,391,250 1240 DATA 523,250,440,250,349,250,391,250,391,250,349,375,44733,1 1250 !/SPLASH/ 1260 DATA 0000000001020204050201000000000000000000008040A02040C 1270 DATA 00010608090A1214142219040300000000008040209048282848C810E 1280 DATA 070811002044081190A0004844300906C02010C834128A449A2202860808D 1290 DATA 10609000A00028108000000040904026D00212410C0A0204002000060002142 1300 !/BLOOD/ 1310 DATA 000000091F1F0F07071F09000000000000000080C0E0E0E0E0C0808 1320 DATA 000010392F1F0F040F1F1B01010000000000008080F0F8E8F0E08080C 1330 DATA 000020D97F7F331F1F1F7F351B0100000000C0E0A0F8FEF6FEECE0A0C0E0C 1340 !/BLAH/ 1350 DATA 20,19,182,85,142,245,155,41,251,82,201,56,30,70,78,68,197,155,183,177,201 1360 !/CROAK/ 1370 DATA 22,21,40,83,141,70,98,90,82,28,230,237,117,31,242,168,39,0,1,196,226,34,1 1380 !/SUBPROGRAMS/ 1390 SUB SONG(X) :: RESTORE 1400 FOR I=1 TO X :: READ A,B :: CALL SOUND(B,A,0) :: NEXT I :: SUBEND 1410 SUB SQUISH(FS,B$) :: CALL SCREEN(7) :: CALL POSITION(#1,A,B) :: CALL SPRITE(#28,92,7,A-4,B-4) 1420 CALL SCREEN(4) :: FOR I=0 TO 30 :: CALL SOUND(-500,150,I,-7,I) :: NEXT I :: RESTORE 1310 :: FS=FS-1 1430 FOR I=1 TO 3 :: READ A$ :: CALL CHAR(92,A$) :: CALL SAY(,B$) :: NEXT I :: FOR I=1 TO 300 :: NEXT I :: CALL DELSPRITE(#1,#28) 1440 RESTORE 1310 :: READ A$ :: CALL CHAR(92,A$) :: SUBEND 1450 SUB DROWN(FS) :: CALL SOUND(-4000,-6,20) :: CALL POSITION(#1,X,Y) :: CALL SPRITE(#1,108,8,X-4,Y) :: RESTORE 1260 1460 FOR I=1 TO 4 :: CALL SOUND(-4000,-5,I*5) :: READ A$ :: CALL CHAR(108,A$) :: NEXT I 1470 CALL DELSPRITE(#1) :: FS=FS-1 :: SUBEND 1480 SUB TIMEEND :: CALL MOTION(#25,0,0) 1490 FOR I=2 TO 6 :: FOR A=2 TO 16 :: CALL COLOR(#A,I) :: NEXT A :: NEXT I 1500 CALL MOTION(#1,0,0) :: SUBEND 1510 SUB OVER(SC,N$(),N()) :: CALL DELSPRITE(ALL) 1520 IF SC<=N(2)THEN 1550 ELSE IF SC<=N(1)THEN X=2 :: N(X)=SC ELSE N(2)=N(1) :: N$(2)=N$(1) :: IF SC<=N(0)THEN X=1 :: N(X)=SC ELSE X=0 :: N(1)=N(X) :: N$(1)=N$(X) :: N(X)=SC 1530 CALL SONG(55) :: FOR I=3 TO 8 :: CALL COLOR(I,2,16) :: NEXT I 1540 CALL SCREEN(16) :: DISPLAY AT(8,10):"YOU DID IT!": :" YOU ARE ONE OF THE BEST!": :"YOUR HONORABLE NAME;" :: ACCEPT AT(12,21):N$(X) 1550 FOR I=3 TO 8 :: CALL COLOR(I,2,6) :: NEXT I 1560 DISPLAY AT(3,9):"HIGH SCORES" :: FOR I=0 TO 2 :: DISPLAY AT(I+5,7):N$(I);TAB(16);N(I) :: NEXT I 1570 DISPLAY AT(8,1): :TAB(10);"GAME OVER": :" PRESS REDO OR BACK": : :: DISPLAY AT(15,10)SIZE(LEN(STR$(SC))+6):"SCORE:"&STR$(SC) 1580 CALL KEY(0,K,ST) :: IF K=15 THEN CALL CLEAR :: STOP ELSE IF K<>6 THEN 1580 1590 CALL CLEAR :: CALL SCREEN(4) :: FOR K=3 TO 8 :: CALL COLOR(K,2,4) :: NEXT K :: CALL COLOR(1,2,6) :: SUBEND 1600 SUB FROGO(A,B) :: CALL VCHAR(24,A+1,96) :: CALL SPRITE(#1,116,13,185,A/8+1) 1610 FOR I=A TO B STEP .5 :: CALL SOUND(-99,690,19) :: CALL LOCATE(#1,185,I*8+1) :: CALL SOUND(-99,220,19) :: NEXT I 1620 SUBEND 1630 SUB DING(A,B) 1640 FOR I=A TO A+B STEP 10 :: CALL SOUND(1,-1,19) :: DISPLAY AT(15,16)SIZE(LEN(STR$(I))):STR$(I) :: NEXT I 1650 A=A+B :: SUBEND 1660 SUB SPCH(A$,S$) :: RESTORE 1350 :: S$,A$=CHR$(96)&CHR$(0) :: READ A :: FOR I=1 TO A :: READ B :: S$=S$&CHR$(B) :: NEXT I :: READ A :: FOR I=1 TO A :: READ B :: A$=A$&CHR$(B) :: NEXT I :: SUBEND 3 Quote Link to comment Share on other sites More sharing options...
ramidavis Posted November 19, 2017 Share Posted November 19, 2017 The CALL LOAD(-31878,0) is for the old XB 1.0 sprite issue, or something else? Thanks for that listing! 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.