User Tools

Site Tools

Translations of this page:




Author Peregrine Haphton
Computer Amstrad PCW 8256 / 8512 / 9512
Year 1987
Gender Arcade
Controls Keyboard
Languages English
Status Preserved



Due to a minor paperwork problem at Spewing Oil Inc, two rival refiner firms were awarded the same contract to build a pipeline between two major refiners.

“We care about the environment…” the public relations officer said while speaking with the managing director of one of the refinery companies, so we have marked on this map a gridded area where the pipeline may pass.

“If you don't come out, we'll come down on you like a ton of bricks and the job will go to someone else. We'll provide you with all the materials you need.”

Fred and Harry, the construction foremen of the two refinery companies, decided that the only way to solve the problem was to cooperate. They agreed to take turns laying out pieces of the pipe and splitting the cash at the end.

However, Harry was short on cash, so he began to play dirty, doing his best to force Fred out of the grid area. Fred fought back, doing his best to push Harry out of the area.

What happened next you can find out by playing Crazy Plumbing yourself. You can be Fred, Harry or anyone else from both companies, and it doesn't always have to be Harry who plays dirty.

Crazy Plumbing is a classic game for one or two players. The objective of the game is to reach the right corner of the first field, although we can also win by pushing our opponent off the grid.

In the game there are three types of pipes to select (1 to 3) any selection will place the pipe that we have selected at the end.

In the first phase we will not be able to select type 1.

The game makes extensive use of the large print routine published in the April 1987 issue of Computing with the Amstrad. If you don't have this program already installed, you'll need to type the full listing shown here.

However, if you have the large print routine saved to disk, you can save a lot of time by typing and following the instructions below:

First load your version of the large print routine, remove lines 10 to 30 and 50 to 310, and add the following line:

     495 POKE pen,255:POKE paper,0:POKE double,0:CALL screen:RETURN

then enter:

     RENUM 760

Now write the rest of the program up to line 760, as shown in the list.


  • Listing - PLUMBER.BAS
