A computer version of the Clue board game for two to five players, who play Mr. Green, Col. Mustard, Ms. Scarlett, Mrs. White and Prof. Plum in the murder of Mr. Howell. The computer hides one room, one weapon (wrench, hammer, rope, candle or pipe) and one suspect, deals the remaining sixteen cards, and gives each player a Detective Notes screen with a photo, the full list of rooms, weapons and suspects, and their own cards, which can also go to a printer. On your turn you roll two dice and type your whole move as a string of the cursor digits 5, 6, 7 and 8 at “ENTER your moves?”. Walls stop you, and a doorway takes you into one of nine rooms, each drawn as its own picture. There you name a suspect and a weapon, the next player shows you a matching card or answers “none”, and you may then accuse. A correct accusation brings the police cars and a confession; a wrong one gets you arrested; and if every player is arrested, the computer gives a clue to each part of the answer.
The disk holds two versions. ORGCLUE is the original, with REMs reading “>>Clue<<” and “© 1985 Alvin Albrecht”; it is the version that Run in Browser loads. clue v2 is headed “© 1985 Alvin Albrecht mods by Paul Holmgren 1989”. It is the same game renumbered and compacted, with its graphics hidden inside DATA lines and several routines changed, as described below.
Program Analysis
Board and Movement
The board (line 9792) is a grid of 8-pixel squares drawn with PLOT and DRAW. The rooms are blocks of green paper marked with their initial letters, the centre block is labelled “ANSWERS” and “CLUE—”, and seventeen doorways are marked with a red UDG. Each move string is checked to contain only 5–8 and to be no longer than the dice total, then followed one step at a time. Collisions use ATTR: a step onto a square with the attribute of the room at 0,0 is undone, and a step onto one with the attribute of the door at 2,4 enters a room. Lines 200–240 look the doorway up in a DATA table of the doors for each room and call that room’s drawing routine through the array f(). Each peg is a UDG in the player’s colour, printed with OVER 1, and it flashes 25 times at the start of the turn. The dice keep rolling until ENTER is pressed, and pressing 1 during the roll redraws the board.
Rooms and Suggestions
Each room routine (lines 8000–8089) redefines a few UDGs and draws the room and its furniture in the top half of the screen with block graphics, UDGs and line drawing. The lower half shows boxes for YOU, WITH and MURDER TOOL. The suspect and weapon must be typed exactly as listed, with a capital letter first, and the suspect’s portrait (six UDGs) and the weapon are drawn in. Only the next player in turn is asked for a card. If they answer “none”, their cards are checked and a false answer is refused.
Dealing and the Solution
Lines 9449–9471 load all nineteen names into n$(), pick the answer as one room (1–9), one weapon (10–14) and one suspect (15–19), and mark used cards by overwriting their first letter with x. The other sixteen are dealt in turn into k$(player,10,12), and any left over when sixteen does not divide evenly go to the next players. An accusation is checked against the 19-name vocabulary, then compared with the three hidden names.
Endings
A correct accusation plays the police scene (line 6000), in which a police car drives up to a house with a two-tone siren. The suspect comes out, confesses, and the case is declared solved with a smiling face drawn with CIRCLE and DRAW with an angle. A false accusation sets v(m), and that player is skipped from then on. When all players are out, lines 2000–2085 give one clue for each part of the answer. For the murderer and the weapon it is chosen at random from the first letters of the name, its character codes or the sum of those codes; the room is always given as character codes.
Changes in clue v2
- The UDG patterns are hidden. Each graphics block is a pair of DATA lines. The first, such as
DATA 3340,"p",6: LET XL1=VAL U$: RETURN, is read for its own line number, the first UDG and the number of UDGs, then called withGO SUB.U$holds(PEEK 23637+PEEK 23638*256)+7, the address just past the first number marker in the next line. That line lists as a row of zeros, but the five-byte binary forms of those zeros hold the UDG bytes, which lines 320–340 copy five at a time. A REM warns never to edit these lines. - Room names and their drawing routines, and suspects with their portrait routines and weapons, are read from DATA tables, and a shared box-drawing subroutine replaces repeated
DRAWsequences. - Constants are written as
NOT PIandSGN PIfor 0 and 1, and the message lines are reached through control-code stringsE$andO$. - The dice roll seven times on their own instead of waiting for ENTER.
- The recorder message appears only when the UDGs have not yet been set.
- The end-of-game clues are simpler: the murderer’s first six letters or number of letters, the weapon’s first letter and sometimes its length, and the room’s first letter.
- Declining another game runs
NEW, where the original deliberately causes an error.
Notable Techniques
- Line 5 sets
ON ERR GO TO 5070. Any error, including BREAK, leads to a “CODE NAME?” prompt, and the program reruns unless a fixed phrase is typed, which turns the trap off withON ERR RESETand stops. Answering n to “Another Game?” printsx$(1900)on purpose to reach this trap. - A single routine at line 9900 POKEs a range of UDGs from DATA using a variable named
restoreand two characters ina$. Every room, portrait and police scene redefines the same 21 UDGs as it needs them. - Line 2020 picks a clue with a calculated
GO TO (2030 AND k=3)+(2040 AND k=2)+(2050 AND k=1). GO TO 37andGO TO 420point at line numbers that do not exist, relying on execution carrying on at the next line.
Potential Issues
In ORGCLUE:
- If Col. Mustard or Prof. Plum solves the case, lines 3010–3025 look for “Mr.”, “Mrs.” or “Ms.” in the name to choose SIR or LADY, find none and loop forever, so the program hangs on a blank yellow screen. Ms. Scarlett is shown as “LADYScarlett”.
- When a card is shown, line 460 only checks that the player holds it, not that it is one of the three named in the suggestion.
- The card list on each Detective Notes screen runs to
q1, the last card slot filled during the deal, rather than to that player’s own card count. Players with fewer cards than the last one dealt therefore see an empty numbered line, such as a blank sixth line with three players. - The victim is “Mr. Howel” in line 502 and “Mr. Howell” in line 535.
In clue v2 (none of these show up in a run that stops at the board and move prompt):
- The Detective Notes and dealing routine (lines 2700–3050) is never called; the setup at line 2660 calls the name list at line 2260 instead. No cards appear to be dealt and no answer chosen, so the first card check would hit an undefined
k$and fall into the CODE NAME trap. - “Who are you with?” is read into a one-dimensional
x$, but line 540 comparesx$(SGN PI), only its first character, with each suspect’s name. No name can match, so the question appears to repeat for ever. - The door table in line 2450 reads
20,01where the original has 20,20. The Dining Room’s door marker is drawn at row 20, column 1 inside the Study, and the Dining Room appears to have no doorway that can be entered. - The solved screen sets the SIR or LADY title only for Mr., Mrs. and Ms.; for Col. Mustard or Prof. Plum it prints
v$, which is undefined in a first game. - “Another Game?” runs
RUN 50, which clears all variables and skips the setup, so redrawing the board appears to fail on the missing arrays. - The board routine prints only four pegs (line 2460), so a fifth player’s peg is missing until that player moves.
Both versions came from an Oliger (JLO SAFE) disk in the SNUG library set and were converted to load from tape. In ORGCLUE, the JLO printer command COPY / in line 9412 became a plain COPY and an autostart at line 3 was added, since the disk copy had none. In clue v2, the Oliger slash was removed from SAVE / in line 3920 and the program autostarts at line 10. Both were tested in ZEsarUX on a stock TS2068: ORGCLUE through the Detective Notes and card list, and clue v2 to the board and the move prompt.
Source Code
3 REM >>Clue<<
4 REM * 1985 Alvin Albrecht
5 ON ERR GO TO 5070
6 CLS : PRINT AT 9,0; FLASH 1;"PRESS STOP ON THE RECORDER AND THEN PRESS A KEY TO CONTINUE... ": PAUSE 0: CLS
10 BORDER 7: PAPER 7: INVERSE 0: OVER 0: BRIGHT 0: FLASH 0: INK 0: CLS
11 DIM v(5): FOR z=1 TO 5: LET v(z)=0: NEXT z
12 LET restore=9910: LET a$="af": GO SUB 9900
15 GO SUB 9900
16 LET restore=18: LET a$="mn": GO SUB 9900
18 DATA 0,24,24,24,60,126,126,0,0,0,0,0,60,60,60,60
21 LET illegal=9475
22 CLS : INPUT "How many players?(2 TO 5)";players: IF players<2 OR players>5 THEN GO TO 22
23 DIM d$(9,12): DIM c$(5,8): RESTORE 23: FOR z=1 TO 9: READ d$(z): NEXT z: DATA "Billiard Rm.","Library","Study","Kitchen","Conservatory","Ballroom","Hall","Lounge","Dining Room": LET c$(1)="Wrench": LET c$(2)="Hammer": LET c$(3)="Rope": LET c$(4)="Candle": LET c$(5)="Pipe"
24 DIM F(9): FOR z=1 TO 9: READ f(z): NEXT z: DATA 8000,8010,8020,8030,8040,8050,8060,8070,8080: DIM b$(5,12): LET b$(1)="Mr. Green": LET b$(2)="Col. Mustard": LET b$(3)="Ms. Scarlett": LET b$(4)="Mrs. White": LET b$(5)="Prof. Plum": LET b=1: DIM c(5): LET c(1)=9965: LET c(2)=9980: LET c(3)=9880: LET c(4)=9870: LET c(5)=9860
25 DIM d(5): DIM e(5): DIM i(5): FOR z=1 TO 5: READ d(z),e(z),i(z): NEXT z: GO SUB 9400: GO SUB 9996: DATA 6,0,4,16,0,6,6,31,3,19,31,0,21,17,1
26 GO SUB 9792
27 FOR m=1 TO players: GO SUB 5000: DIM x$(1,10): LET x$(1)=b$(m): PRINT AT 12,10; PAPER 4; OVER 0; INK 0;x$(1)
28 FOR q=1 TO 25: BEEP .005,20: GO SUB 9992: PRINT AT d(m),e(m); OVER 1; INK i(m);"m": NEXT q: GO SUB 7900: INPUT PAPER 4;"ENTER your moves?";l$
29 IF LEN l$>l OR LEN l$=0 THEN GO TO 35
30 PRINT AT 14,13; PAPER 4; OVER 0;" "
32 LET no=ATTR (0,0): LET door=ATTR (2,4)
33 GO SUB 7990
34 GO TO 37
35 GO SUB illegal: INPUT PAPER 4;"ENTER your moves?";l$: GO TO 29
40 GO SUB 9992
42 LET q5=d(m): LET q6=e(m)
45 FOR q=1 TO LEN l$
50 IF l$(q)="5" THEN LET q6=q6-1
55 IF l$(q)="8" THEN LET q6=q6+1
60 IF l$(q)="7" THEN LET q5=q5-1
65 IF l$(q)="6" THEN LET q5=q5+1
67 IF q5<0 OR q5>21 THEN LET q5=d(m)
68 IF q6<0 OR q6>31 THEN LET q6=e(m)
70 IF ATTR (q5,q6)=no THEN GO SUB 105
75 IF ATTR (q5,q6)=door THEN GO TO 200
80 LET d(m)=q5: LET e(m)=q6
85 NEXT q
90 PRINT AT d(m),e(m); INK i(m); PAPER 7; OVER 1;"m"
95 NEXT m
100 GO TO 27
105 LET q5=d(m): LET q6=e(m): RETURN
199 REM >>Doors of what room?<<
200 DATA 2,4,2,2,4,2,11,4,14,3,2,18,4,19,5,1,19,10,2,4,11,2,17,2,2,23,4,31,2,18,28,16,28,3,12,23,9,30,13,29,1,20,20
205 RESTORE 200
210 FOR y=1 TO 9: READ q
215 FOR x=1 TO q: READ u: READ w: IF q5=u AND q6=w THEN GO TO 240
220 NEXT x: NEXT y
235 IF y>9 THEN LET y=9
240 GO SUB f(y)
242 LET q1=y
245 OVER 1: PLOT 8,32: DRAW 24,0: DRAW 0,40: DRAW -24,0: DRAW 0,-40: PLOT 8,63: DRAW 24,0: PRINT AT 13,1;"YOU": GO SUB c(m)
250 IF m<>2 AND m<>4 THEN PRINT AT 15,2; INK i(m);"gh";AT 16,2;"ij";AT 17,2;"kl"
255 IF m=2 OR m=4 THEN PRINT AT 15,1; INK i(m);"ghi";AT 16,1;"jkl"
260 PLOT 48,32: DRAW 32,0: DRAW 0,40: DRAW -32,0: DRAW 0,-40: PLOT 48,63: DRAW 32,0: PRINT AT 13,6;"WITH"
265 DIM x$(1,12): INPUT INK 0; PAPER 7;"Who are you with? (PLEASE use LOWER CASE & A CAPITAL FOR the beginning of the name)";x$(1)
285 FOR y=1 TO 5
290 IF x$(1)=b$(y) THEN GO TO 300
295 NEXT y
297 GO TO 265
300 GO SUB c(y)
302 LET q2=y
305 IF y=2 OR y=4 THEN PRINT AT 15,7; INK i(y);"ghi";AT 16,7;"jkl"
310 IF y<>2 AND y<>4 THEN PRINT AT 15,7; INK i(y);"gh";AT 16,7;"ij";AT 17,7;"kl"
315 PLOT 96,32: DRAW 88,0: DRAW 0,40: DRAW -88,0: DRAW 0,-40: PLOT 96,63: DRAW 88,0: PRINT AT 13,12;"MURDER TOOL"
320 DIM y$(1,8): INPUT INK 0; PAPER 7;"What TOOL will you bring with you?(Use LOWER CASE & ONE CAPITAL for the beginning letter)";y$(1)
325 FOR z=1 TO 5
330 IF y$(1)=c$(z) THEN GO TO 340
335 NEXT z
337 GO TO 320
340 LET q3=z: IF z=4 THEN GO TO 365
341 IF q3=5 THEN GO TO 347
342 GO SUB 355
345 PRINT AT 15,17; INK ink;CHR$ (z+143): GO TO 350
347 GO SUB 355: PRINT AT 15,17; INK ink;"f"
350 GO TO 375
355 RESTORE 357
357 DATA 0,1,6,2,5
360 FOR x=1 TO z
362 READ ink
363 NEXT x
364 RETURN
365 PRINT AT 14,17; INK 2;"e";AT 15,17; INK 0;"d"
370 GO TO 350
380 PRINT AT 11,0;b$(m);" is in the ";d$(q1);" with ";b$(q2);" and the";AT 13,23;c$(q3)
382 LET pointer=m+1: IF pointer>players THEN LET pointer=1
385 PRINT AT 19,0;b$(pointer);", which card do you wish to show ";b$(m);"?": DIM x$(1,12): INPUT x$(1): PRINT AT 19,0; OVER 0;" "
390 IF x$(1)="none " THEN GO TO 400
395 GO TO 455
400 GO SUB 9452: FOR z=1 TO 10
405 IF k$(pointer,z)=d$(q1) OR k$(pointer,z)=b$(q2) OR k$(pointer,z)=c$(q3) THEN GO TO 420
410 NEXT z
415 PRINT AT 18,0;b$(m);", he's telling the truth!!!": PAUSE 0: PRINT AT 18,0; OVER 0;" ": GO TO 490
455 GO SUB 9452: FOR z=1 TO 10
460 IF k$(pointer,z)=x$(1) THEN GO TO 470
465 NEXT z
467 PRINT AT 18,0;b$(pointer);", you must show a card that you were GIVEN in the DETECTIVE NOTES!": PAUSE 0: PRINT AT 18,0; OVER 0;" "
469 GO TO 385
470 PRINT AT 18,0;b$(m);", ";b$(pointer);" has the ";x$(1);"."
475 PAUSE 0
480 PRINT AT 18,0; OVER 0;" "
490 PRINT AT 18,0; OVER 0;"Does ";b$(m);" wish to make a guess for the murderer, tool, and the room in which it was committed?": DIM x$(1,1): INPUT x$(1)
492 PRINT AT 18,0; OVER 0;" "
495 IF x$(1,1)="N" OR x$(1,1)="n" THEN CLS : GO SUB 9792: GO TO 95
500 IF x$(1,1)<>"Y" AND x$(1,1)<>"y" THEN GO TO 490
502 PRINT AT 18,0; OVER 0;"Okay, ";b$(m);", I hope you're right because I've been wanting to massacre the culprit who killed Mr. Howel. Here goes>": PAUSE 0: PRINT AT 18,0; OVER 0;" "
505 DIM x$(3,12): INPUT "In which ROOM was the murder done?";x$(1): IF x$(1)=" " THEN GO TO 490
506 LET q14=1
507 GO SUB 6125
508 IF flag=1 THEN GO TO 505
510 INPUT "WHO was the murderer/murderess?";x$(2): IF x$(2)=" " THEN GO TO 490
511 LET q14=2
512 GO SUB 6125
513 IF flag=1 THEN GO TO 510
515 INPUT "What murder TOOL was used to commit it?";x$(3): IF x$(3)=" " THEN GO TO 490
516 LET q14=3: GO SUB 6125: IF flag=1 THEN GO TO 515
517 DIM z$(1,8): LET z$(1)=x$(3): GO SUB 6155
520 GO SUB 9452
525 IF x$(1)<>n$(g(1)) OR x$(2)<>n$(g(3)) OR x$(3)<>n$(g(2)) THEN GO TO 600
530 GO SUB 6000
535 PRINT AT 0,0; OVER 0; INK 7; PAPER 0;x$(2);": Okay, I admit that I did the murder, and I do give up. However, you'll have togive me $50,000,000 for Mr. Howell's body... ": PAUSE 0
545 GO TO 3000
600 GO SUB 6000
605 PRINT AT 0,0; OVER 0; INK 7; PAPER 0;"Police: Take these pills, ";x$(2);". Now tell us the truth. ": PAUSE 0
610 PRINT AT 0,0; INK 7; PAPER 0; OVER 0;x$(2);": I didn't do it, though! Police: Well, ";b$(m);" it looks like we are going to have to arrest you for false accusation...Sorry! ": PAUSE 0
615 LET v(m)=1: CLS : GO SUB 9792
620 GO TO 95
2000 REM >>Game Over<<
2005 BORDER 5: PAPER 5: INK 0: FLASH 0: BRIGHT 0: OVER 0: INVERSE 0: CLS
2010 PRINT "Now no one will ever solve the MURDER. Whoever committed it, was pretty sly & smart, since you 'top-notch' detectives could not complete your task. ": PRINT : PRINT INK 2;"However, I, the computer, knows the answer, since I witnessed the incident, and I shall give you ONE clue to the murderer, murder tool, & the room in which it was committed:": PRINT
2015 LET k=INT (RND*3)+1
2017 GO SUB 9452
2020 GO TO (2030 AND k=3)+(2040 AND k=2)+(2050 AND k=1)
2030 PRINT "THE SUM OF THE ASC II NAME DE- CODED IS:";
2031 LET l=0: FOR z=1 TO LEN n$(g(3)): LET l=l+CODE (n$(g(3),z)): NEXT z
2032 PRINT l
2035 GO TO 2055
2040 PRINT "THE ASC II CODE FOR HIS NAME IS:";
2041 FOR z=1 TO LEN n$(g(3)): PRINT CODE (n$(g(3),z));",";: NEXT z: PRINT " "
2045 GO TO 2055
2050 PRINT "THE NAME BEGINS WITH:";n$(g(3), TO 6)
2055 LET k=INT (RND*3)+1: GO TO (2060 AND k=3)+(2070 AND k=2)+(2080 AND k=1)
2060 PRINT "THE SUM OF THE ASC II CODE OF THE TOOL IS:";
2062 LET l=0: FOR z=1 TO LEN n$(g(2)): LET l=l+CODE (n$(g(2),z)): NEXT z
2065 PRINT l: GO TO 2085
2070 PRINT "THE TOOL'S NAME BEGINS WITH:";: PRINT n$(g(2),1): GO TO 2085
2080 PRINT "THE TOOL HAS A CODE VALUE IN ORDER OF SPELLING OF:";: FOR z=1 TO LEN n$(g(2)): PRINT CODE (n$(g(2),z));",";: NEXT z
2082 PRINT " "
2085 PRINT "THE ROOM'S CODE IS:";: FOR z=1 TO LEN n$(g(1)): PRINT CODE (n$(g(1),z));",";: NEXT z: PRINT " "
2090 INPUT "Another Game?"; LINE v$: IF v$(1)="n" OR v$(1)="N" THEN PRINT x$(1900)
2095 CLEAR : GO TO 7
3000 REM >>Game Over--Solved<<
3005 PAPER 6: BORDER 6: INK 1: FLASH 0: BRIGHT 0: OVER 0: INVERSE 0: CLS
3010 FOR z=1 TO LEN b$(m)-3: IF b$(m,z TO z+2)="Mr." THEN GO TO 3040
3015 IF b$(m,z TO z+3)="Mrs." THEN GO TO 3050
3017 IF b$(m,z TO z+2)="Ms." THEN GO TO 3050
3020 NEXT z
3025 GO TO 3010
3040 PRINT : PRINT : PRINT "And so the case is SOLVED, thanks to SIR";b$(m,4 TO ): GO TO 3055
3045 PRINT : PRINT : PRINT "And so the case is SOLVED, thanks to LADY";b$(m,4 TO ): GO TO 3055
3050 PRINT : PRINT : PRINT "And so the case is SOLVED thanks to LADY";b$(m,5 TO )
3055 INK 3: CIRCLE 127,88,40: PLOT 107,88: DRAW 40,0,PI: CIRCLE 127,94,7: INK 0: FOR z=7 TO 0 STEP -1: CIRCLE 110,111,z: CIRCLE 144,111,z: NEXT z
3075 PRINT AT 19,4; INK 2; PAPER 4;"Keep up the GOOD work!!!": INPUT "Another Game?"; LINE v$: IF v$(1)="n" THEN PRINT x$(1900)
3080 CLEAR
3085 GO TO 7
5000 REM >>Next Player Still << >>Eligible? <<
5001 GO SUB 6150
5005 IF v(m)=0 THEN RETURN
5010 GO TO 95
5030 REM >>Dice Data<<
5035 LET a$="pu": LET restore=5040: GO SUB 9900: RETURN
5040 DATA 0,0,0,24,24,0,0,0
5045 DATA 3,3,0,0,0,0,192,192
5050 DATA 3,3,0,24,24,0,192,192
5055 DATA 102,102,0,0,0,0,102,102
5060 DATA 102,102,0,24,24,0,102,102
5065 DATA 102,102,0,102,102,0,102,102
5070 REM >>Error<<
5075 INPUT "CODE NAME?"; LINE a$
5080 IF a$<>" STOP AND THEN STEP " THEN RUN
5085 ON ERR RESET
5095 STOP
6000 REM >>Guess for Answers<<
6005 BORDER 7: PAPER 0: INK 7: OVER 0: CLS
6010 LET a$="gk": LET restore=6015: GO SUB 9900
6015 DATA 255,129,129,129,129,129,129,255,24,24,60,90,153,129,66,60
6020 DATA 240,243,247,255,255,247,243,240
6025 DATA 2,15,18,34,127,127,20,8,0,0,128,96,252,252,80,32
6030 INK 4: PAPER 4: PLOT 0,103: DRAW 16,0: DRAW 39,-39: DRAW -55,0: INK 0: DRAW 0,39
6035 FOR z=9 TO 13: LET q1=z-8: FOR x=0 TO q1: PRINT AT z,x; PAPER 4; OVER 1;"g": NEXT x: NEXT z
6040 FOR z=14 TO 21: PRINT AT z,0; INK 2;"::::::": NEXT z: FOR z=14 TO 18: PRINT AT z,3; INK 3; PAPER 6;": ";AT z,6; INK 7; PAPER 6;" :";AT z,4; PAPER 6;" ": NEXT z: PRINT AT 14,5; INK 7; PAPER 6;"h": PRINT AT 16,3; INK 3; PAPER 6;"i"
6045 INK 7: FOR z=24 TO 63 STEP 2: PLOT z,0: DRAW 0,23: NEXT z: FOR z=64 TO 71 STEP 2: PLOT z,0: DRAW 0,15: NEXT z: FOR z=72 TO 79 STEP 2: PLOT z,0: DRAW 0,7: NEXT z
6050 INK 4: PLOT 56,47: DRAW 191-56,0: DRAW 56,-47: DRAW -167,0
6055 FOR z=56 TO 191: PLOT z,47: DRAW 0,-23: NEXT z: FOR z=80 TO 215: PLOT z,24: DRAW 0,-24: NEXT z
6060 FOR z=64 TO 80: PLOT z,23: DRAW 0,-7: NEXT z: FOR z=72 TO 79: PLOT z,15: DRAW 0,-7: NEXT z
6065 LET q1=64: FOR z=0 TO 47: PLOT 191,z: DRAW q1,0: LET q1=q1-1.4: NEXT z
6070 INK 1: PRINT AT 0,0; INK 7; PAPER 0;"And Here Come The Cops In Their New Compact-Style Cars-----"
6075 PAPER 0: FOR z=7 TO 23 STEP 2: PRINT AT 15,z;"jk": BEEP .25,12: BEEP .25,9: PRINT AT 15,z;" ": NEXT z: PRINT AT 15,z;"jk"
6080 LET q1=z: FOR z=15 TO 20: PRINT AT z,q1; PAPER 0; INK 1;"jk": BEEP .25,12: BEEP .25,9: PRINT AT z,q1;" ": LET q1=q1+1: NEXT z: PRINT AT z-1,q1-1; INK 1; PAPER 0;"jk"
6081 LET a$="gl": LET restore=6082: GO SUB 9900
6082 DATA 0,0,0,0,0,1,11,59,0,0,0,0,0,252,252,252,2,4,12,28,2,3,1,0,200,36,130,2,4,8,16,224,0,33,17,51,163,29,1,1,224,240,240,240,240,240,240,240
6083 LET a$="pq": LET restore=6084: GO SUB 9900
6084 DATA 1,1,1,1,1,1,1,31,176,176,176,176,176,176,176,190
6085 OVER 0: PRINT AT 12,11; INK 1;"gh";AT 13,11; INK 3;"ij";AT 14,11; INK 1;"kl";AT 15,11; INK 7;"pq": INK 6: PRINT AT 0,0; OVER 0;"Okay, ";x$(2);", we know you're in there. Come out where ever you are!"
6087 PAUSE 0
6090 FOR z=1 TO 5: LET q15=z: IF x$(2)=b$(z) THEN GO TO 6100
6095 NEXT z
6100 GO SUB c(q15): IF q15<>2 AND q15<>4 THEN PRINT AT 13,8; OVER 1; INK 7;"gh";AT 14,8;"ij";AT 15,8;"kl"
6105 IF q15=2 OR q15=4 THEN PRINT AT 14,8; OVER 1; INK 7;"ghi";AT 15,8;"jkl"
6110 PRINT AT 0,0; OVER 0;x$(2);":What's all the commotion about? "
6112 PAUSE 0
6115 PRINT AT 0,0; OVER 0;"Police:Stop blufing ";x$(2);b$(m);" has charged you with murder of the first degree.I would advise you to give yourself up."
6117 PAUSE 0
6120 RETURN
6125 LET flag=0: FOR z=1 TO 19
6130 IF x$(q14)=n$(z) THEN RETURN
6135 NEXT z
6140 PRINT AT 18,0;"There is no such name in my vocabulary. Please be sure you have SPELLED correctly.": PAUSE 0: PRINT AT 18,0; OVER 0;" "
6145 LET flag=1: RETURN
6150 REM >>Everyone Gone?<<
6155 FOR z=1 TO players
6160 IF v(z)=0 THEN RETURN
6165 NEXT z
6170 GO TO 2000
7900 REM >>Roll Dice<<
7902 GO SUB 5030
7905 LET q1=INT (RND*6)+1: LET q2=INT (RND*6)+1: PRINT AT 14,13; OVER 0;CHR$ (CODE "o"+q1);AT 14,17;CHR$ (CODE "o"+q2): IF INKEY$=CHR$ (CODE "1") THEN GO SUB 9792
7907 IF INKEY$<>CHR$ 13 THEN GO TO 7905
7910 LET l=q1+q2
7915 IF INKEY$<>"" THEN GO TO 7915
7920 IF INKEY$="" THEN GO TO 7920
7925 RETURN
7990 FOR q=1 TO LEN l$
7991 GO SUB 7993
7992 NEXT q: RETURN
7993 IF l$(q)="5" THEN RETURN
7994 IF l$(q)="6" THEN RETURN
7995 IF l$(q)="7" THEN RETURN
7996 IF l$(q)="8" THEN RETURN
7997 GO TO 35
8000 REM >>Billiard Room<<
8002 LET a$="ru": LET restore=8003: GO SUB 9900
8003 DATA 0,0,0,0,255,137,213,163
8004 DATA 165,165,90,60,24,0,0,0
8005 DATA 73,73,73,255,255,73,73,73,73,73,73,73,73,73,73,73
8006 CLS : INK 0: PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87
8007 OVER 0: PRINT AT 1,9; INVERSE 1;"Billiard Room": PRINT AT 6,7; INK 4;"::::::::::::::::::::::::::::::::::": FOR z=7 TO 10: PRINT AT z,9;"::";AT z,21;"::": NEXT z
8008 FOR z=8 TO 22: PRINT AT 5,z;"r": NEXT z: PRINT AT 6,7; INK 2;"s";AT 6,23; INK 2;"s": PRINT AT 4,2;"ttt": FOR z=2 TO 4: PRINT AT 5,z; INK 3;"u";AT 6,z;"u";AT 3,z;"u": NEXT z
8009 OVER 1: RETURN
8010 REM >>Library<<
8011 OVER 0
8012 LET a$="rr": LET restore=8013: GO SUB 9900
8013 DATA 0,0,104,124,110,103,98,111
8014 CLS : INK 0: PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87
8015 PLOT 39,88: DRAW 0,64: DRAW 105,0: DRAW 0,-64
8016 INK 1: FOR z=3 TO 10: FOR x=5 TO 17: PRINT AT z,x;"r": NEXT x: NEXT z: INK 0: PRINT AT 1,12; INVERSE 1;"Library": INK 2: PRINT AT 8,21;"::::::::";AT 9,21;"::";AT 10,21;"::": FOR z=5 TO 10: PRINT AT z,24;"::": NEXT z: INK 0
8017 OVER 1: RETURN
8020 REM >>Study<<
8021 OVER 0
8022 LET a$="rs": LET restore=8023: GO SUB 9900
8023 DATA 24,36,66,66,36,24,60,126
8024 DATA 24,36,66,165,129,90,36,24
8025 CLS : PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87
8026 PRINT AT 1,13; INVERSE 1;"Study": FOR z=5 TO 10: PRINT AT z,7;"::";AT z,26;"::": NEXT z: PRINT AT 7,11;"::::::::::::::::::::": FOR z=8 TO 10: PRINT AT z,9;"::";AT z,12;"::";AT z,19;"::": NEXT z: PRINT AT 6,15; INK 1;"r";AT 4,26; INK 5;"s"
8027 PRINT AT 8,8;"::": RETURN
8030 REM >>Kitchen<<
8031 CLS : LET restore=8032: LET a$="ru": GO SUB 9900
8032 DATA 0,0,0,0,124,130,0,0
8033 DATA 0,0,0,0,0,0,0,126
8034 DATA 60,66,66,153,153,66,66,60
8035 DATA 0,0,0,0,254,14,14,0
8036 PRINT AT 0,9;"Kitchen": PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87
8037 PLOT 16,96: DRAW 32,0: DRAW 0,56: DRAW -32,0: DRAW 0,-56: PLOT 16,136: DRAW 32,0: PRINT AT 6,5; OVER 1;"r"
8038 PLOT 72,96: DRAW 40,0: DRAW 0,48: DRAW -40,0: DRAW 0,-48: PLOT 80,112: DRAW 24,0: DRAW 0,-8: DRAW -24,0: DRAW 0,8: PLOT 80,120: DRAW 0,16: DRAW 24,0: DRAW 0,-16: PRINT AT 6,9; OVER 1;"s";AT 6,11;"s";AT 6,13;"s";AT 5,11;"t"
8039 PLOT 136,112: DRAW 72,0: PLOT 144,104: DRAW 56,0: PLOT 144,112: DRAW 0,-16: PLOT 200,112: DRAW 0,-16: OVER 1: PRINT AT 8,18;"u u uu": RETURN
8040 REM >>Consevatory<<
8041 CLS : LET restore=8042: LET a$="ou": GO SUB 9900
8042 DATA 0,0,32,18,9,37,19,15,0,0,4,72,144,164,200,240
8043 DATA 15,19,37,9,18,32,0,0
8044 DATA 240,200,160,144,72,36,0,0
8045 DATA 0,24,60,126,126,60,24,0
8046 DATA 24,24,24,24,24,24,24,24,126,255,255,255,255,126,60,60
8047 PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87: INK 5: PLOT 24,96: DRAW 208,0: PLOT 24,96: DRAW 72,72: DRAW 64,0: DRAW 72,-72: PRINT AT 9,5;":::::::::::::::::: ::::::::::::::::::";AT 7,15; INK 2;"::::";AT 9,15; INK 3;" :: ";AT 8,15;" :: "
8048 INK 6: PRINT AT 1,27;"o p";AT 2,28;"s";AT 3,27;"q r": INK 0: PRINT AT 8,6;"t t t t";AT 8,19;"t t t t";AT 7,6; INK 4;"u u u u";AT 7,19;"u u u u"
8049 PRINT AT 0,0;"Conservatory": RETURN
8050 REM >>Ballroom<<
8051 CLS : LET a$="rs": LET restore=8052: GO SUB 9900
8052 DATA 0,24,60,126,126,60,24,0
8053 DATA 1,3,5,9,17,33,65,129
8054 PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87: PLOT 15,96: DRAW 225,0: DRAW 0,72: DRAW -225,0: DRAW 0,-72
8055 INK 5: PLOT 71,160: DRAW 121,0: DRAW 0,-33: DRAW -121,0: DRAW 0,33: INK 6: PLOT 16,144: DRAW 24,0: DRAW 0,-8: DRAW -8,0: DRAW 0,-8: DRAW -8,0: DRAW 0,-8: DRAW -8,-8: PLOT 239,144: DRAW -24,0: DRAW 0,-8: DRAW 8,0: DRAW 0,-8: DRAW 8,0: DRAW 0,-8: DRAW 8,-8: INK 0: PRINT AT 0,12;"Ballroom"
8056 INK 2: PRINT AT 3,14;"r": INK 0: PRINT AT 3,11;"s";AT 3,16;"s s": PLOT 72,128: DRAW 16,16: PLOT 96,144: DRAW 8,-8: DRAW 0,-8: PLOT 120,128: DRAW 0,8: DRAW 8,8: PLOT 135,144: DRAW 16,-16: PLOT 151,136: DRAW 8,8: PLOT 159,144: DRAW 16,-16: PLOT 168,136: DRAW 8,8: PLOT 183,144: DRAW 0,-16
8057 RETURN
8060 REM >>Hall<<
8061 CLS : LET a$="rr": LET restore=8062: GO SUB 9900
8062 DATA 0,0,24,60,60,24,0,0
8063 PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87: PLOT 48,96: DRAW 136,0: DRAW 0,56: DRAW -136,0: DRAW 0,-56: PLOT 104,104: DRAW 15,0: DRAW 0,23: DRAW -15,0: DRAW 0,-23: PRINT AT 7,14; OVER 1;"r": PRINT AT 1,12;"Hall"
8065 PLOT 48,151: DRAW 55,-23: PLOT 183,151: DRAW -63,-23: PLOT 48,96: DRAW 55,8: PLOT 183,96: DRAW -63,8: RETURN
8070 REM >>Lounge<<
8071 CLS : LET a$="ru": LET restore=8072: GO SUB 9900
8072 DATA 0,0,0,0,0,60,126,255,0,0,0,1,6,8,16,224
8073 DATA 0,0,0,224,16,8,8,15,24,60,126,126,0,0,0,0
8074 PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87: PRINT AT 1,11;"Lounge": PRINT AT 7,2;" : .............. :rrrrrrst: ";AT 7,7; OVER 1;"u";AT 6,15; OVER 0;" :";AT 6,24;": ";AT 8,2;" :.. : : :'''''''''''''''': ";AT 9,2;" : : : : : : "
8075 RETURN
8080 REM >>Dining Room.<<
8081 CLS : LET a$="ou": LET restore=8082: GO SUB 9900
8082 DATA 24,24,24,24,24,24,24,24,24,60,90,153,60,90,153,24,0,0,0,1,7,15,63,126
8083 DATA 0,0,0,31,31,9,63,17,0,0,0,248,248,144,252,136
8084 DATA 0,16,57,127,127,127,31,7,0,144,152,252,248,248,240,224
8085 PRINT AT 1,10;"Dining Room";AT 7,10; INK 4;"qp"; INK 0;" :: ::";AT 6,15;"::::";AT 8,2;" : ...... : "; INK 4;"qp "; INK 0;":: "; INK 2;"tu"; INK 0;" :: : ......";AT 9,2;" :': : : :': o :: "; INK 6;"rs"; INK 0;" :: :': : : "
8086 PLOT 0,88: DRAW 255,0: DRAW 0,87: DRAW -255,0: DRAW 0,-87
8087 LET a$="qq": LET restore=8088: GO SUB 9900
8088 DATA 0,0,0,128,224,240,252,126
8089 PRINT AT 7,12; INK 4;"q";AT 8,12;"q": RETURN
9400 REM >>Detective Notes<<
9401 CLS : GO SUB 9449
9402 INPUT "Do you own a PRINTER?(y/n)";q$: IF q$="" OR (q$<>"y" AND q$<>"n") THEN GO TO 9402
9403 FOR w=1 TO players: CLS : PRINT AT 0,9;"Player #";w;" Peg COLOR:";i(w);AT 2,9;"NAME:";b$(w);AT 4,9;"STATUS:Detective"
9405 PRINT AT 7,1;"Murder WPNS:";AT 7,1; OVER 1;"____________";AT 7,18;"Rooms:";AT 7,18;"______";AT 14,1;"SUSPECTS:";AT 14,1;"_________";AT 21,0;"Here are a list of your 'cards':"
9406 FOR x=1 TO 5: PRINT AT x+7,1;x;")";c$(x);AT x+14,1;x;")";b$(x): NEXT x: FOR x=1 TO 9: PRINT AT x+7,18;x;")";d$(x): NEXT x
9408 PLOT 8,167: DRAW 47,0: DRAW 0,-8: DRAW -47,0: DRAW 0,8: DRAW 0,-39: DRAW 47,0: DRAW 0,39
9409 PRINT AT 1,1; OVER 1;"PHOTO:"
9410 GO SUB c(w): IF w<>2 AND w<>4 THEN PRINT AT 3,3;"gh";AT 4,3;"ij";AT 5,3;"kl"
9411 IF w=2 OR w=4 THEN PRINT AT 3,2;"ghi";AT 4,2;"jkl"
9412 IF q$="y" THEN COPY /: GO TO 9414
9413 PRINT #0; INVERSE 1;"Press a key to continue... ": GO SUB 9890
9414 CLS : PRINT
9415 IF q$(1)="n" THEN FOR x=1 TO q1: PRINT x;")";k$(w,x, TO ): NEXT x
9416 IF q$(1)="y" THEN FOR x=1 TO q1: LPRINT x;")";k$(w,x, TO ): NEXT x: GO TO 9418
9417 PRINT #1;"Press a key for the next player.": GO SUB 9890
9418 NEXT w
9419 CLS : RETURN
9449 REM >>Deal Cards<<
9451 DIM k$(players,10,12): LET py=0: GO SUB 9452: GO TO 9455
9452 RESTORE 9452: DIM n$(19,12): FOR z=1 TO 19: READ n$(z): NEXT z: DATA "Billiard Rm.","Library","Study","Kitchen","Conservatory","Ballroom","Hall","Lounge","Dining Room"
9453 DATA "Wrench","Hammer","Rope","Candle","Pipe"
9454 DATA "Mr. Green","Col. Mustard","Ms. Scarlett","Mrs. White","Prof. Plum": RETURN
9455 GO SUB 9471: FOR x=1 TO players*(INT (16/players))
9456 LET py=py+1: IF py>players THEN LET py=1
9457 GO SUB 9469
9458 LET q=INT (RND*19)+1: IF n$(q,1)="x" THEN GO TO 9458
9459 LET k$(py,q1)=n$(q)
9460 LET q1=q1+1
9461 LET n$(q,1)="x"
9462 NEXT x
9463 IF INT (16/players)=16/players THEN RETURN
9464 FOR z=1 TO 16-(players*(INT (16/players))): LET py=py+1: IF py>players THEN LET py=1
9465 FOR y=1 TO 19: IF n$(y,1)<>"x" THEN GO TO 9467
9466 NEXT y
9467 GO SUB 9480: LET q1=w: LET k$(py,q1)=n$(y): NEXT z
9468 RETURN
9469 FOR w=1 TO 10: IF k$(py,w,1)<>" " THEN NEXT w
9470 LET q1=w: RETURN
9471 DIM g(3): LET g(1)=INT (RND*9)+1: LET g(2)=INT (RND*5)+10: LET g(3)=INT (RND*5)+15: LET n$(g(1),1)="x": LET n$(g(2),1)="x": LET n$(g(3),1)="x": RETURN
9475 REM >>Illegal<<
9477 BEEP .4,21: BEEP .4,21: RETURN
9480 REM >>Check for Space<<
9482 FOR w=1 TO 10: IF k$(py,w,1)=" " THEN RETURN
9483 NEXT w
9484 RETURN
9790 REM >>Draw Board<<
9792 BORDER 4: PAPER 7: INK 0: FLASH 0: INVERSE 0: OVER 0: CLS
9793 FOR z=0 TO 255 STEP 8: PLOT z,175: DRAW 0,-175: NEXT z: FOR z=0 TO 175 STEP 8: PLOT 0,z: DRAW 255,0: NEXT z
9794 PAPER 4: INK 3: PRINT AT 8,10;" ";AT 9,10;" ";AT 10,10;" ";AT 11,10;" ";AT 12,10;" ";AT 13,10;" ";AT 14,10;" ";AT 0,0;" ";AT 1,0;" ";AT 2,0;" ";AT 3,0;" ";AT 4,0;" ";AT 0,9;" ";AT 1,9;" ";AT 2,9;" ";AT 3,9;" ";AT 4,9;" "
9795 PRINT AT 0,23;" ";AT 1,23;" ";AT 2,23;" ";AT 3,23;" ";AT 4,23;" "
9796 PRINT AT 9,0;" ";AT 10,0;" ";AT 11,0;" ";AT 12,0;" ";AT 13,0;" ";AT 14,0;" ";AT 9,23;" ";AT 10,23;" ";AT 11,23;" ";AT 12,23;" ";AT 13,23;" "
9797 PRINT AT 15,10;" ";AT 18,0;" ";AT 19,0;" ";AT 20,0;" ";AT 21,0;" ";AT 18,10;" ";AT 19,10;" ";AT 20,10;" ";AT 21,10;" ";AT 20,19;" ";AT 21,19;" ";AT 16,23;" ";AT 17,23;" ";AT 18,23;" "
9798 PRINT AT 2,2;"B";AT 2,13;"C";AT 2,27;"A";AT 11,2;"L";AT 11,27;"O";AT 20,3;"S";AT 20,13;"K";AT 21,26;"D";AT 17,26;"H"
9799 PAPER 7: PRINT AT 13,12; INK 4;"CLUE---";AT 10,12; INK 6;"ANSWERS": INK 2: PRINT AT 4,2;"n";AT 2,4;"n";AT 4,11;"n";AT 2,17;"n";AT 2,23;"n";AT 4,31;"n";AT 11,4;"n";AT 14,3;"n";AT 12,23;"n";AT 9,30;"n";AT 13,29;"n";AT 18,4;"n";AT 19,5;"n";AT 19,10;"n";AT 20,20;"n";AT 18,28;"n";AT 16,28;"n"
9859 OVER 1: PAPER 7: INK 0: PRINT AT d(1),e(1); INK i(1);"m";AT d(2),e(2); INK i(2);"m";AT d(3),e(3); INK i(3);"m";AT d(4),e(4); INK i(4);"m";AT d(5),e(5); INK i(5);"m": RETURN
9860 REM >>Prof. PLUM<<
9862 LET a$="gl": LET restore=9863: GO SUB 9900: RETURN
9863 DATA 0,15,3,3,3,3,3,3
9864 DATA 0,240,192,192,192,192,192,192
9865 DATA 7,12,13,12,3,1,2,4
9866 DATA 224,48,176,48,192,128,64,32
9867 DATA 5,5,4,7,6,6,6,14
9868 DATA 160,160,32,224,96,96,96,112
9870 REM >>Mrs. White<<
9872 LET a$="gl": LET restore=9873: GO SUB 9900: RETURN
9873 DATA 0,1,1,1,0,3,0,0
9874 DATA 255,195,165,195,255,219,60,102
9875 DATA 0,128,128,128,0,128+64,0,0
9876 DATA 0,0,0,1,1,0,0,0
9877 DATA 129,126,255,129,129,255,36,102
9878 DATA 0,0,0,128,128,0,0,0
9880 REM >>Miss Scarlett<<
9881 LET a$="gl": LET restore=9882: GO SUB 9900: RETURN
9882 DATA 0,1,7,14,13,28,62,125
9883 DATA 0,192,224,112,176,56,124,190,1,3,7,7,3,1,1,3
9884 DATA 128,192,224,224,192,128,128,192
9885 DATA 7,7,7,3,1,1,1,7
9886 DATA 224,224,224,192,128,128,128,224
9890 IF INKEY$<>"" THEN GO TO 9890
9893 PAUSE 0: CLS : RETURN
9899 REM >>UDG's<<
9900 RESTORE restore: FOR z=USR (a$(1)) TO USR (a$(2))+7: READ a: POKE z,a: NEXT z: RETURN
9910 DATA 0,0,4,10,114,0,0,0
9920 DATA 0,0,4,3,127,3,0,0
9930 DATA 0,32,80,136,80,32,92,0
9940 DATA 16,16,16,146,124,56,0,0
9950 DATA 0,0,0,0,0,16,56,16
9960 DATA 0,6,6,6,126,120,0,0
9965 REM >>Mr. Green<<
9967 LET restore=9970: LET a$="gl": GO SUB 9900: RETURN
9970 DATA 0,0,1,2,6,1,1,0
9971 DATA 0,224,240,240,48,48,32,192
9972 DATA 0,1,2,2,2,2,3,3
9973 DATA 192,32,16,208,208,16,240,240
9974 DATA 3,3,7,14,28,24,112,112
9975 DATA 240,240,240,112,112,112,224,224
9980 REM >>Colnel Mustard<<
9982 LET a$="gl": LET restore=9985: GO SUB 9900 : RETURN
9985 DATA 0,0,0,0,0,0,0,1
9986 DATA 0,60,66,90,36,126,255,0
9987 DATA 0,0,0,0,0,0,0,BIN 10000000
9988 DATA 2,2,2,2,1,0,0,0
9989 DATA 0,195,195,0,255,36,36,231
9990 DATA 64,64,64,64,128,0,0,0
9992 REM >>Erase Trail<<
9995 PRINT AT d(m),e(m); INK 0; PAPER 7; FLASH 0; BRIGHT 0; OVER 1; INVERSE 0;"m": RETURN
9996 REM >>Scream!<<
9997 RETURNNote: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.


