'=========================================================================== ' Subject: GOLD MINE (SHOOTER) Date: 06-23-00 (09:21) ' Author: John Wantland Code: MINE.BAS ' Origin: geekerman@hotmail.com Packet: GAMES.ABC '=========================================================================== ' Gold Mine ' by John Wantland ' 06/22/2000 ' ' This is a simple and very fun arcade game. ' As with most of my programs, the code is ' extremely sloppy and completely undocumented. ' I'm very sorry for this. I would like to ' thank Merlin N. Null for his SQUAWK program ' whose sound effects I stole(borrowed) for this ' game. RANDOMIZE TIMER SCREEN 7, , 1, 0: CLS DEFINT A-Y px = 155 py = 100 d = 1 num = 29 level = 5 par = 50 tim = 0 life = 3 score = 0 money = 50 DIM eh(num) DIM es(num) DIM ea(num) DIM ef(num) DIM ebx(num) DIM pax(par) DIM pay(par) DIM pxs(par) DIM pys(par) DIM pa(par) DIM co(par) DIM coinx(money) DIM coiny(money) DIM coins(money) DIM gun(1 TO 22) DIM gun2(1 TO 22) DIM egun(1 TO 22) DIM eleft(1 TO 22) DIM eright(1 TO 22) DIM coin(1 TO 18) FOR y = 1 TO 5 FOR x = 1 TO 9 READ n: PSET (x, y), n NEXT x NEXT y GET (1, 1)-(9, 5), gun CLS GET (1, 1)-(9, 5), egun FOR y = 1 TO 5 FOR x = 1 TO 9 READ n: PSET (x, y), n NEXT x NEXT y GET (1, 1)-(9, 5), gun2 CLS FOR y = 1 TO 5 FOR x = 1 TO 9 READ n: PSET (x, y), n NEXT x NEXT y GET (1, 1)-(9, 5), eright CLS FOR y = 1 TO 5 FOR x = 1 TO 9 READ n: PSET (x, y), n NEXT x NEXT y GET (1, 1)-(9, 5), eleft CLS FOR y = 1 TO 8 FOR x = 1 TO 6 READ n: PSET (x, y), n NEXT x NEXT y GET (1, 1)-(6, 8), coin CLS DO LOCATE 9, 17: PRINT "Gold Mine" LOCATE 12, 13: PRINT "Enter: Start game" LOCATE 14, 18: PRINT "H: Help" PCOPY 1, 0 a$ = INKEY$ IF LCASE$(a$) = "h" THEN GOSUB help LOOP UNTIL a$ = CHR$(13) GOSUB new: FOR i = 0 TO par pa(i) = 0 NEXT DO LOCATE 1, 1: PRINT "Lives:"; life LOCATE 1, 29: PRINT "Score:"; score LOCATE 1, 16: PRINT "Level"; level - 4 z = TIMER DEF SEG = 0: POKE &H41A, PEEK(&H41C) PUT (px, py), egun, PSET FOR i = 0 TO level - 1 IF ef(i) = 1 THEN PSET (ebx(i), eh(i) + 2), 0 IF es(i) = 1 AND ea(i) = 1 THEN PUT (0, eh(i)), egun, PSET IF es(i) = 2 AND ea(i) = 1 THEN PUT (311, eh(i)), egun, PSET IF INT(RND * 100 + 1) = 50 AND ef(i) = 0 AND ea(i) = 1 THEN ef(i) = 1: GOSUB shoot IF ef(i) = 1 THEN GOSUB efire: IF fx <= 16 AND fy >= eh(i) - 1 AND fy <= eh(i) + 6 AND es(i) = 1 AND ea(i) = 1 THEN ea(i) = 0: left = left - 1: score = score + 10: GOSUB explode IF fx >= 303 AND fy >= eh(i) - 1 AND fy <= eh(i) + 6 AND es(i) = 2 AND ea(i) = 1 THEN ea(i) = 0: left = left - 1: score = score + 10: GOSUB explode IF es(i) = 1 AND ea(i) = 1 THEN PUT (0, eh(i)), eleft, PSET IF es(i) = 2 AND ea(i) = 1 THEN PUT (311, eh(i)), eright, PSET IF ef(i) = 1 THEN PSET (ebx(i), eh(i) + 2), 4 NEXT a = INP(&H60) IF a = 72 AND py > 5 THEN py = py - 5 IF a = 80 AND py < 185 THEN py = py + 5 IF a = 75 THEN d = 1: px = 155 IF a = 77 THEN d = 2: px = 159 IF a = 57 AND fire <> 1 THEN fire = 1: fx = px: fy = py + 2: fd = d: IF PLAY(0) = 0 THEN PLAY "MBT255L64MLO4BAGFEDC 0 THEN GOSUB particle PCOPY 1, 0 GOSUB delay IF left = 0 THEN level = level + 1: GOSUB new LOOP bullet: PSET (fx, fy), 0 IF fd = 1 AND fx > 1 THEN fx = fx - 8 IF fd = 2 AND fx < 318 THEN fx = fx + 8 IF fx <= 5 OR fx >= 315 THEN fx = 0: fy = 0: fire = 0: RETURN PSET (fx, fy), 4 RETURN efire: IF es(i) = 1 THEN ebx(i) = ebx(i) + 8 ELSE ebx(i) = ebx(i) - 8 IF ebx(i) <= 157 AND ebx(i) >= 153 AND eh(i) + 2 >= py AND eh(i) + 2 <= py + 5 THEN GOSUB hit: IF ebx(i) <= 0 OR ebx(i) >= 319 THEN ef(i) = 0 RETURN hit: CLS FOR t = 0 TO level - 1 ef(t) = 0 NEXT t fire = 0 GOSUB explode2: py = 100 life = life - 1: IF life <= 0 THEN GOTO gameover RETURN explode: IF score MOD 500 = 0 THEN life = life + 1 IF PLAY(0) = 0 THEN PLAY "MBT255L64O4CDEFGABO3CDEFGABO2CDEFGAB" tim = 10 FOR pp = 0 TO par IF es(i) = 1 THEN pax(pp) = 3 ELSE pax(pp) = 317 pay(pp) = eh(i) pxs(pp) = INT(RND * 10) - 5 pys(pp) = INT(RND * 10) - 5 co(pp) = INT(RND * 15) + 1 pa(pp) = 1 NEXT pp RETURN explode2: IF score MOD 500 = 0 THEN life = life + 1 IF PLAY(0) = 0 THEN PLAY "MBT255L64O4CDEFGABO3CDEFGABO2CDEFGAB" tim = 10 FOR pp = 0 TO par pax(pp) = px + 3 pay(pp) = py + 3 pxs(pp) = INT(RND * 10) - 5 pys(pp) = INT(RND * 10) - 5 co(pp) = INT(RND * 15) + 1 pa(pp) = 1 NEXT pp RETURN particle: tim = tim - 1 IF tim = 0 THEN GOSUB clea: FOR pp = 0 TO par IF pa(pp) = 0 THEN GOTO skippar: PSET (pax(pp), pay(pp)), 0 pax(pp) = pax(pp) + pxs(pp) pay(pp) = pay(pp) + pys(pp) IF pax(pp) > 319 OR pax(pp) < 0 OR pay(pp) > 199 OR pay(pp) < 0 THEN pa(pp) = 0 IF pa(pp) = 1 THEN PSET (pax(pp), pay(pp)), co(pp) skippar: NEXT pp RETURN clea: FOR pp = 0 TO par IF pa(pp) = 1 THEN PSET (pax(pp), pay(pp)), 0 pa(pp) = 0 NEXT pp RETURN new: IF level > num THEN GOTO win left = level FOR i = 0 TO level - 1 taken: eh(i) = INT(RND * 175) + 10 es(i) = INT(RND * 2) + 1 take = 0 FOR q = 0 TO i IF es(i) = es(q) AND ((eh(i) + 6 >= eh(q) - 1 AND eh(i) + 6 <= eh(q) + 6) OR (eh(i) - 1 <= eh(q) + 6 AND eh(i) - 1 >= eh(q) - 1)) AND i <> q THEN take = 1 NEXT q IF take = 1 THEN GOTO taken: ea(i) = 1 ef(i) = 0 NEXT CLS LOCATE 10, 17: PRINT "Level"; level - 4 LOCATE 12, 8: PRINT "Press Enter to continue..." PCOPY 1, 0 1 IF INKEY$ <> CHR$(13) THEN GOTO 1 tim = 0 py = 100 fx = 0 fy = 0 fire = 0 CLS RETURN shoot: IF es(i) = 1 THEN ebx(i) = 5: IF PLAY(0) = 0 THEN PLAY "MBT255L64MLO4BAGFEDC= z + .005 OR TIMER < z RETURN win: CLS PRINT " Congratulations!!! You have saved" PRINT "the gold mine from the terrorists! Now" PRINT "you can go to claim your reward money." PRINT "Don't forget to donate some to charity." PRINT PRINT "Final score:"; score PRINT PRINT "Press Enter to claim reward..." PCOPY 1, 0 DO a$ = INKEY$ LOOP UNTIL a$ = CHR$(13) GOSUB reward CLS : SCREEN 0: WIDTH 80: END gameover: CLS PRINT " Too bad!!! Not only have you lost" PRINT "the gold mine, but you have cost the" PRINT "company several VERY expensive guns. I" PRINT "really hope that you can afford to pay" PRINT "for all of that." PRINT PRINT "Final score:"; score PRINT PRINT "Press Enter to end..." PCOPY 1, 0 DO a$ = INKEY$ LOOP UNTIL a$ = CHR$(13) CLS : SCREEN 0: WIDTH 80: END reward: FOR i = 0 TO money - 1 coinx(i) = INT(RND * 312) coiny(i) = INT(RND * 194) coins(i) = INT(RND * 5) + 1 NEXT i DO z = TIMER CLS LOCATE 23, 20: PRINT "Press Enter to end..." FOR i = 0 TO money - 1 coiny(i) = coiny(i) + coins(i) IF coiny(i) >= 193 THEN coiny(i) = 0: coinx(i) = INT(RND * 312): coins(i) = INT(RND * 5) + 1 PUT (coinx(i), coiny(i)), coin, OR NEXT i PCOPY 1, 0 GOSUB delay: a$ = INKEY$ LOOP UNTIL a$ = CHR$(13) RETURN help: CLS PRINT " You work for a company that has" PRINT "found a huge gold mine. Unfortunately," PRINT "a group of terrorists has taken the" PRINT "mine and hopes to use it to fund their" PRINT "activities. They have lined the mine" PRINT "with automatic gun turrets that will" PRINT "shoot anything that moves. You have" PRINT "a gun of your own, which you must lower" PRINT "into the mine and destroy all the" PRINT "turrets. The guns are very expensive," PRINT "and you only get three. You can earn" PRINT "extra guns for every 500 point that you" PRINT "get. There are 25 levels in all. If" PRINT "you succeed, you will get 10% of the" PRINT "gold, but if you fail, you will have" PRINT "to pay to replace the company's gold." PRINT PRINT "UP: Move gun up" PRINT "DOWN: Move gun down" PRINT "LEFT: Aim left" PRINT "RIGHT: Aim right" PRINT "SPACE: Fire" PRINT "ESC: Quit" LOCATE 23, 27: PRINT "Press Enter..." PCOPY 1, 0 DO a$ = INKEY$ LOOP UNTIL a$ = CHR$(13) a$ = "" CLS RETURN DATA 0,0,0,0,0,7,7,7,0 DATA 0,0,0,7,7,7,7,7,7 DATA 7,7,7,7,7,7,7,7,7 DATA 0,0,0,7,7,7,7,7,7 DATA 0,0,0,0,0,7,7,7,0 DATA 0,7,7,7,0,0,0,0,0 DATA 7,7,7,7,7,7,0,0,0 DATA 7,7,7,7,7,7,7,7,7 DATA 7,7,7,7,7,7,0,0,0 DATA 0,7,7,7,0,0,0,0,0 DATA 0,0,0,0,0,7,7,7,7 DATA 0,0,0,7,7,7,7,7,7 DATA 7,7,7,7,7,7,7,7,7 DATA 0,0,0,7,7,7,7,7,7 DATA 0,0,0,0,0,7,7,7,7 DATA 7,7,7,7,0,0,0,0,0 DATA 7,7,7,7,7,7,0,0,0 DATA 7,7,7,7,7,7,7,7,7 DATA 7,7,7,7,7,7,0,0,0 DATA 7,7,7,7,0,0,0,0,0 DATA 0,0,14,14,0,0 DATA 0,14,14,14,14,0 DATA 14,14,14,14,14,14 DATA 14,14,14,14,14,14 DATA 14,14,14,14,14,14 DATA 14,14,14,14,14,14 DATA 0,14,14,14,14,0 DATA 0,0,14,14,0,0