10 REM -------- CRAZY PLUMBING ----------
20 REM       by Peregrine Haphton 
30 REM (c) Computing with the Amstrad PCW
40 REM ----------------------------------
50 DIM grid(11,11),n(36),p$(2):DEFINT x,y:GOSUB 530
60 GOSUB 380:p$(0)="Fred":p$(1)="Harry"
70 FOR f=1 TO 40:PRINT:NEXT:PRINT CHR$(27)"E"CHR$(27)"H":CALL screen
80 FOR f=1 TO 2:PRINT CHR$(27);"Y";CHR$(32);CHR$(35+f*20)"Player";f;" is ";p$(f-1):NEXT
90 PRINT:PRINT "To change the name of the player input and press RETURN."
100 FOR f=1 TO 2:PRINT"Player ";f:INPUT">",n$
110 IF LEN(n$)>25 THEN n$=LEFT$(n$,25)
120 IF n$<>"" THEN p$(f-1)=n$
130 PRINT:NEXT:PRINT CHR$(27)"E":POKE pen,255:POKE paper,0:FOR f=0 TO 2
140 a$=STR$(f+1)+"="+CHR$(f*4)+CHR$(f*4+1):x=f*10:y=0:CALL print1(x,y,a$)
150 a$=CHR$(f*4+2)+CHR$(f*4+3):x=f*10+6:y=1:CALL print1(x,y,a$):NEXT
160 POKE pen,85:FOR f=1 TO 10:FOR g=1 TO 10:grid(f,g)=0:IF f=10 AND g=f THEN 190
170 x=10+f*4:y=g*2+5:a$=CHR$(12)+CHR$(12):CALL print1(x,y,a$)
180 x=10+f*4:y=g*2+6:a$=CHR$(12)+CHR$(12):CALL print1(x,y,a$)
190 NEXT:NEXT:grid(1,1)=3:p=3:x=14:y=7
200 GOSUB 630:go=1:pl=0:win=0:xx=1:yy=1
210 d=4:ongrid=-1:GOSUB 650:WHILE ongrid
220 PRINT CHR$(27);"Y";CHR$(60);CHR$(32);p$(pl);", your turn, what type do you choose?"
230 x=62:y=16:POKE double,0:a$="Turn: "+STR$(go):CALL print1(x,y,a$)
240 k$="":WHILE k$="":k$=INKEY$:WEND:IF k$="q" THEN win=3:ongrid=0:GOTO 310
250 IF k$<"1" OR k$>"3" THEN 240
260 IF go=1 AND k$="1" THEN 240
270 grid(xx,yy)=VAL(k$):x=10+xx*4:y=5+yy*2:p=grid(xx,yy):GOSUB 630
280 GOSUB 650:IF ongrid=0 THEN 310
290 pl=pl+1:pl=2*(pl/2-pl\2):go=go+1
300 PRINT CHR$(27)"Y"CHR$(60)CHR$(32)CHR$(27)"l"
310 WEND:ON win GOSUB 710,730,740
320 POKE double,0:b$=p$(pl)+" has won.":l=(45-LEN(b$))/2
330 a$=STRING$(l," ")+b$+STRING$(l," "):x=0:y=28:CALL print1(x,y,a$)
340 a$="Press SPACEBAR to start game or Q to quit.":x=0:y=30:CALL print1(x,y,a$)
350 k$="":WHILE k$="":k$=INKEY$:WEND
360 IF k$="q" THEN PRINT CHR$(27)"e"CHR$(27)"1":CLEAR:END
370 IF k$=" " THEN 70 ELSE GOTO 350
380 PRINT CHR$(27)"f"CHR$(27)"0"
390 x=0:y=0:POKE paper,85:POKE double,1:a$=STRING$(16," ")+"Crazy Plumbing"+STRING$(15," "):CALL print1(x,y,a$)
400 x=0:y=3:POKE paper,0:POKE double,0:a$=STRING$(15," ")+"for two players"+STRING$(13," "):CALL print1(x,y,a$)
410 x=26:y=5:POKE paper,0:POKE double,0:a$="@ Peregrine Haphton"
420 CALL print1(x,y,a$):PRINT CHR$(27)"Y"CHR$(38)CHR$(32)
430 PRINT " The object of the game is to get to the right corner of the field first: you can also win by pushing your oponent from the grid."
440 PRINT " In order to stop press Q":PRINT
450 PRINT " There are three types of tube:"
460 FOR f=0 TO 2:a$=CHR$(f*4)+CHR$(f*4+1):x=10:y=12+f*3:CALL print1(x,y,a$)
470 a$=CHR$(f*4+2)+CHR$(f*4+3)+"  Type"+STR$(f+1):x=10:y=13+f*3
480 CALL print1(x,y,a$):NEXT:PRINT CHR$(27)"Y"CHR$(52)CHR$(32)
490 PRINT " To select a type of tube simply press the number of that tube: the tube will be placed on the end."
500 PRINT:PRINT " You cannot use type 1 in the first turn!"
510 x=0:y=27:POKE paper,85:a$=STRING$(1," ")+"Press SPACE to start."+STRING$(9," "):CALL print1(x,y,a$)
530 GOSUB 760:PRINT CHR$(27)"E"CHR$(27)"H":RESTORE 550
540 FOR h=1 TO 36:READ n(h):NEXT
550 DATA -1,0,2,0,1,1,1,0,4,0,-1,3
560 DATA 1,0,4,0,-1,3,-1,0,2,0,1,1
570 DATA 0,1,1,-1,0,2,0,-1,3,1,0,4
580 RESTORE 600:FOR f=0 TO 12:FOR g=0 TO 7:READ n:POKE (udgs+f*8+g),n
600 DATA 3,1,1,1,3,7,142,252,192,128,128,128,0,0,1,15,240,128,0,0,1,1,1,3,63,113,224,192,128,128,128,192,3,1,1,1,0,0,128,240,192,128,128,128,192,224,113,63,252,142,7,3,1,1,1,3,15,1,0,0,128,128,128,192
610 DATA 3,1,1,1,1,1,128,255,192,128,128,128,128,128,1,255,255,128,1,1,1,1,1,3,255,1,128,128,128,128,128,192
620 DATA 24,24,24,255,255,24,24,24
630 POKE pen,255:POKE paper,0:a$=CHR$(p*4-4)+CHR$(p*4-3):CALL print1(x,y,a$)
640 y=y+1:a$=CHR$(p*4-2)+CHR$(p*4-1):CALL print1(x,y,a$):RETURN
650 win=0:x1=xx:y1=yy:d1=d:fl=-1
660 WHILE fl:o=(grid(x1,y1)-1)*12+(d1-1)*3+1:x1=x1+n(o):y1=y1+n(o+1):d1=n(o+2)
670 IF grid(x1,y1)=0 THEN fl=0
680 WEND:IF x1=10 AND y1=10 THEN ongrid=0:win=2
690 IF x1<1 OR x1>10 OR y1<1 OR y1>10 THEN ongrid=0:win=1:fl=0
700 xx=x1:yy=y1:d=d1:RETURN
710 a$=p$(pl)+" has been pushed of the grid.":x=0:y=0:POKE double,1
720 CALL print1(x,y,a$):pl=pl+1:pl=2*(pl/2-pl\2):RETURN
730 a$=p$(pl)+" has reached the lower right corner.":x=0:y=0:POKE double,1:CALL print1(x,y,a$):RETURN
740 a$=p$(pl)+" has quit.":x=0:y=0:POKE double,1:CALL print1(x,y,a$)
750 pl=pl+1:pl=2*(pl/2-pl\2):RETURN
770 RESTORE 850:address=&HE000
780 FOR i=1 TO 31:sum=0:READ code$,check$:FOR j=1 TO 21 STEP 2
790 byte=VAL("&H"+MID$(code$,j,2)):POKE address,byte:sum=sum+byte
800 address=address+1:NEXT
810 IF sum<>VAL("&H"+check$) THEN PRINT"Error in data line";i*10+1830:STOP
820 NEXT:screen=&HE000:print1=&HE003:udgs=&HD100
830 pen=&HD001:paper=&HD000:double=&HD006
840 POKE pen,255:POKE paper,0:POKE double,0:CALL screen:RETURN
850 DATA C306E0C35BE0CD29E01198,626
860 DATA 2C2100B60168013E20F5D5,395
870 DATA 3E0873237223133D20F8D1,3AA
890 DATA FCE900C9661A6F2202D00A,49B
900 DATA 3210D0030A6F030A67ED4B,33A
910 DATA 10D006001113D0EDB02A02,3A3
920 DATA D0CDFCE02204D02113D022,595
930 DATA 11D0C9CD30E0CD29E0F32A,67A
940 DATA 11D07E232211D0CDEAE011,52D
950 DATA 4FE1010800EDB0DD2A04D0,4B1
960 DATA 0E08FD214FE12A00D07D06,3E1
970 DATA 08FDCB0006380D07DDCB08,3D2
980 DATA 16DDCB001607C3A4E0CB04,4F1
990 DATA DDCB0816DDCB0016CB04DD,530
1000 DATA CB0816DDCB001610D7FD23,4AE
1010 DATA 3A06D0A7CAD1E0DD7E08DD,672
1020 DATA 7709DD7E00DD7701DD2379,4A9
1030 DATA FE05C2D1E001C802DD094F,576
1040 DATA DD230DC282E02A04D00110,440
1050 DATA 00092204D02110D035C262,359
1060 DATA E0FBC91100B8FE20300311,4CF
1070 DATA 00D16F260029292919C95C,31F
1080 DATA 260054CB25010FE1094E23,2D5
1090 DATA 46EB29292909C93059005C,363
1100 DATA D05EA06170644067106AE0,504
1110 DATA 6CB06F807250752078F07A,544
1120 DATA C07D9080608330860089D0,53F
1130 DATA 8BA08E709140941097E099,5AE
1140 DATA B09C809F50A220A5F0A7C0,679
1150 DATA AA90AD60B0000000000000,2F7


         1 = PLACE PIPE TYPE 1
         2 = PLACE PIPE TYPE 2
         3 = PLACE PIPE TYPE 3
         Q = LEAVE GAME

Loading the program

 1.- Insert the CP/M disc on side 2
 2.- Write BASIC and wait for it to load
 3.- Remove the CP/M disk and insert the disk containing the Crazy Plumbing game
 4.- Type run "Plumber" and press the "ENTER" key


  • Listing of the program in a large-circulation magazine of the time

crazy_plumbing_01.jpg crazy_plumbing_02.jpg



en/crazy_plumbing.txt · Last modified: 2022/06/29 01:20 by jevicac