Herramientas de usuario

Herramientas del sitio


es:dam_defender

¡Esta es una revisión vieja del documento!


DAM DEFENDER

Ficha

Autor Peregrine Haphton
Compatibilidad Amstrad PCW 8256 / 8512 / 9512
Año ????
Género Arcade
Controles Teclado
Idioma Inglés
Estado Preservado

Capturas

Descripción

Listado

  • Listado - DEFENDER.BAS
10 REM           DAM DEFENDER
20 REM        by Peregrine Haphton
30 REM (c) Computing with the Amstrad
40 REM -------------PCW--------------
50 GOSUB 1500:DIM d%(15),sb%(2,3),bo%(3,4):GOSUB 1180:GOSUB 1220
60 WHILE -1:GOSUB 980
70 mx%=255:my%=0:sx%=10:snd=-1:plx%=0:ply%=0:pl%=0:pla%=0:sp%=1:dead%=0:score=0:dp%=255:dp1%=0:dpx%=0
80 FOR f=1 TO 15:d%(f)=4:NEXT:FOR f=1 TO 3:bo%(f,1)=0:sb%(f-1,1)=0:NEXT
90 GOSUB 910:WHILE NOT(dead%):g%=-1
100 IF RND>0.5 AND pl%=0 THEN GOSUB 240
110 IF RND>0.5 AND sb%(sp%,1)=0 THEN GOSUB 280
120 FOR bp%=1 TO 3:IF pl% AND RND>0.25 AND bo%(bp%,1)=0 THEN GOSUB 310
130 NEXT:GOSUB 440:GOSUB 670:GOSUB 340:GOSUB 740
140 PRINT esc$"Y ":k$=LOWER$(INKEY$)
150 IF k$="z" AND sx%>0 THEN sx%=sx%-1
160 IF k$="x" AND sx%<32 THEN sx%=sx%+1
170 IF k$>"/" AND k$<":" THEN GOSUB 580
180 IF k$=CHR$(13) THEN GOSUB 630
190 IF k$="q" THEN snd=0 ELSE IF k$="s" THEN snd=-1
200 IF k$="e" THEN dead%=-1
210 WEND
220 IF snd THEN FOR f=1 TO 10:CALL dead:CALL zap:NEXT
230 WEND
240 REM new plane
250 pl%=-1:plx%=ABS(INT(RND*2))*40:IF plx%=40 THEN pla%=-1 ELSE pla%=1
260 ply%=4+INT(RND*8)
270 plx%=plx%+pla%:RETURN
280 REM new sub
290 sb%(sp%,1)=-1:sb%(sp%,2)=0:sb%(sp%,3)=1+INT(RND*10)
300 sp%=sp%+1:sp%=2*(sp%/2-sp%\2):RETURN
310 REM new bomb
320 bo%(bp%,1)=-1:bo%(bp%,2)=plx%-pla%:bo%(bp%,3)=ply%-1:bo%(bp%,4)=INT(RND*6)-3
330 RETURN
340 REM move all
350 FOR f=1 TO 3
360 IF sb%(f-1,1) THEN sb%(f-1,2)=sb%(f-1,2)+1
370 IF bo%(f,1) THEN bo%(f,2)=bo%(f,2)+bo%(f,4):bo%(f,3)=bo%(f,3)-1:IF bo%(f,3)<0 THEN bo%(f,3)=0
380 IF bo%(f,2)<0 THEN bo%(f,1)=0:bo%(f,2)=0
390 NEXT
400 IF mx%<255 THEN my%=my%+1
410 IF dp%<255 THEN dp1%=dp1%+1
420 IF pl% THEN plx%=plx%+pla%
430 RETURN
440 REM check dead
450 FOR f=1 TO 3:z%=0
460 IF sb%(f-1,1) AND ABS(dpx%-sb%(f-1,2))<2 AND ABS(dp1%-sb%(f-1,3))<2 AND dp%<>255 THEN sb%(f-1,1)=0:GOSUB 1370:score=score+250:dp%=255:IF snd THEN CALL dead
470 IF sb%(f-1,1) AND sb%(f-1,2)=34+(4-d%(sb%(f-1,3)+1)) THEN d%(sb%(f-1,3)+1)=d%(sb%(f-1,3)+1)-1:GOSUB 1370:l=1+sb%(f-1,3):GOSUB 880:z%=-1:sb%(f-1,1)=0:IF snd THEN CALL dead
480 IF z% AND d%(sb%(f-1,3)+1)=0 THEN dead%=-1
490 IF bo%(f,1) AND bo%(f,2)-sx%>0 AND bo%(f,2)-sx%<4 AND bo%(f,3)=0 THEN GOSUB 1460:bo%(f,1)=0:dead%=-1
500 IF bo%(f,2)>40 OR bo%(f,2)<2 OR bo%(f,3)<1 THEN GOSUB 1460:bo%(f,1)=0
510 NEXT
520 IF pl% AND mx%-plx%>=0 AND mx%-plx%<=2 AND ply%=my% THEN GOSUB 1410:pl%=0:score=score+100:mx%=255:IF snd THEN CALL dead
530 IF pl% AND plx%>39 THEN GOSUB 1410:pl%=0
540 IF pl% AND plx%=0 THEN GOSUB 1410:pl%=0
550 IF my%>10 THEN GOSUB 670:mx%=255
560 IF dp%=dp1% THEN dp%=255
570 RETURN
580 REM depth charge
590 IF dp%<255 THEN RETURN
600 IF snd THEN CALL zap
610 dp%=1+VAL(k$):dp1%=0:dpx%=sx%+2
620 RETURN
630 REM missile
640 IF mx%<255 THEN RETURN
650 IF snd THEN CALL zap
660 mx%=sx%+2:my%=1:RETURN
670 REM rub enemy
680 FOR f=1 TO 3
690 IF bo%(f,1) THEN a$=" ":x%=2*bo%(f,2):y%=12-bo%(f,3):POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
700 NEXT
710 IF mx%<>255 THEN a$=" ":x%=mx%*2:y%=12-my%:POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
720 a$=" ":x%=dpx%*2:y%=13+dp1%:POKE paper,85:POKE pen,255:CALL print1(x%,y%,a$)
730 RETURN
740 REM print all
750 a$=RIGHT$(STR$(score),LEN(STR$(score))-1):x%=22:y%=29:POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
760 IF snd THEN a$="ON " ELSE IF NOT(snd) THEN a$="OFF"
770 x%=28:y%=0:CALL print1(x%,y%,a$)
780 FOR f=1 TO 3
790 IF bo%(f,1) THEN a$=CHR$(4):x%=2*bo%(f,2):y%=12-bo%(f,3):POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
800 IF f<>3 AND sb%(f-1,1) THEN a$=" "+CHR$(5)+CHR$(6):x%=2*sb%(f-1,2):y%=13+sb%(f-1,3):POKE paper,85:POKE pen,0:CALL print1(x%,y%,a$)
810 NEXT
820 IF mx%<255 THEN x%=mx%*2:y%=12-my%:a$=CHR$(11):POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
830 IF pla%=1 THEN a$=" "+CHR$(0)+CHR$(1) ELSE a$=CHR$(2)+CHR$(3)+" "
840 IF pl% THEN x%=plx%*2:y%=12-ply%:POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
850 IF dp%<255 THEN x%=2*dpx%:y%=13+dp1%:a$=CHR$(12):POKE paper,85:POKE pen,0:CALL print1(x%,y%,a$)
860 a$=" "+CHR$(7)+CHR$(8)+CHR$(9)+" ":x%=2*sx%:y%=12:POKE pen,255:POKE paper,0:CALL print1(x%,y%,a$)
870 RETURN
880 REM print dam
890 a$=STRING$(4-d%(l)," ")+STRING$(d%(l),CHR$(10)):x%=72:y%=l+12:POKE paper,85:POKE pen,255:CALL print1(x%,y%,a$)
900 RETURN
910 REM screen setup
920 PRINT esc$"X  @z"esc$"E"esc$"H"esc$"0"esc$"f"
930 FOR l=1 TO 15:GOSUB 880:NEXT:POKE paper,85:FOR f=1 TO 15:a$=STRING$(36," "):x%=0:y%=12+f:CALL print1(x%,y%,a$):NEXT
940 a$="    ":x%=80:y%=27:CALL print1(x%,y%,a$)
950 POKE paper,0:a$="*** SCORE :      ***":x%=0:y%=29:CALL print1(x%,y%,a$)
960 a$="SOUND EFFECTS":x%=0:y%=0:CALL print1(x%,y%,a$)
970 RETURN
980 REM high-score table
990 FOR f=10 TO 1 STEP -1:IF score<hs(f) THEN p%=f:f=1
1000 IF f=1 AND score>hs(f) THEN p%=0
1010 NEXT
1020 IF p%=10 AND g% THEN 1110 ELSE IF p%=10 AND NOT(g%) THEN 1120
1030 p%=p%+1:FOR f=10 TO p%+1 STEP -1
1040 hs$(f)=hs$(f-1):hs(f)=hs(f-1)
1050 NEXT
1060 a$="Well done!":x%=35:y%=2:POKE pen,85:POKE paper,255:POKE double,1:CALL print1(x%,y%,a$)
1070 a$="You have attained":x%=28:y%=4:CALL print1(x%,y%,a$)
1080 a$="Rank number"+STR$(p%):x%=(90-2*LEN(a$))/2:y%=6:CALL print1(x%,y%,a$)
1090 PRINT esc$"Y)*";:INPUT "Enter your name :",hs$(p%):IF LEN(hs$(p%))>15 THEN hs$(p%)=LEFT$(h$(p%),15)
1100 hs(p%)=score:score=0:dead%=0
1110 a$="G a m e  O v e r":x%=29:y%=11:POKE double,1:POKE paper,85:POKE pen,255:CALL print1(x%,y%,a$):FOR f=1 TO 5000:NEXT
1120 PRINT esvc$"X  @z"esc$"E"esc$"H"esc$"0":CALL screen
1130 x%=13:y%=0:POKE double,0:POKE paper,170:POKE pen,255:a$="   T O D A Y ' S  H E R O E S   ":CALL print1(x%,y%,a$)
1140 POKE paper,0:POKE double,1:FOR f=1 TO 10:a$="000000":a$=LEFT$(a$,LEN(a$)-LEN(STR$(hs(f))))+RIGHT$(STR$(hs(f)),LEN(STR$(hs(f)))-1)+"      "+hs$(F):x%=10:y%=f*2:CALL print1(x%,y%,a$):NEXT
1150 a$="PRESS SPACE-BAR TO START OR K TO QUIT":x%=10:y%=29:POKE double,0:CALL print1(x%,y%,a$)
1160 k$="":WHILE k$="":r=RND:k$=INKEY$:IF UPPER$(k$)="K" THEN END:IF k$<>" " THEN k$=""
1170 WEND:g%=0:RETURN
1180 REM initialize high score table
1190 RESTORE 1210:FOR f=1 TO 10:READ hs$(f):hs(f)=(11-f)*100:NEXT:RETURN
1200 REM high scoring 'heroes'
1210 DATA Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW,Amstrad PCW
1220 REM udg definitions
1230 RESTORE 1240:FOR f=0 TO 103:READ n:POKE (udg+f),n:NEXT:RETURN
1240 DATA 0,128,192,255,112,15,31,0
1250 DATA 0,0,0,224,124,191,0,0
1260 DATA 0,0,0,7,62,253,0,0
1270 DATA 0,1,3,255,14,240,248,0
1280 DATA 0,0,40,16,16,16,0,0
1290 DATA 0,4,14,15,127,255,255,127
1300 DATA 0,0,0,128,240,252,252,240
1310 DATA 0,0,0,32,115,255,127,63
1320 DATA 96,64,228,239,254,255,255,255
1330 DATA 0,0,2,231,31,254,252,240
1340 DATA 255,4,4,4,255,32,32,32
1350 DATA 0,0,16,16,16,40,0,0
1360 DATA 0,68,56,56,56,56,16,16
1370 REM rub sub
1380 x%=sb%(f-1,2)*2:y%=13+sb%(f-1,3)
1390 a$="  ":POKE paper,85:POKE pen,255
1400 CALL print1(x%,y%,a$):RETURN
1410 REM rub plane
1420 x%=plx%*2:y%=12-ply%:a$="  "
1430 POKE paper,0:POKE pen,255:CALL print1(x%,y%,a$)
1440 IF mx%<>255 THEN x%=mx%*2:y%=12-my%:a$=" ":CALL print1(x%,y%,a$)
1450 RETURN
1460 REM rub bomb
1470 x%=bo%(f,2)*2:y%=12-bo%(f,3):a$=" "
1480 POKE pen,255:POKE paper,0
1490 CALL print1(x%,y%,a$):RETURN
1500 MEMORY &HCFFF:RESTORE 1670
1510 esc$=CHR$(27)
1520 addr=&HE000:FOR i=1 TO 40:sum=0
1530 READ code$,check$
1540 FOR j=1 TO 21 STEP 2
1550 byte=VAL("&H"+MID$(code$,j,2))
1560 POKE addr,byte:sum=sum+byte
1570 addr=addr+1:NEXT
1580 IF sum<>VAL("&H"+check$) THEN PRINT "Error : line ";i*10+1660:CLEAR:RUN "menu.bas":END
1590 NEXT:screen=&HE000:print1=&HE003
1600 udg=&HD100:pen=&HD001:paper=&HD000
1610 double=&HD006:zap=&HE176
1620 dead=&HE191:POKE pen,255
1630 POKE paper,0:POKE double,0
1640 PRINT esc$+"E"+esc$+"H"
1650 CALL screen:RETURN
1660 REM machine code data
1670 DATA C306E0C35BE0CD29E01198,626
1680 DATA 2C2100B60168013E20F5D5,395
1690 DATA 3E0873237223133D20F8D1,3AA
1700 DATA EB09EBF13D20ECC9C1CD5A,6CA
1710 DATA FCE900C9661A6F2202D00A,49B
1720 DATA 3210D0030A6F030A67ED4B,33A
1730 DATA 10D006001113D0EDB02A02,3A3
1740 DATA D0CDFCE02204D02113D022,595
1750 DATA 11D0C9CD30E0CD29E0F32A,67A
1760 DATA 11D07E232211D0CDEAE011,52D
1770 DATA 4FE1010800EDB0DD2A04D0,4B1
1780 DATA 0E08FD214FE12A00D07D06,3E1
1790 DATA 08FDCB0006380D07DDCB08,3D2
1800 DATA 16DDCB001607C3A4E0CB04,4F1
1810 DATA DDCB0816DDCB0016CB04DD,530
1820 DATA CB0816DDCB001610D7FD23,4AE
1830 DATA 3A06D0A7CAD1E0DD7E08DD,672
1840 DATA 7709DD7E00DD7701DD2379,4A9
1850 DATA FE05C2D1E001C802DD094F,576
1860 DATA DD230DC282E02A04D00110,440
1870 DATA 00092204D02110D035C262,359
1880 DATA E0FBC91100B8FE20300311,4CF
1890 DATA 00D16F260029292919C95C,31F
1900 DATA 260054CB25010FE1094E23,2D5
1910 DATA 46EB29292909C93059005C,363
1920 DATA D05EA06170644067106AE0,504
1930 DATA 6CB06F807250752078F07A,544
1940 DATA C07D9080608330860089D0,53F
1950 DATA 8BA08E709140941097E099,5AE
1960 DATA B09C809F50A220A5F0A7C0,679
1970 DATA AA90AD60B0000000000000,2F7
1980 DATA 0000000000000000000000,000
1990 DATA 0000000000000000000000,000
2000 DATA 0000000000000000000000,000
2010 DATA F31E01168F3E0BD3F84210,41D
2020 DATA FE3E0CD3F84210FE1520EF,587
2030 DATA 1D20EAFBC9F32100011600,416
2040 DATA 237EE61F4F3E0BD3F84110,45A
2050 DATA FE3E0CD3F84110FE1520EA,581
2060 DATA FBC9000000000000000000,1C4

Controles

      Z = IZQUIERDA 
      X = DERECHA
  ENTER = DISPARAR MISIL AÉREO
  1 a 9 = DISPARAR MISIL ANTISUBMARINO   
      Q = DESACTIVAR SONIDO
      S = ACTIVAR SONIDO
      E = ABANDONAR PARTIDA 

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 Dam Defender
4.- Teclear run "Defender" y pulsar la tecla "ENTER"

Extras

Descarga

Enlaces

es/dam_defender.1485683176.txt.gz · Última modificación: 2017/01/29 12:46 por jevicac