' List 2 -- Main Program -- DECLARE SUB matu (a&) DECLARE SUB pc (a%, b%, c$, d%) DECLARE SUB SpeedChange (w&) DECLARE SUB EndPG (w&, h%) SCREEN 7, 0, 3, 0: CLS : SCREEN , , 1, 0 DEFINT A-Z: RANDOMIZE TIMER DIM c%(67, 4), k%(123, 5), f%(1363, 2), b%(1843, 1), jx(40), jy(40) DIM t%(100, 112), h%(32, 17, 5), si(255): kk = 11 - 1 DIM kx(kk), ky(kk), kf(kk), kxn(kk), kyn(kk), kpn(kk) FOR i = 0 TO 255: si(i) = SIN(i * 3.14159 / 128) * 4: NEXT ON ERROR GOTO MakeFile OPEN e$ + "Hells.txt" FOR INPUT AS #1 INPUT #1, wp& INPUT #1, hiscr CLOSE #1 t$ = TIME$: WHILE t$ = TIME$: WEND t$ = TIME$: WHILE t$ = TIME$: WEND ' << Making Character >> DEF SEG = VARSEG(c%(0, 0)) BLOAD "d_ru.dat", VARPTR(c%(0, 0)) DEF SEG = VARSEG(f%(0, 0)) BLOAD "d_fi.dat", VARPTR(f%(0, 0)) DEF SEG = VARSEG(b%(0, 0)) BLOAD "d_bg.dat", VARPTR(b%(0, 0)) PALETTE 1, 0 LINE (6, 6)-(13, 15), 1, BF FOR i = 0 TO 3 LINE (8 + i, 0)-(8 + i, 19 - i), 15, BF NEXT LINE (9, 5)-(9, 17), 7 LINE (8, 0)-(11, 4), 6, BF: LINE (6, 5)-(13, 6), 12, BF GET (0, 0)-(19, 19), k%(0, 0) FOR n = 0 TO 1: FOR i = 0 TO 1: FOR j = 0 TO 8 a = 36 + (i = 0) * 3 + n * 5 + j * 2 * ((n = 0) - (n = 1)) IF j < 9 AND j > 2 OR i = 1 THEN LINE (a, j * 2 + 1)-STEP(2 - (i = 0) * 6, 2), 15 + (j < 3) * 9 + (i = 0) * 14, BF END IF NEXT: NEXT FOR i = 0 TO 2 a = 30 + n * 17 - (i * 2) * ((n = 0) - (n = 1)) LINE (a, 3 + i * 2)-STEP(2, 2), 12, BF NEXT: GET (20 + n * 20, 0)-STEP(19, 19), k%(0, n + 1) NEXT: CLS FOR i = 0 TO 2: c = 7 - (i = 2) * 5 CIRCLE (4 + i * 8, 4), 3, c: PAINT STEP(0, 0), 6 - (i = 1) * 8 + (i = 2) * 2, c GET (i * 8, 0)-STEP(7, 8), k%(0, 3 + i) NEXT: CLS m$ = " HELL's DASHER" COLOR 3: PRINT m$ FOR i = 0 TO 112: GET (i, 0)-STEP(1, 8), t%(0, i): NEXT TITLE: CLS : PALETTE 3, 8: st = 0: sc = 0 a = 11: b = 16: c = 42: d = 60 WHILE b > 13 AND res = 0 FOR i = 0 TO 112 PUT (c + i * 2, d + si((s + i * b) AND &HFF) * a), t%(0, i) NEXT a = a + (a > 0): b = b + (b > 0 AND a = 0) s = s + b AND &HFF PCOPY 1, 0: LINE (c, d \ 2 - 30)-STEP(220, 138), 0, BF IF b < 14 THEN PALETTE 3, 12 WEND SCREEN , , 0, 0 WHILE INKEY$ <> " " IF res = 1 THEN SCREEN , , 0, 0: PALETTE 3, 12: res = 2: FOR i = 0 TO 112: PUT (c + i * 2, d), t%(0, i): NEXT IF res OR b < 15 THEN PUT (152, 110), c%(0, 0), OR pc 14, 20, "press SPACE key", 3 s$ = LTRIM$(STR$(hiscr)) hs$ = RIGHT$("0000" + s$, 5) pc 13, 23, "High Score:" + hs$, 14 IF INP(&H60) = 1 THEN EndPG wp&, hiscr WEND SCREEN , , 1, 0 res = 1 START: CLS : stf = -(st <> 2 AND st <> 4) FOR i = 0 TO 40 jx(i) = i * 8: jy(i) = 135 + ((RND > .5) + (RND < .6)) NEXT m(0) = 279: m(1) = 279 * stf ' <-- m(0):life m(1):time x = 50: y = jy(x \ 8 + 1) - 14 jx = 0: jy = 135: jl = 8: jc = 0 mf = 0: cf = 0: xn = 0 pc 1, 22, "Life:", 10 pc 1, 23, "Time:", 9 pc 16, 1, "Score:", 15 stc = 8: pn = 1: ksx1 = 300 + (st = 2) * 60: ksx2 = 20 - (st = 2) * 60 s$ = "STAGE" + STR$(st + 1) bp = st MOD 2: GOSUB BG ' << Main >> DO m(1) = m(1) + (m(1) > 0) * 2 kac = kac + (kac > 0) tukare = tukare - (xn > 0 AND tukare < 5) m(0) = m(0) - tukare - (xn < 0) * 5 m(0) = m(0) + (m(0) > 279) * (m(0) - 279) GOSUB MOVE: ON -(stc = 0) GOSUB TURUGI GOSUB STAGE: GOSUB METER cf = -(x > 298) mf = -(cf = 0 AND (m(0) < 0 OR POINT(x + 7, y + 4 - (xn < 0) * 3) MOD 2 > 0)) mf = mf - (POINT(x, y) < 0 OR y > 141) IF stf AND jx * 8 > x + 12 OR stf = 0 AND (jx > x + 13 OR jx + 80 < x + 8) THEN mf = 1: y = 147 ac = (ac + 1) MOD 3 IF xn < 0 AND ac = 0 THEN pn = 1 - pn IF xn > 0 OR stc > 0 THEN pn = 1 - pn IF mf + cf = 0 THEN IF stf THEN y = jy(x \ 8 + 1) - 14 ELSE y = jy - 14 PUT (x, y), c%(0, pn - (xn < 0 AND stc = 0) * 2) GOSUB SCORE PCOPY 1, 0: LINE (0, 8)-(319, 162), 0, BF END IF GOSUB BG '----------------------------------------- IF INP(&H60) = 79 OR INP(&H60) = 80 THEN SpeedChange wp& IF INP(&H60) = 1 THEN EndPG wp&, hiscr '----------------------------------------- IF stc THEN c = c + 1 AND 7: pc 18, 11, s$, c + 8: stc = stc + (stc > 0) FOR i = 0 TO -(stc > 0) * 15: matu wp&: NEXT LOOP UNTIL mf > 0 OR cf > 0 ' << Game Over & Stage Clear >> SCREEN , , 1, 1: GOSUB BG IF x > 0 THEN PUT (x, y + 5 - cf * 2), c%(0, 0) ON cf + 1 GOSUB TI, CIR pc 16 - cf, 10, MID$("Game Over!! Stage Clear!!", cf * 13 + 1, 13), 12 - cf pc 18, 11, " ", 0 REDIM kf(kk) IF hiscr < sc THEN hiscr = sc IF cf = 0 THEN pc 14, 13, "Continue? [Y/N]", 15: ik = 0 WHILE ik < 2: ik = INSTR(" yYnN", INKEY$) IF INP(&H60) = 1 THEN EndPG wp&, hiscr WEND: sc = 0 ELSE GOSUB KMATI: st = st + 1 END IF GOSUB FADEOUT ON -(mf > 0) * (-(ik > 3) - (ik > 1 AND ik < 4) * 2) GOTO TITLE, START ON -(st < 6) GOTO START GOTO ENDING TI: FOR i = 0 TO 20 LINE (x + 7, y + 6)-(x + RND * 25 + 5, y + 4 - RND * 20), 12 NEXT: RETURN CIR: FOR i = 1 TO 84: CIRCLE (x + 7, y + 7), 100 - i, i MOD 7 + 8: NEXT RETURN MOVE: WHILE INKEY$ <> "": WEND xxn = xn: i = INP(&H60) xn = (i <> 57) - (i = 57) IF xxn > xn THEN kac = 8: tukare = 0 x = x + xn * (8 + (xn > 0) * 4 - kac) RETURN TURUGI: FOR i = 0 TO kk ON kf(i) + 1 GOSUB SHUTUGEN SELECT CASE kpn(i) CASE 0 ky(i) = ky(i) + kyn(i) CASE IS > 0 kx(i) = kx(i) + kxn(i): ky(i) = ky(i) + kyn(i) END SELECT IF kx(i) < 0 OR kx(i) > 300 OR ky(i) > 118 THEN kf(i) = 0 ELSE PUT (kx(i), ky(i)), k%(0, kpn(i)), OR NEXT RETURN SHUTUGEN: kf(i) = 1 SELECT CASE st CASE IS < 2: kpn(i) = st CASE 2: kpn(i) = 0 CASE 3: kpn(i) = 2 CASE 4: kpn(i) = 0 CASE 5: kpn(i) = RND * 2 END SELECT SELECT CASE kpn(i) CASE 0 kx(i) = RND * ksx1 + ksx2 ky(i) = 8: kyn(i) = RND * 2 + 2 CASE IS > 0 kxn(i) = (RND * 2 + 2) * ((kpn(i) = 1) - (kpn(i) = 2)) kyn(i) = ABS(kxn(i)) IF RND > .3 THEN kx(i) = RND * 200 - 100 * (kpn(i) = 1): ky(i) = 8 ELSE kx(i) = -300 * (kpn(i) = 1): ky(i) = RND * 52 + 8 END IF END SELECT RETURN STAGE: SELECT CASE stf CASE 0 jc = 1 - jc jx = jx - (stc = 0 AND jx < 320 - (jl + 1) * 8) jy = jy + (stc = 0 AND jc = 0 AND jy < 157) * ((jx < 64) - (jx > 176)) * (st = 4) FOR i = 0 TO jl * 3 + 5: PUT (jx + (i MOD 9) * 8, jy), k%(0, 3 - (jx = 248) - (jy > 145)), OR: NEXT CASE 1 IF m(1) < 0 AND jx < 36 THEN jy(jx) = jy(jx) + 3 IF jx < 35 THEN jy(jx + 1) = jy(jx + 1) + 2 IF jy(jx) > 140 AND jx < 34 THEN jy(jx + 2) = jy(jx + 2) + 1 IF jy(jx) > 150 THEN jx = jx - (jx < 36) END IF FOR i = jx TO 39: a = RND IF m(1) < 50 AND (jx - (jx < 34) * 2 < i OR jx < 3) THEN jy(i) = jy(i) + (a > .5 AND jy(i) > 134) - (a < .6 AND jy(i) < 136) PUT (jx(i), jy(i)), k%(0, 3 - (i > 35) - (jy(i) > 137) * 2) NEXT END SELECT RETURN BG: fc = 1 - fc IF fc = 0 THEN fp = (fp + 1) MOD 3 PUT (0, 146), f%(0, fp) PUT (0, 8), b%(0, bp) RETURN SCORE: ssc = (320 - ABS(x - jx)) / (32 - (stf = 0) * 32) sc = sc - ssc * (stc = 0) * (1 - (m(1) < 0)) sc$ = LTRIM$(STR$(sc)) pc 22, 1, RIGHT$("0000" + sc$, 5), 15 RETURN METER: FOR i = 0 TO 1: my = 168 + i * 8: IF m(i) < 0 THEN m(i) = -1 LINE (40, my)-(40 + m(i), my + 6), 10 - i - (m(i) < 80) * (2 + i), BF LINE -(319, my), 0, BF NEXT RETURN FADEOUT: FOR k = 8 TO 1 STEP -1 FOR i = -1 TO 207 STEP 8 PSET (8, k + i), 0 FOR j = 0 TO 399 STEP 8 LINE -(j, k + i + (j MOD 16 = 0) * 8), 0 NEXT NEXT matu wp& NEXT matu wp& * 10 C.SCREEN: SCREEN , , 0: CLS : SCREEN , , 1, 0: CLS RETURN KMATI: pc 14, 13, "Press ENTER Key", 14 WHILE INKEY$ <> CHR$(13) IF INP(&H60) = 1 THEN EndPG wp&, hiscr WEND RETURN ENDING: pc 1, 1, "=" + m$ + " =", 12 pc 1, 4, "All Stage Clear!!", 14 pc 1, 6, "Your Score: " + sc$, 3 FOR i = 0 TO 17: FOR j = 0 TO 5 GET (i * 8, j * 8)-STEP(7, 7), h%(0, i, j) NEXT: NEXT: CLS PAINT (0, 0), 9: LINE (0, 40)-(320, 159), 0, BF: b = 0: c = 0: d = 0 matu wp& * 300 WHILE INKEY$ = "" AND b < 304 FOR i = 0 TO 17: FOR j = 0 TO 5 PUT (77 + i * 10, 60 + j * 8 + si(s)), h%(0, i, j), OR NEXT s = s + 12 AND &HFF NEXT a = (a + 1) MOD 5: PALETTE 3, a + 10: d = d - (d < 13) IF d = 13 THEN PUT (b, 144), c%(0, 1 - c): b = b - (c = 0) * 6: c = 1 - c PCOPY 1, 0: matu wp& * 25: LINE (0, 40)-(320, 159), 0, BF WEND IF hiscr < sc THEN hiscr = sc matu wp& * 100 SCREEN , , 1, 1: GOSUB FADEOUT: SCREEN , , 1 pc 18, 12, "THE END", 12 MakeFile: IF ERR = 53 THEN CLOSE GOSUB Fileinit END IF RESUME NEXT Fileinit: hs = 2000 t$ = TIME$: WHILE t$ = TIME$: WEND t$ = TIME$: WHILE t$ = TIME$: wp& = wp& + 1: WEND wp& = wp& \ 500 ' <-- wait OPEN "Hells.txt" FOR OUTPUT AS #1 WRITE #1, wp&, hs CLOSE RETURN SUB EndPG (w&, h) OPEN "Hells.txt" FOR OUTPUT AS #1 PRINT #1, w&, h CLOSE STOP '>>>> Press[Alt]+[f] -> [x] <<<< END SUB DEFSNG A-Z SUB matu (a&) FOR w = 0 TO a& t$ = TIME$ NEXT END SUB DEFINT A-Z SUB pc (a, b, c$, d) COLOR d LOCATE b, a: PRINT c$ END SUB SUB SpeedChange (w&) WHILE INKEY$ <> CHR$(13) i = INP(&H60) t = 1 - t w& = w& + ((i = 79) - (i = 80)) * t IF w& < 0 THEN w& = 0 SCREEN , , 3, 3 LOCATE 12, 1: PRINT "Game Speed:"; w& LINE (0, 100)-(w& / 5, 110), 15, BF LINE (319, 100)-(w& / 5 + 1, 110), 0, BF LOCATE 1, 1: PRINT "PUSH [ENTER KEY] to EXIT" IF i = 1 THEN EndPG w&, hiscr WEND WHILE INKEY$ <> "": WEND SCREEN , , 1, 0 END SUB