====== MARIO´S CEMENT FACTORY ====== {{:otros:Mario_Cement_Factory_p1.jpg?690|}} ===== Ficha ===== ^ Autor | ??????? | ^ Computadora | Amstrad PCW 8256 / 8512 / 9512 | ^ Año | ???? | ^ Género | Arcade | ^ Controles | Teclado | ^ Lenguajes | Inglés | ^ Estado | [[preservado|Preservado]] | ===== Capturas ===== {{:otros:Mario_Cement_Factory_screenshot01.png?220}} {{:otros:Mario_Cement_Factory_screenshot02.png?220}} {{:otros:Mario_Cement_Factory_screenshot03.png?220}} {{:otros:Mario_Cement_Factory_screenshot04.png?220}} ===== Descripción ===== Un juego increíble basado en una de las maquinitas del famoso personaje Mario Bros, la "Mario´s Cement Factory". Nuestra misión será en que nuestro personaje llamado Mario, debe vaciar las tolvas de cemento en los camiones que se encuentran en la parte inferior de la pantalla. Deberemos usar los ascensores que suben y bajan para movernos por la fábrica. Para vaciar las tolvas deberemos estar junto a ellas y luego pulsar la barra espaciadora para que se lleve a efecto el vaciado de las mismas, haciendo que vayamos sumando puntos. Para desplazarnos a izquierda o derecha usaremos las teclas de cursor. Deberemos de tener cuidado a la hora de subir o bajar por un ascensor, habrá que hacerlo en el momento preciso o caeremos por el hueco del mismo haciéndonos perder una vida. Sólo podremos pasar de un ascensor a otro en el momento exacto en que pasa. El juego comienza con cinco vidas indicadas en la parte superior izquierda de la pantalla. Perderemos una vida si caemos por el hueco del ascensor o somos aplastados por la parte superior o inferior del ascensor. Si alguna de las cuatro tolvas está llena (tres capas de cemento), aparecerá un indicador de advertencia. Si la tolva se sobrellena, entonces, Mario será despedido en el acto y el juego se termina. Podemos abandonar la partida en cualquier momento del juego pulsando la tecla EXIT. ===== Listado ===== * **__Listado - MARIO.BAS__** 10 OPTION RUN:DEFINT a-z:DEFSNG e:hi!=HIMEM:MEMORY &HBFFF,1000:GOSUB 1510:DIM a%(22,65),sz(4),LX(4),b(8,17) 20 RESTORE 30:FOR x=&HC070 TO &HC098:READ pk:POKE x,pk:NEXT x 30 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41 40 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201 50 char=200:lives=5 60 count=17:ch=char:WHILE char0 THEN GOTO 420 ELSE X$=INKEY$:IF X$="" THEN cnt=cnt+1 350 IF X$=CHR$(27) THEN MEMORY hi!:END 360 IF X$=" " THEN cnt=1:GOSUB 790 370 IF X$=CHR$(1) AND MY>23 THEN cnt=1:GOSUB 610 380 IF X$=CHR$(6) AND MY<60 THEN cnt=1:GOSUB 630 390 ON cnt GOSUB 650,1020,650,1130,1080,650,1180 400 IF cnt=7 THEN cnt=0 410 GOTO 340 420 IF (ml=1 AND LX(1)<6) OR (ml=2 AND LX(2)<6) THEN mx=lx(ml)-2:my=42:ml=0:GOTO 1370 430 IF (ml=3 AND LX(3)>20) OR (ml=4 AND LX(4)>20) THEN mx=(lx(ml)-2):my=39:ml=0:GOTO 1370 440 ON ml GOTO 450,490,530,570 450 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390 460 IF X$=CHR$(6) THEN IF lx(1)=9 OR lx(1)=14 THEN MX=(LX(1)-2):MY=45:PRINT FNat$(MX,MY)man$(1):ml=0:PRINT FNat$(LX(1)-2,42)blank$:GOTO 340 470 IF X$=CHR$(1) THEN IF lx(3)=lx(1) THEN ml=3 :PRINT FNat$(lx(1)-2,42)blank$ ELSE IF lx(4)=lx(1) THEN ml=4:PRINT FNat$(lx(1)-2,42)Blank$:GOTO 390 480 GOTO 340 490 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390 500 IF X$=CHR$(6) THEN IF lx(2)=9 OR lx(2)=14 THEN MX=(LX(2)-2):MY=45:PRINT FNat$(MX,MY)man$(1):PRINT FNat$(LX(2)-2,42)blank$:ml=0:GOTO 340 510 IF X$=CHR$(1) THEN IF lx(3)=lx(2) THEN ml=3 :PRINT FNat$(lx(2)-2,42)blank$ ELSE IF lx(4)=lx(2) THEN ml=4:PRINT FNat$(lx(2)-2,42)blank$:GOTO 390 520 GOTO 340 530 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390 540 IF X$=CHR$(1) THEN IF lx(3)=10 OR lx(3)=15 OR LX(3)=20 THEN MX=(LX(3)-3):MY=37:PRINT FNat$(MX,MY)man$(1):ml=0:PRINT FNat$(LX(3)-3,39)blank$:LX(3)=LX(3)-1:GOTO 340 550 IF X$=CHR$(6) THEN IF lx(1)=lx(3)-2 THEN ml=1:LX(3)=LX(3)-1:LX(1)=LX(1)+1:PRINT FNat$(lx(3)-2,39)blank$ ELSE IF lx(2)=lx(3)-2 THEN ml=2:PRINT FNat$(lx(3)-3,39)blank$:LX(3)=LX(3)-1:LX(2)=LX(2)+1:GOTO 390 560 GOTO 340 570 X$=INKEY$:IF X$="" THEN cnt=cnt+1:GOTO 390 580 IF X$=CHR$(1) THEN IF lx(4)=10 OR lx(4)=15 OR lx(4)=20 THEN MX=(LX(4)-3):MY=37:PRINT FNat$(MX,MY)man$(1):ml=0:PRINT FNat$(LX(4)-3,39)blank$:LX(4)=LX(4)-1:GOTO 340 590 IF X$=CHR$(6) THEN IF lx(1)=lx(4)-3 THEN ml=1:LX(4)=LX(4)-1:LX(1)=LX(1)+1:PRINT FNat$(lx(4)-2,39)blank$ ELSE IF lx(2)=lx(4)-3 THEN ml=2:PRINT FNat$(lx(4)-3,39)blank$:LX(4)=LX(4)-1:LX(2)=LX(2)+1:GOTO 390 600 GOTO 340 610 IF my=45 THEN IF lx(1)=(mx+1) THEN ML=1 ELSE IF lx(2)=mx+1 THEN ML=2 ELSE IF MY=45 THEN GOTO 1370 620 LX(ml)=LX(ml)+1:MY1=MY:MY=MY-2:PRINT FNat$(MX,MY)MAN$(1) FNat$(MX,MY1)blank$:RETURN 630 IF my=37 THEN IF lx(4)=(mx+2) THEN ML=4 ELSE IF lx(3)=(mx+2) THEN ML=3 ELSE IF MY=37 THEN GOTO 1370 640 MY1=MY:MY=MY+2:PRINT FNat$(MX,MY)MAN$(1) FNat$(MX,MY1)blank$:RETURN 650 REM MOVE CARTS 660 PRINT FNat$(2,cy)cart$(c):cy=cy+1 670 PRINT FNat$(2,ccy)Cart$(c1):ccy=ccy+1 680 IF cy=20 AND (c=1 AND cc=1) THEN c=2:h=1:GOSUB 940 690 IF ccy=20 AND (c1=1 AND ccc=1) THEN c1=2 :h=1:GOSUB 960 700 IF cy=64 AND (c=1 AND cc=2) THEN c=2 :h=2:GOSUB 950 710 IF ccy=64 AND (c1=1 AND ccc=2) THEN c1=2 :h=2:GOSUB 970 720 IF cy=82 AND cc=1 THEN PRINT FNAT$(2,cy)" "+STRING$(3,8)+CHR$(10)+" ":cy=2:c=1:cc=2 730 IF cy=82 AND cc=2 THEN PRINT FNAT$(2,cy)" "+STRING$(3,8)+CHR$(10)+" ":cy=2:c=1:cc=1 740 IF ccy=82 AND ccc=1 THEN PRINT FNAT$(2,ccy)" "+STRING$(3,8)+CHR$(10)+" ":ccy=2:c1=1:ccc=2 750 IF ccy=82 AND ccc=2 THEN PRINT FNAT$(2,ccy)" "+STRING$(3,8)+CHR$(10)+" ":ccy=2:c1=1:ccc=1 760 IF sz(1)=-3 THEN PRINT FNat$(6,23)"WARNING" ELSE PRINT FNat$(6,23)" " 770 IF sz(2)=-3 THEN PRINT FNat$(6,56)"WARNING" ELSE PRINT FNat$(6,56)" " 780 RETURN 790 REM WORK HOPPERS 800 h=0:IF MX=7 AND MY=23 THEN h=1 810 IF MX=12 AND MY=23 THEN h=3 820 IF MX=7 AND MY=61 THEN h=2 830 IF MX=12 AND MY=61 THEN h=4 840 IF h=0 THEN RETURN 850 ON h GOTO 860,880,900,920 860 IF sz(1)=0 THEN GOTO 330 ELSE sz(1)=sz(1)+1:PRINT FNat$((8+sz(1)),20)" " 870 IF sz(3)=-3 THEN GOSUB 1000 ELSE FOR sx=9 TO (12+sz(3)):PRINT FNat$(sx,20)sand$:NEXT sx:sz(3)=sz(3)-1:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):GOTO 330 880 IF sz(2)=0 THEN GOTO 330 ELSE sz(2)=sz(2)+1:PRINT FNat$((8+sz(2)),64)" " 890 IF sz(4)=-3 THEN GOSUB 1010 ELSE FOR sx=9 TO (12+sz(4)):PRINT FNat$(sx,64)sand$:NEXT sx:sz(4)=sz(4)-1:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):GOTO 330 900 IF sz(3)=0 THEN GOTO 330 ELSE sz(3)=sz(3)+1:PRINT FNat$((13+sz(3)),20)" " 910 FOR sx=14 TO 20:PRINT FNat$(sx,20)sand$:NEXT sx:FOR i=1 TO 5:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):NEXT:GOSUB 1420:GOTO 330 920 IF sz(4)=0 THEN GOTO 330 ELSE sz(4)=sz(4)+1:PRINT FNat$((13+sz(4)),64)" " 930 FOR sx=14 TO 20:PRINT FNat$(sx,64)sand$:NEXT sx:FOR i=1 TO 5:SCORE=SCORE+1:PRINT FNat$(0,42)rev$"SCORE: "SCORE rof$ CHR$(7):NEXT:GOSUB 1430:GOTO 330 940 IF sz(1)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(1)):PRINT FNat$(sx,cy)sand$:NEXT sx:sz(1)=sz(1)-1:RETURN 950 IF sz(2)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(2)):PRINT FNat$(sx,cy)sand$:NEXT sx:sz(2)=sz(2)-1:RETURN 960 IF sz(1)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(1)):PRINT FNat$(sx,ccy)sand$:NEXT sx:sz(1)=sz(1)-1:RETURN 970 IF sz(2)=-3 THEN GOSUB 980 ELSE FOR sx=4 TO (7+sz(2)):PRINT FNat$(sx,ccy)sand$:NEXT sx:sz(2)=sz(2)-1:RETURN 980 FOR sx=4 TO 22:PRINT FNat$(sx,(cy-2))CHR$(7)+" "+STRING$(6,8)+CHR$(10)+rev$+" "+rof$:NEXT sx 990 PRINT STRING$(5,7):LIVES=1:GOTO 1370 1000 FOR sx=11 TO 22:PRINT FNat$(sx,18)CHR$(7)+" "+STRING$(6,8)+CHR$(10)+rev$+" "+rof$:NEXT sx:GOTO 990 1010 FOR sx=11 TO 22:PRINT FNat$(sx,62)CHR$(7)+" "+STRING$(6,8)+CHR$(10)+rev$+" "+rof$:NEXT sx:GOTO 990 1020 REM MOVE LIFTS 1030 IF ml=1 AND lx(1)<>3 THEN PRINT FNat$(LX(1)-3,42)liftman$+STRING$(3,8)+CHR$(10)+" ":GOTO 1050 1040 IF LX(1)=3 THEN GOTO 1070 ELSE PRINT FNat$(LX(1),42)CHR$(200)+CHR$(201)+CHR$(200)+STRING$(3,8)+CHR$(10)+" " 1050 IF LX(1)>4 THEN LX(1)=LX(1)-1 1060 IF LX(1)=4 THEN PRINT FNat$(5,42)" ":LX(1)=MIN((LX(2)+8),22) 1070 RETURN 1080 IF ml=3 AND lx(3)<23 THEN PRINT FNat$(LX(3)-3,39)" "+STRING$(3,8)+CHR$(10)+liftman$:GOTO 1100 1090 IF LX(3)=23 THEN GOTO 1120 ELSE PRINT FNAT$(LX(3),39)" "+STRING$(3,8)+CHR$(10)+CHR$(200)+CHR$(201)+CHR$(200) 1100 IF LX(3)<23 THEN LX(3)=LX(3)+1 1110 IF LX(3)=22 THEN PRINT FNat$(LX(3),39)" ":LX(3)=(LX(4)-8) 1120 RETURN 1130 IF ml=2 AND lx(2)<>3 THEN PRINT FNat$(LX(2)-3,42)liftman$+STRING$(3,8)+CHR$(10)+" ":GOTO 1150 1140 IF LX(2)=3 THEN GOTO 1170 ELSE PRINT FNat$(LX(2),42)CHR$(200)+CHR$(201)+CHR$(200)+STRING$(3,8)+CHR$(10)+" " 1150 IF LX(2)>4 THEN LX(2)=LX(2)-1 1160 IF LX(2)=4 THEN PRINT FNat$(5,42)" " :LX(2)=MIN((LX(1)+8),22) 1170 RETURN 1180 IF ml=4 AND lx(4)<22 THEN PRINT FNat$(LX(4)-3,39)" "+STRING$(3,8)+CHR$(10)+liftman$:GOTO 1200 1190 IF LX(4)=23 THEN GOTO 1220 ELSE PRINT FNAT$(LX(4),39)" "+STRING$(3,8)+CHR$(10)+CHR$(200)+CHR$(201)+CHR$(200) 1200 IF LX(4)<22 THEN LX(4)=LX(4)+1 1210 IF LX(4)=22 THEN PRINT FNat$(LX(4),39)" ":LX(4)=(LX(3)-8) 1220 RETURN 1230 REM SCREEN 1240 PRINT FNat$(4,3)GIRD$+GIRD$+" "+GIRD$+GIRD$+GIRD$+GIRD$+GIRD$+" "+GIRD$+GIRD$ 1250 PRINT FNat$(6,19)hop$ FNat$(6,63)hop$ FNat$(11,19)hop$ FNat$(11,63)hop$ 1260 j=201:FOR y=3 TO 82 STEP 79:FOR x=4 TO 22:j=1-j:PRINT FNat$(x,y)CHR$(ABS(j)):NEXT x:NEXT y 1270 PRINT FNat$(9,23)GIRD$+GIRD$+" "+GIRD$+GIRD$+CHR$(200)+CHR$(201) 1280 PRINT FNat$(14,23)GIRD$+GIRD$+" "+GIRD$+GIRD$+CHR$(200)+CHR$(201):PRINT FNat$(19,23)GIRD$+GIRD$ 1290 j=201:FOR x=15 TO 19:j=1-j:PRINT FNat$(x,23)CHR$(ABS(j)):NEXT x 1300 j=201:FOR x=19 TO 22:j=1-j:PRINT FNat$(x,38)CHR$(ABS(j)):NEXT x 1310 j=201:FOR x=15 TO 22:j=1-j:PRINT FNat$(x,45)CHR$(ABS(j)):NEXT x 1320 PRINT FNat$(22,1)rev$ SPACE$(88) Rof$ 1330 PRINT FNat$(21,11)train$(1) FNat$(22,11)TRain$(2):PRINT FNat$(21,55)train$(1)FNat$(22,55)train$(2) 1331 FOR y=0 TO 64 STEP 8:t=1:FOR x=1 TO 2:t=1-t:PRINT FNat$(24+x,y)train$(t+1):NEXT:NEXT 1332 FOR y=0 TO 80 STEP 8:t=1:FOR x=3 TO 4:PRINT FNat$(24+x,y)gird$:NEXT:NEXT 1333 PRINT FNat$(27,18)rev$" M A R I O ' S C E M E N T F A C T O R Y "rof$ 1335 FOR y=0 TO 64 STEP 8:t=1:FOR x=1 TO 2:t=1-t:PRINT FNat$(28+x,y)train$(t+1):NEXT:NEXT 1340 RETURN 1350 PRINT FNat$(0,0)"LIVES:":FOR i= 2 TO 6:PRINT FNat$(0,(i*3))man$(1):NEXT i:RETURN 1360 IF LIVES<>5 THEN FOR i=2 TO (6-LIVES):PRINT FNat$(0,24-(i*3))crump$:NEXT i:RETURN ELSE RETURN 1370 PRINT FNat$(mx,my)" "+CHR$(8)+CHR$(8)+CHR$(10)+" ":my=41:FOR mx=mx TO 21:FOR i=1 TO 20:NEXT i:PRINT FNat$(mx,my)CHR$(7)+downman$ FNat$((mx-1),my)" ":NEXT mx 1375 PRINT FNat$(4,38) GIRD$ FNat$(23,38)REV$" "rof$ 1380 PRINT FNat$(mx-1,my)crump$:lives=lives-1:MX=7:MY=23:GOSUB 1360:GOSUB 1570:IF LIVES=0 THEN GOTO 1390 ELSE GOTO 330 1390 IF INKEY$<>"" THEN PRINT CHR$(7) 1400 PRINT FNat$(23,25)rev$" DO YOU WANT ANOTHER GO? "rof$:x$=INKEY$:IF x$="" THEN GOTO 1390 1410 IF UPPER$(x$)="Y" THEN MEMORY hi!:RUN ELSE MEMORY hi!:END 1420 ok=FRE(""):FOR ty=1 TO 4:FOR i=1 TO 80:NEXT i:PRINT FNat$(21,7)SPACE$(ty)+train$(1) FNat$(22,7)SPACE$(ty)+train$(2):NEXT ty:RETURN 1430 ok=FRE(""):FOR ty=1 TO 4:FOR i=1 TO 80:NEXT i:PRINT FNat$(21,51)SPACE$(ty)+train$(1) FNat$(22,51)SPACE$(ty)+train$(2):NEXT ty:RETURN 1440 REM "Music" 1450 DATA 229,213,197,221,229,42,27,192,237,91,25,192,205,29,192,62 1460 DATA 12,211,248,221,225,193,209,225,201,0,0,0,0,243,125,203 1470 DATA 61,203,61,47,230,3,79,6,0,221,33,49,192,221,9,62 1480 DATA 11,0,0,0,4,12,13,32,253,14,63,5,32,248,60,254 1490 DATA 13,32,2,61,61,211,248,68,79,254,11,32,9,122,179,40 1500 DATA 9,121,77,27,221,233,77,12,221,233,251,201 1510 RESTORE 1450:FOR nn=&HC000 TO &HC05B:READ dd:POKE nn,dd:NEXT 1520 AZ=&HC000:BZ=&HC019:CZ=&HC01B 1530 RESTORE 1540:FOR NN=0 TO 9:READ E(NN):NEXT 1540 DATA 189.8765,210,234.4015,254.612,284,318,351,372,1740,6000 1550 time$="22224648" 1560 note$="77445467":RETURN 1570 FOR i=1 TO LEN(time$):dd=VAL(MID$(time$,i,1)):ff=VAL(MID$(note$,i,1)) 1580 f2=E(FF):tt=3500000!/(f2*2):tt=INT(tt/4-30.125) 1600 f2=INT(f2*(dd/12)) 1610 POKE BZ,f2-256*INT(f2/256):POKE BZ+1,INT(f2/256) 1620 POKE CZ,tt-256*INT(tt/256):POKE CZ+1,INT(tt/256):CALL AZ 1630 NEXT:RETURN ===== Controles ===== ↑ = ARRIBA ↓ = ABAJO → = DERECHA ← = IZQUIERDA SPACE = DESCARGAR EXIT = ABANDONAR ===== Carga del programa ===== 1.- Introducir el disco CP/M por la cara 2 2.- Escribir BASIC y esperar a que cargue 3.- Retirar el disco CP/M e introducir el disco que contiene el juego Mario´s Cement Factory 4.- Teclear run "Mario" y pulsar la tecla "ENTER" ===== Descarga ===== * {{:otros:Mario´s Cement Factory (Basic).zip|Mario´s Cement Factory }}(juego en formato dsk, comprimido con zip)