'$DYNAMIC DEFINT A-Z DECLARE SUB joystick (joybuff()) DECLARE SUB copypage (BYVAL page1, BYVAL page2) DECLARE SUB SETMODEX () DECLARE SUB setvispage (BYVAL page) DECLARE SUB drawsprite (pic(), pal(), BYVAL pal, BYVAL x, BYVAL y, BYVAL page) DECLARE SUB wardsprite (pic(), pal(), BYVAL pal, BYVAL x, BYVAL y, BYVAL page) DECLARE SUB stosprite (pic(), BYVAL x, BYVAL y, BYVAL page) DECLARE SUB loadsprite (pic(), BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL page) DECLARE SUB setpal (pal()) DECLARE SUB getsprite (pic(), BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL page) DIM newpal(767), trgt(315), tpal(8), jb(4), st(315), sp(8), bob(315), bpal(8) SCREEN 7: CLS DEF SEG = VARSEG(newpal(0)) BLOAD "PALETTE.STO", VARPTR(newpal(0)) DEF SEG = VARSEG(trgt(0)) BLOAD "target.pic", VARPTR(trgt(0)) DEF SEG = VARSEG(tpal(0)) BLOAD "target.pal", VARPTR(tpal(0)) DEF SEG = VARSEG(sp(0)) BLOAD "shot.pal", VARPTR(sp(0)) DEF SEG = VARSEG(bpal(0)) BLOAD "bob.pal", VARPTR(bpal(0)) joystick jb() WHILE jb(2) = 0 OR jb(3) = 0 joystick jb() WEND PRINT "upper-left and press a button" WHILE jb(2) > 0 AND jb(3) > 0 joystick jb() WEND xmin = jb(0): ymin = jb(1) WHILE jb(2) = 0 OR jb(3) = 0 joystick jb() WEND PRINT "lower-right and press a button" WHILE jb(2) > 0 AND jb(3) > 0 joystick jb() WEND xmax = jb(0): ymax = jb(1) WHILE jb(2) = 0 OR jb(3) = 0 joystick jb() WEND CLS : SCREEN 0 SETMODEX setpal newpal(): cp = 0: vp = 1: cc = 0: bp = 120: bx = 4: bxd = 1: by = 10 DEF SEG = VARSEG(st(0)) FOR i = 1 TO 4 BLOAD "shot.p1" + RIGHT$(STR$(i), 1), VARPTR(st(0)) stosprite st(), 0, i, 3 NEXT i DEF SEG = VARSEG(bob(0)) FOR i = 1 TO 3 BLOAD "bob.wk" + RIGHT$(STR$(i), 1), VARPTR(bob(0)) stosprite bob(), 0, i + 4, 3 NEXT i BLOAD "scare.bob", VARPTR(bob(0)) stosprite bob(), 0, 8, 3 BLOAD "shot.bob", VARPTR(bob(0)) stosprite bob(), 0, 9, 3 a$ = "h" WHILE a$ <> CHR$(27) setvispage vp: setvispage vp copypage 2, cp joystick jb() a$ = INKEY$ IF jb(0) > xmax THEN jb(0) = xmax IF jb(1) > ymax THEN jb(1) = ymax x = CINT((jb(0) - xmin) / (xmax - xmin) * 295) y = CINT((jb(1) - ymin) / (ymax - ymin) * 175) IF jb(2) = 0 OR jb(3) = 0 AND wsp = 0 THEN wsp = 1: sx = x: sy = y IF ABS(bx - sx) < 13 AND ABS(by - sy) < 13 AND wsp = 3 THEN loadsprite bob(), 0, 9, 25, 25, 3: wsp = 4: GOTO 90 IF ABS(x - bx) < 20 AND ABS(y - by) < 20 THEN loadsprite bob(), 0, 8, 25, 25, 3: GOTO 90 bp = bp + 1: IF bp > 3 THEN bp = 1 bx = bx + bxd * 4: IF bx = 292 THEN bxd = -1 ELSE IF bx = 4 THEN bxd = 1 loadsprite bob(), 0, 4 + bp, 25, 25, 3 90 IF bxd = 1 THEN wardsprite bob(), bpal(), 0, bx, by, cp IF bxd = -1 THEN drawsprite bob(), bpal(), 0, bx, by, cp IF wsp = 0 THEN GOTO 100 loadsprite st(), 0, wsp, 25, 25, 3 wsp = wsp + 1: IF wsp > 3 THEN wsp = 0 drawsprite st(), sp(), 0, sx, sy, cp 100 drawsprite trgt(), tpal(), cc, x, y, cp cc = cc + 1: IF cc > 7 THEN cc = 0 SWAP cp, vp WEND