home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 201.lha / telechess (.txt) < prev    next >
AmigaBASIC Source Code  |  1988-12-27  |  17KB  |  820 lines

  1. REM - TeleChess Amiga
  2. REM - Beta Test version 0.95
  3. REM - By 
  4. REM - Tom Conroy   &
  5. REM   James Hastings-Trew
  6. REM - Copyright 1987, Telegame Software
  7. REM - This version of TeleChess is 
  8. REM - compatible with the TeleChess-64
  9. REM - for the Commodore 64
  10. MainLoop:
  11.  
  12.    GOSUB DefineModeArray
  13.    GOSUB Initalize
  14.    GOSUB SetMenu
  15.    GOSUB GetOutlines
  16.    GOSUB LoadPieces
  17.    GOSUB PieceMemSetup
  18.    GOSUB PrintBoard
  19.    GOTO Chatout
  20.    WHILE 1
  21.    GOSUB MouseScan
  22.    WEND
  23.           
  24. ElectPawn:
  25.  
  26.    IF InTransit = 1 THEN InTransit = 5
  27.    IF InTransit = 11 THEN InTransit = 15
  28.    RETURN
  29.    
  30. ModifyBoard:
  31.  
  32.  
  33. '----------------------------------------
  34.  
  35. PieceMemSetup:
  36.  
  37.    RESTORE
  38.    FOR n=1 TO 8
  39.    FOR m=1 TO 8
  40.    READ b(n,m)
  41.    NEXT m
  42.    NEXT n
  43.    IF flip=0 THEN
  44.    x=4
  45.    END IF
  46.    IF flip=0 THEN crosspiece
  47.    FOR n=1 TO 8:FOR I=1 TO 8
  48.    IF(b(n,I)<10 AND b(n,I)>0) THEN b(n,I)=b(n,I)+10:GOTO loop6
  49.    IF b(n,I)>10 THEN b(n,I)=b(n,I)-10
  50.  loop6:
  51.    NEXT I:NEXT n
  52.    b(1,4)=16:b(1,5)=15:b(8,4)=6:b(8,5)=5
  53. crosspiece:
  54.    FOR n = 0 TO 6
  55.    READ cross(n)
  56.    NEXT
  57.    FOR n = 11 TO 16
  58.    READ cross(n)
  59.    NEXT
  60.    FOR n = 100 TO 106
  61.    READ cross(n)
  62.    NEXT
  63.    FOR n = 111 TO 116
  64.    READ cross(n)
  65.    NEXT
  66.    FOR z=1 TO 8:FOR I=1 TO 8
  67.    bb(z,I)=b(z,I)
  68.    NEXT I:NEXT z
  69.    RETURN
  70.    DATA 4,2,3,5,6,3,2,4
  71.    DATA 1,1,1,1,1,1,1,1
  72.    DATA 0,0,0,0,0,0,0,0
  73.    DATA 0,0,0,0,0,0,0,0
  74.    DATA 0,0,0,0,0,0,0,0
  75.    DATA 0,0,0,0,0,0,0,0
  76.    DATA 11,11,11,11,11,11,11,11
  77.    DATA 14,12,13,15,16,13,12,14
  78.    DATA 7,6,2,3,1,4,5
  79.    DATA 20,16,17,15,18,19
  80.    DATA 14,13,9,10,8,11,12
  81.    DATA 27,23,24,22,25,26
  82.  
  83.  
  84. '------------------------------------
  85.  
  86. ChatLoop:
  87.    
  88.  Chatout:
  89.    
  90.    IF LOC(1)<>0 THEN ChatIn
  91.    a$=INKEY$
  92.    IF a$="" THEN GOSUB Colors
  93.    IF a$ = "‚" AND local = 1 THEN local = 0 : GOTO Chatout
  94.    IF a$ = "‚" AND local = 0 THEN local = 1 : GOTO Chatout
  95.    IF a$="" THEN ChatIn
  96.    IF a$=CHR$(13)THEN 
  97.       a$="... "
  98.       GOTO PrintAndSend
  99.    END IF
  100.    IF a$=CHR$(8) AND LEN(t$)>0 THEN PrintAndSend
  101.    IF (ASC(a$)<32 OR ASC(a$)>64) AND (ASC(a$)<97 OR ASC(a$)>122)THEN ChatIn
  102.    IF ASC(a$)>64 THEN b=ASC(a$)-32:a$=CHR$(b)
  103.  PrintAndSend:
  104.    IF a$=CHR$(8) THEN a$=CHR$(20)
  105.    PRINT#1,a$;
  106.    IF a$=CHR$(20) THEN
  107.       a$=""
  108.       t$=LEFT$(t$,LEN(t$)-1)
  109.    END IF
  110.    t$=t$+a$
  111.    t$=RIGHT$(t$,18)
  112.    LOCATE 2,21:COLOR 30
  113.    PRINT t$
  114.    GOTO ChatIn
  115.       
  116.  ChatIn:
  117.    IF LOC(1)=0 THEN MouseScan
  118.    a$=INPUT$(1,1)
  119.    IF a$=CHR$(254)THEN
  120.       GOSUB ReceiveMove
  121.       GOTO ChatIn
  122.    END IF
  123.    IF a$=CHR$(91)THEN 
  124.       PRINT#1,CHR$(226);
  125.       GOTO ChatIn
  126.    END IF
  127.    IF a$=CHR$(20) AND LEN(y$)>0 THEN
  128.       a$="":y$=LEFT$(y$,LEN(y$)-1)
  129.       IF LEN(Speak$) > 0 THEN Speak$=LEFT$(Speak$,LEN(Speak$)-1)
  130.       LOCATE 2,2:COLOR 17
  131.       PRINT y$
  132.    END IF
  133.    IF ASC(a$+CHR$(0))>90 OR ASC(a$+CHR$(0))<32 THEN ChatIn
  134.    y$=y$+a$:y$=RIGHT$(y$,18)
  135.    IF LEN(Speak$) < 255 THEN Speak$=Speak$+a$
  136.    LOCATE 2,2:COLOR 17
  137.    PRINT y$
  138.    IF RIGHT$(Speak$,4)="... " THEN
  139.       talk$ = TRANSLATE$ (LEFT$(Speak$,LEN(Speak$)-4))
  140.       Speak$=""
  141.       IF SpeakFlag = 1 THEN SAY (talk$),Voice%
  142.    END IF   
  143.    GOTO ChatIn
  144.    
  145. '--------------------------------------------
  146.  
  147. ReceiveMove:
  148.    
  149.    Ok=0 
  150.  Loop3:
  151.    re=1:PRINT#1,CHR$(91);
  152.  Loop2:
  153.    tl=TIMER+5
  154.    WHILE TIMER<tl
  155.       a$="":IF LOC(1)<>0 THEN a$=INPUT$(1,1)
  156.       IF a$<>""THEN tl=TIMER-1
  157.    WEND
  158.    IF a$=CHR$(254) THEN Loop3
  159.    IF a$=CHR$(226) THEN RETURN
  160.    cor(re)=ASC(a$+CHR$(0))
  161.    cor(re)=cor(re)-32
  162.    re=re+1
  163.    IF re<6 THEN Loop2
  164.    checksum=cor(1)+cor(2)+cor(3)+cor(4)
  165.    IF checksum<>cor(5) THEN RecmoveFail
  166.    PRINT#1,CHR$(96);
  167.    Ok=1
  168.    bb(f1,f2) = b(f1,f2)
  169.    bb(s1,s2) = b(s1,s2)
  170.    s1=cor(1):s2=cor(2):f1=cor(3):f2=cor(4)
  171.    GOSUB MovePiece
  172.    RETURN
  173.  RecmoveFail:   
  174.    PRINT#1,CHR$(99);
  175.    tl=TIMER+5
  176.    WHILE TIMER<tl
  177.       a$="":IF LOC(1)=0 THEN a$=INPUT$(1,1)
  178.       IF a$<>""THEN tl=TIMER-1
  179.    WEND
  180.    IF a$=CHR$(254)THEN GOTO Loop3
  181.    RETURN
  182.  
  183. '--------------------------------------
  184.  
  185. SendMove:
  186.    IF local = 1 THEN Ok = 1:RETURN
  187.    Ok=0:IF s1 = f1 AND s2 = f2 THEN RETURN
  188.    sy=9-s1:sx=9-s2:fy=9-f1:fx=9-f2: REM translate co-ordinates
  189.    ck=(sy+sx+fy+fx):try=0: REM calculate checksum
  190.   Loop4:
  191.    tl=TIMER+5
  192.    PRINT#1,CHR$(254);: REM transmit send request
  193.      REM wait for acknowledge
  194.      WHILE tl>TIMER
  195.       a$="":IF LOC(1)<>0 THEN a$=INPUT$(1,1)
  196.       IF a$<>"" THEN tl=TIMER-1
  197.      WEND      
  198.    IF a$<>"" THEN Loop5
  199.    try=try+1
  200.    IF try<10 THEN Loop4
  201.    IF try=10 THEN RETURN :REM give up after 10 attempts
  202.   Loop5:
  203.    IF a$<>CHR$(91)THEN Loop4
  204.    PRINT#1,CHR$(sy+32); 
  205.    PRINT#1,CHR$(sx+32); 
  206.    PRINT#1,CHR$(fy+32); 
  207.    PRINT#1,CHR$(fx+32); 
  208.    PRINT#1,CHR$(ck+32);
  209.    tl=TIMER+5
  210.    WHILE TIMER<tl
  211.       a$="":IF LOC(1)=0 THEN a$=INPUT$(1,1)
  212.       IF a$<>""THEN tl=TIMER-1
  213.    WEND   
  214.    IF a$<>CHR$(96)THEN Loop4 : REM try again if not sent ok
  215.    Ok=1 : RETURN
  216.      
  217. '-----------------------------------------
  218.            
  219. CordToGrid:    REM - XCORD= XPixel Cordinate
  220.                REM - YCORD= YPixel Cordinate
  221.                REM - Returns XGRID and YGRID
  222.    nongrid=0
  223.    IF Xcord < 6 OR Xcord > 199 THEN nongrid=1:RETURN
  224.    IF Ycord < 28 OR Ycord > 191 THEN nongrid=1:RETURN
  225.    Xcord = Xcord + 17
  226.    xgrid = INT (Xcord / 24)
  227.    Ycord = Ycord -28
  228.    ygrid = INT ((Ycord / 19)+1)
  229.    RETURN
  230.    
  231. '------------------------------------------
  232.  
  233. GridToCord:
  234.  
  235.    Xcord = -19 + (xgrid * 24)   
  236.    Ycord = 9 + (ygrid * 19)
  237.    RETURN
  238.    
  239. '------------------------------------------
  240.  
  241. PlacePiece:
  242.             REM N=YGRID
  243.             REM M=XGRID
  244.    
  245.    ygrid=n:xgrid=m
  246.    GOSUB GridToCord
  247.    pn = b(n,m)
  248.    IF (xgrid+ygrid)/2 <> INT ((xgrid+ygrid)/2) THEN pn=pn+100
  249.    PUT (Xcord,Ycord), piece%(1,cross(pn)), PSET
  250.    RETURN
  251.  
  252. '------------------------------------------
  253.  
  254. PrintBoard:
  255.  
  256.    FOR n=1 TO 8:
  257.       FOR m = 1 TO 8
  258.       GOSUB PlacePiece
  259.    Skip:       
  260.       NEXT
  261.    NEXT
  262.    PUT (267,30),Button%(1,2),PSET
  263.    WINDOW CLOSE 4
  264.    RETURN
  265.    
  266. '------------------------------------------
  267.  
  268. MovePiece:
  269.  
  270.    IF s1 = f1 AND s2 = f2 THEN RETURN
  271.    IF b(s1,s2)=0 THEN RETURN
  272.    InTransit = b(s1,s2)
  273.    n=s1:m=s2
  274.    Capture = 0 : IF b(f1,f2) <> 0 THEN Capture = 1
  275.    IF SoundFlag = 1 THEN GOSUB Tune1
  276.    FOR silly = 1 TO 4
  277.    b(s1,s2)=InTransit : GOSUB PlacePiece : GOSUB OneSecDelay
  278.    b(s1,s2)=0 : GOSUB PlacePiece : GOSUB OneSecDelay
  279.    NEXT
  280.    n=f1:m=f2
  281.    IF (InTransit = 1 OR InTransit = 11) AND (f1 = 8 OR f1 = 1) THEN GOSUB ElectPawn 
  282.    FOR silly = 1 TO 3
  283.    b(f1,f2) = 0 : GOSUB PlacePiece : GOSUB OneSecDelay
  284.    b(f1,f2) = InTransit : GOSUB PlacePiece : GOSUB OneSecDelay
  285.    NEXT
  286.    IF Capture = 1 AND SoundFlag =1 THEN GOSUB Tune2
  287.    IF SoundFlag = 1 THEN GOSUB Tune3
  288.    RETURN
  289.  
  290. OneSecDelay:
  291.    
  292.    Delay = TIMER
  293.    WHILE TIMER < Delay + 0.2
  294.    WEND
  295.    RETURN
  296.    
  297.  
  298. '------------------------------------------
  299.  
  300. LoadPieces:
  301.  
  302.  
  303. PieceLoop1:
  304.    p = 0
  305.    xgrid = 1 : ygrid = 1 : GOSUB PieceLoop2
  306.    xgrid = 7 : ygrid = 1 : GOSUB PieceLoop2
  307.    xgrid = 3 : ygrid = 1 : GOSUB PieceLoop2
  308.    xgrid = 4 : ygrid = 4 : GOSUB PieceLoop2
  309.    xgrid = 5 : ygrid = 1 : GOSUB PieceLoop2
  310.    xgrid = 2 : ygrid = 2 : GOSUB PieceLoop2
  311.    xgrid = 1 : ygrid = 3 : GOSUB PieceLoop2
  312.    xgrid = 8 : ygrid = 1 : GOSUB PieceLoop2
  313.    xgrid = 2 : ygrid = 1 : GOSUB PieceLoop2
  314.    xgrid = 6 : ygrid = 1 : GOSUB PieceLoop2
  315.    xgrid = 4 : ygrid = 1 : GOSUB PieceLoop2
  316.    xgrid = 5 : ygrid = 4 : GOSUB PieceLoop2
  317.    xgrid = 1 : ygrid = 2 : GOSUB PieceLoop2
  318.    xgrid = 2 : ygrid = 3 : GOSUB PieceLoop2
  319.    xgrid = 8 : ygrid = 8 : GOSUB PieceLoop2
  320.    xgrid = 2 : ygrid = 8 : GOSUB PieceLoop2
  321.    xgrid = 6 : ygrid = 8 : GOSUB PieceLoop2
  322.    xgrid = 4 : ygrid = 8 : GOSUB PieceLoop2
  323.    xgrid = 5 : ygrid = 5 : GOSUB PieceLoop2
  324.    xgrid = 1 : ygrid = 7 : GOSUB PieceLoop2
  325.    xgrid = 1 : ygrid = 3 : GOSUB PieceLoop2
  326.    xgrid = 1 : ygrid = 8 : GOSUB PieceLoop2
  327.    xgrid = 7 : ygrid = 8 : GOSUB PieceLoop2
  328.    xgrid = 3 : ygrid = 8 : GOSUB PieceLoop2
  329.    xgrid = 4 : ygrid = 5 : GOSUB PieceLoop2
  330.    xgrid = 5 : ygrid = 8 : GOSUB PieceLoop2
  331.    xgrid = 2 : ygrid = 7 : GOSUB PieceLoop2
  332.    xgrid = 1 : ygrid = 3 : GOSUB PieceLoop2
  333.    GET (267,30)-(280,37),Button%(1,1)
  334.    GET (267,47)-(280,54),Button%(1,2)
  335.    RETURN
  336.    
  337. PieceLoop2:   
  338.    p = p + 1
  339.    GOSUB GridToCord
  340.    x1 = Xcord 
  341.    y1 = Ycord  
  342.    x2 = x1+22
  343.    y2 = y1+17
  344.    GET (x1,y1)-(x2,y2),piece%(1,p)
  345.    RETURN
  346.  
  347. '------------------------------------------
  348.  
  349. GetOutlines:
  350.   
  351.       FOR n=1 TO 6
  352.       OPEN "Piece"+STR$(n) FOR INPUT AS 2
  353.       OBJECT.SHAPE n,INPUT$(LOF(2),2)
  354.       CLOSE 2
  355.       NEXT
  356.       RETURN
  357.       
  358. '------------------------------------------
  359.  
  360. MouseScan:
  361.    IF MoveToMake = 1 THEN MoveToMake = 0 : GOTO SendTheMove
  362.    a = MOUSE(0)
  363.    IF a < 0 THEN ButtonIsPressed
  364.    GOSUB CheckMenu
  365.    GOTO Chatout
  366.    
  367.  
  368. '------------------------------------------
  369.  
  370. SetMenu:
  371.    MENU 1,0,1,"Project"
  372.    MENU 1,1,1,"Establish Connect"
  373.    MENU 1,2,1,"Load Game        "
  374.    MENU 1,3,1,"Save Game        "
  375.    MENU 1,4,1,"Quit             "
  376.    MENU 2,0,1,"Options"
  377.    MENU 2,1,1,"Be Black    "
  378.    MENU 2,2,1,"Be White    "
  379.    MENU 2,3,1,"Reset Board "
  380.    MENU 2,4,0,"Modify Board"
  381.    MENU 2,5,1,"Sound Off   "
  382.    MENU 2,6,1,"Speech Off  "
  383.    MENU 3,0,1,"Info"
  384.    MENU 3,1,1,"Authors   "
  385.    MENU 3,2,1,"More Info "
  386.    MENU 3,3,1,"Versions  "
  387.    MENU 3,4,1,"TeleGames "
  388.    MENU 4,0,0,"          "   
  389.    RETURN
  390.  
  391. '------------------------------------------
  392.  
  393. Initalize:
  394.    
  395.    SoundFlag = 1
  396.    SpeakFlag = 1
  397.    DIM piece%(183,29) 
  398.    DIM cross(117)
  399.    DIM cascii(90)
  400.    DIM Button%(58,2)
  401.    RETURN
  402.  
  403. '------------------------------------------
  404.  
  405. OpenWindow:
  406.    
  407.    WINDOW 3,"   TeleChess",(21,50)-(250,165),0,2
  408.    RETURN
  409.    
  410. Closewindow:
  411.    
  412.    WINDOW CLOSE 3
  413.    RETURN
  414.  
  415. '------------------------------------------
  416.  
  417. CoverScreen:
  418.  
  419.    WINDOW 4,"TeleChess",,0,2
  420.    LOCATE 10,2:COLOR 2
  421.    PRINT  "Please Wait... Working..."
  422.    WINDOW OUTPUT 2
  423.    RETURN
  424.  
  425. '------------------------------------------
  426. Clicker:
  427.  
  428.    a=0
  429.    WHILE a=0
  430.    a=MOUSE(0)
  431.    WEND   
  432.    GOSUB Closewindow
  433.    RETURN
  434.  
  435. '----------------------------------
  436.  
  437. Tune1:
  438.    FOR vol = 255 TO 0 STEP -15
  439.    SOUND 90,1,vol,3 
  440.    SOUND 130,1,vol,2  
  441.    NEXT
  442.    RETURN
  443.  
  444. Tune2:
  445.    FOR vol=12 TO 1 STEP -1
  446.    SOUND vol*20,1,255,2
  447.    FOR silly = 1 TO 20 : NEXT
  448.    SOUND vol*20,1,255,3
  449.    NEXT
  450.    RETURN
  451.  
  452. Tune3:
  453.   SOUND 500,0.2,255,3
  454.   RETURN
  455.  
  456. '----------------------------------
  457.  
  458. OppsPressed:
  459.    
  460.    FOR z=1 TO 8:FOR I=1 TO 8
  461.    b(z,I)=bb(z,I)
  462.    NEXT I:NEXT z
  463.    GOSUB CoverScreen
  464.    GOSUB PrintBoard
  465.    PRINT#1," SYSTEM MESSAGE: OTHER PLAYER HAS PRESSED UNDO... ";
  466.    RETURN
  467.    
  468. '----------------------------------
  469.  
  470. CheckMenu:  
  471.    
  472.    selecta = MENU(0)
  473.    IF selecta = 0 THEN RETURN
  474.    selectb = MENU(1)
  475.    ON selecta GOTO Project,Options,Info
  476.    RETURN
  477.    
  478. Project:
  479.    ON selectb GOTO EstablishConnect,LoadGame,SaveGame,Quit
  480.    RETURN
  481.    
  482.    EstablishConnect:
  483.  
  484.       IF SoundFlag = 1 THEN GOSUB Tune1
  485.       WINDOW 3,"   TeleChess",(13,68)-(187,148),0,2
  486.       COLOR 17,1
  487.       PRINT " Please Type In The   "
  488.       PRINT " Proper Modem Command "
  489.       PRINT " To Connect You To    "
  490.       PRINT " The Other Player     "       
  491.       PRINT "                      "
  492.       COLOR 3
  493.       PRINT " EXAMPLE: ATDT (PH#)  "
  494.       PRINT "          ATS0=1      "
  495.       PRINT "          ATA         "    
  496.       PRINT "                      "
  497.       COLOR 1,17
  498.       PRINT "                      ";
  499.       LOCATE 10,1
  500.       INPUT "Command:";ModemCommand$
  501.       WINDOW CLOSE 3
  502.       PRINT#1,ModemCommand$
  503.       IF SoundFlag = 1 THEN GOSUB Tune1
  504.       RETURN
  505.       
  506.  
  507.       RETURN
  508.  
  509.    LoadGame:
  510.  
  511.       IF SoundFlag = 1 THEN GOSUB Tune1
  512.       WINDOW 3,"Load Game",(10,50)-(260,57),0,2
  513.       COLOR 17:PRINT "Path/Filename:";
  514.       COLOR 13 : INPUT filename$
  515.       IF filename$="" THEN WINDOW CLOSE 3:RETURN
  516.       OPEN filename$ FOR INPUT AS 2
  517.       INPUT #2,flip
  518.       FOR n = 1 TO 8
  519.       FOR m = 1 TO 8
  520.         INPUT #2,b(n,m)
  521.         NEXT
  522.         NEXT
  523.       CLOSE #2
  524.       WINDOW CLOSE 3
  525.       GOSUB CoverScreen
  526.       GOSUB PrintBoard
  527.       IF SoundFlag = 1 THEN GOSUB Tune1
  528.       RETURN
  529.  
  530.    SaveGame:
  531.  
  532.       IF SoundFlag = 1 THEN GOSUB Tune1
  533.       WINDOW 3,"Save Game",(10,50)-(250,57),0,2
  534.       COLOR 17:PRINT "Path/Filename:";
  535.       COLOR 13 : INPUT filename$
  536.       IF filename$="" THEN WINDOW CLOSE 3:RETURN
  537.       OPEN filename$ FOR OUTPUT AS 2
  538.       WRITE #2,flip
  539.       FOR n = 1 TO 8
  540.       FOR m = 1 TO 8
  541.         WRITE #2,b(n,m)
  542.         NEXT
  543.         NEXT
  544.        CLOSE #2
  545.        PRINT : COLOR 17,1 : LOCATE 1,1 : PRINT "Game Saved...                 ";
  546.        FOR n = 1 TO 2000 : NEXT
  547.        WINDOW CLOSE 3
  548.        IF SoundFlag = 1 THEN GOSUB Tune1
  549.        RETURN
  550.          
  551.    Quit:
  552.  
  553.       SCREEN CLOSE 2
  554.       IF SoundFlag = 1 THEN GOSUB Tune1
  555.       END       
  556.  
  557. Options:
  558.  
  559.    ON selectb GOTO BeBlack,BeWhite,ResetBoard,ModifyBoard,SoundToggle,TalkToggle
  560.    RETURN
  561.    
  562.    BeBlack:
  563.       IF SoundFlag = 1 THEN GOSUB Tune1
  564.       IF flip = 1 THEN RETURN
  565.       flip = 1
  566.       GOSUB CoverScreen
  567.       GOSUB PieceMemSetup
  568.       GOSUB PrintBoard
  569.       RETURN
  570.    BeWhite:
  571.       IF SoundFlag = 1 THEN GOSUB Tune1
  572.       IF flip = 0 THEN RETURN
  573.       flip = 0
  574.       GOSUB CoverScreen
  575.       GOSUB PieceMemSetup
  576.       GOSUB PrintBoard
  577.       RETURN
  578.    ResetBoard:
  579.       IF SoundFlag = 1 THEN GOSUB Tune1
  580.       GOSUB CoverScreen
  581.       GOSUB PieceMemSetup
  582.       GOSUB PrintBoard
  583.       RETURN
  584.    ModifyBoard:
  585.       IF SoundFlag = 1 THEN GOSUB Tune1
  586.       RETURN
  587.    SoundToggle:
  588.       IF SoundFlag = 0 THEN SoundOn
  589.       SoundFlag = 0
  590.       MENU 2,5,1,"Sound On    "
  591.       RETURN
  592.       SoundOn:
  593.       SoundFlag = 1
  594.       MENU 2,5,1,"Sound Off   "
  595.       RETURN            
  596.    
  597.    TalkToggle:
  598.  
  599.    IF SpeakFlag = 1 THEN TurnItOff
  600.       SpeakFlag = 1 : Speak$ = TRANSLATE$ ("Ok, I'm back") : SAY (Speak$)
  601.       MENU 2,6,1,"Speech Off   "
  602.    RETURN
  603.    TurnItOff:
  604.       SpeakFlag = 0 : Speak$ = TRANSLATE$ ("My lips are sealed") : SAY (Speak$)
  605.       MENU 2,6,1,"Speech On   "
  606.    RETURN
  607.         
  608. Info:
  609.    
  610.    ON selectb GOTO Authors,MoreInfo,Versions,TeleGames
  611.    
  612.    Authors:
  613.       
  614.       IF SoundFlag = 1 THEN GOSUB Tune1
  615.       WINDOW 3,"TeleChess",(21,50)-(259,130),0,2
  616.       COLOR 25,13
  617.       PRINT " Programming: Tom Conroy      "
  618.       PRINT " Artwork: James Hastings-Trew "
  619.       PRINT "                              "
  620.       COLOR 3,13
  621.       PRINT " Don't feel obligated to send "
  622.       PRINT " money if you use this        "
  623.       PRINT " program.  But, if you do,    "
  624.       PRINT " we'll say nice things about  "
  625.       PRINT " you for days! (Honest...)    "
  626.       PRINT "                              "
  627.       COLOR 17,1
  628.       PRINT "     [Click To Continue]      ";
  629.       GOSUB Clicker
  630.       IF SoundFlag = 1 THEN GOSUB Tune1
  631.       RETURN
  632. Colors:
  633.       GOSUB OpenWindow
  634.       WIDTH 14
  635.       FOR n = 0 TO 31
  636.       COLOR n
  637.       PRINT n;
  638.       NEXT
  639.       INPUT a$
  640.       GOSUB Closewindow
  641.       WIDTH 60
  642.       RETURN
  643.    MoreInfo:
  644.       IF SoundFlag = 1 THEN GOSUB Tune1
  645.       WINDOW 3,"TeleChess",(21,42)-(243,162),0,2
  646.       COLOR 25,13
  647.       PRINT " Please send freeware        "
  648.       PRINT " donations (If Any) to       "
  649.       COLOR 30,13
  650.       PRINT "                             "
  651.       PRINT " TeleGame Software           "
  652.       PRINT " Sub PO 37                   "
  653.       PRINT " Saskatoon, Sask.            "
  654.       PRINT " S7H 0X0                     "
  655.       COLOR 1
  656.       PRINT " Call At 306-373-0656        "
  657.       PRINT "                             "
  658.       COLOR 17,13
  659.       PRINT " Please Note: Your freeware  "
  660.       PRINT " donations will go toward    " 
  661.       PRINT " supporting the authors      "
  662.       PRINT " Fudrucker's Lunch Fund      "
  663.       PRINT "                             " 
  664.       COLOR 17,1
  665.       PRINT "     [Click To Continue]     ";
  666.       GOSUB Clicker
  667.       IF SoundFlag = 1 THEN GOSUB Tune1
  668.       RETURN
  669.       
  670.  
  671.    Versions:
  672.       IF SoundFlag = 1 THEN GOSUB Tune1
  673.       WINDOW 3,"TeleChess",(21,50)-(259,122),0,2
  674.       COLOR 25,13
  675.       PRINT " This TeleChess is Compatible "
  676.       PRINT " with the following versions. "
  677.       PRINT "                              "
  678.       COLOR 3,13
  679.       PRINT " Commodore 64 - TeleChess 1.5 "
  680.       COLOR 4,13
  681.       PRINT " Atari 520 ST - TeleChess 1.0 "
  682.       COLOR 5,13
  683.       PRINT " MS-DOS       - TeleChess 1.0 " 
  684.       COLOR 6,13
  685.       PRINT " Macintosh    - TeleChess 1.0 "
  686.       PRINT "                              "
  687.       COLOR 17,1
  688.       PRINT "     [Click To Continue]      ";
  689.       GOSUB Clicker
  690.       IF SoundFlag = 1 THEN GOSUB Tune1
  691.       RETURN
  692.       
  693.    TeleGames:
  694.       IF SoundFlag = 1 THEN GOSUB Tune1
  695.       WINDOW 3,"TeleChess",(21,50)-(259,130),0,2
  696.       COLOR 25,13
  697.       PRINT "    Other TeleGames Being     "
  698.       PRINT "         Considered           "
  699.       PRINT "                              "
  700.       COLOR 3,13
  701.       PRINT " TeleGammon   - Backgammon    "
  702.       PRINT " TeleCheckers - Checkers      "
  703.       PRINT " TeleDeck     - Any Card Game " 
  704.       PRINT "                              "
  705.       PRINT "  Feel Free To Suggest More!  "
  706.       PRINT "                              "
  707.       COLOR 17,1
  708.       PRINT "     [Click To Continue]      ";
  709.       GOSUB Clicker
  710.       IF SoundFlag = 1 THEN GOSUB Tune1
  711.       RETURN
  712.                
  713. '----------------------------------
  714.  
  715. ButtonIsPressed:      
  716.  
  717.    Xcord = MOUSE(3)
  718.    Ycord = MOUSE(4)
  719.    GOSUB CordToGrid
  720.    IF nongrid <> 0 THEN ClickBox
  721.    bb(f1,f2) = b(f1,f2)
  722.    bb(s1,s2) = b(s1,s2)
  723.    s1 = ygrid
  724.    s2 = xgrid
  725.    IF b(s1,s2) = 0 THEN Chatout
  726.    InTransit = b(s1,s2)
  727.    b(s1,s2) = 0
  728.    n = s1 : m = s2
  729.    GOSUB PlacePiece
  730.    GOSUB GetNumber
  731.    WHILE MOUSE(0) <1
  732.    OBJECT.X Outline,MOUSE(5)-10
  733.    OBJECT.Y Outline,MOUSE(6)-7
  734.    OBJECT.ON Outline
  735.    WEND
  736.    Xcord = MOUSE(5)
  737.    Ycord = MOUSE(6)
  738.    GOSUB CordToGrid
  739.    f1 = ygrid
  740.    f2 = xgrid
  741.    MoveToMake = 1
  742.    GOTO ChatIn
  743.  
  744. SendTheMove:
  745.    
  746.    GOSUB SendMove
  747.    OBJECT.OFF :IF Ok=0 THEN n=s1:m=s2:b(s1,s2)=InTransit:GOSUB PlacePiece:GOTO Chatout
  748.    IF b(f1,f2)<>0 AND SoundFlag = 1 THEN GOSUB Tune2
  749.    IF (InTransit = 1 OR InTransit = 11) AND (f1 = 8 OR f1 = 1) THEN GOSUB ElectPawn 
  750.    b(f1,f2)=InTransit 
  751.    n = f1 : m = f2
  752.    GOSUB PlacePiece
  753.    IF SoundFlag = 1 THEN GOSUB Tune3
  754.    GOTO Chatout
  755.  
  756.  
  757. '----------------------------------
  758.  
  759. ClickBox:
  760.  
  761.    IF Xcord < 270 OR Xcord > 277 THEN GOTO Chatout
  762.    IF Ycord > 31 AND Ycord < 36 THEN GOSUB Check
  763.    IF Ycord > 48 AND Ycord < 53 THEN GOSUB Opps1
  764.    IF Ycord > 65 AND Ycord < 70 THEN GOSUB Hurry
  765.    IF Ycord > 82 AND Ycord < 87 THEN GOSUB Mate
  766.    GOTO Chatout
  767.    
  768.    Check:
  769.       
  770.       PUT (267,30),Button%(1,1),PSET
  771.       PRINT#1," CHECK... ";
  772.       PUT (267,30),Button%(1,2),PSET
  773.       RETURN
  774.       
  775.    Opps1:
  776.       
  777.       PUT (267,47),Button%(1,1),PSET
  778.       GOSUB OppsPressed
  779.       PUT (267,47),Button%(1,2),PSET
  780.       RETURN
  781.       
  782.    Hurry:
  783.       
  784.       PUT (267,64),Button%(1,1),PSET
  785.       PRINT#1," ZZZZZ..ZZZZ..ZZZZZ... ";
  786.       PUT (267,64),Button%(1,2),PSET
  787.       RETURN
  788.       
  789.    Mate:
  790.       
  791.       PUT (267,81),Button%(1,1),PSET
  792.       PRINT#1," CHECKMATE...  YOU LOSE... "
  793.       PUT (267,81),Button%(1,2),PSET
  794.       RETURN
  795.          
  796. '----------------------------------
  797.  
  798. GetNumber:
  799.    
  800.    Outline = InTransit
  801.    IF Outline > 100 THEN Outline = Outline - 100
  802.    IF Outline > 10 THEN Outline = Outline - 10
  803.    RETURN
  804.  
  805. '----------------------------------
  806.  
  807. DefineModeArray:
  808.    
  809.    Voice%(0) = 110
  810.    Voice%(1) = 0
  811.    Voice%(2) = 170
  812.    Voice%(3) = 1
  813.    Voice%(4) = 22200
  814.    Voice%(5) = 45
  815.    Voice%(6) = 10
  816.    Voice%(7) = 0
  817.    Voice%(8) = 0
  818.    RETURN
  819.    
  820.