home *** CD-ROM | disk | FTP | other *** search
/ MikeOS 4.5 / mikeos.iso / mikeos.flp / cf.bas < prev    next >
BASIC Source File  |  2014-12-21  |  16KB  |  793 lines

  1. rem Cosmic Flight (CF.BAS)
  2. rem Created by Joshua Beck
  3. rem Version 2.0.2
  4. rem Released under the GNU General Public Licence v3
  5. rem mail: mikeosdeveloper@gmail.com
  6. goto start
  7.     
  8. This program is free software: you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation, either version 3 of the License, or
  11. (at your option) any later version.
  12.  
  13. This program is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with this program.  If not, see <http://www.gnu.org/licenses/>.
  20.  
  21. start:
  22.   cls
  23.  
  24.   rem ***Cool Intro Text***
  25.   gosub intro  
  26.  
  27.   cls
  28.  
  29.   rem ***draw the borders***
  30.   gosub drawscreen
  31.  
  32.   rem ***print the character***
  33.   ink 8
  34.   move 40 24
  35.   print chr 202 ;
  36.   ink 7
  37.  
  38.   e = 0
  39.   f = 0
  40.  
  41.   rem ***get the start time***
  42.   t = timer
  43.  
  44.   rem ***set the character position to the same as we printed***
  45.   p = 40
  46.  
  47.   rem ***start off with a grey ship***
  48.   c = 8
  49.   cursor off
  50.  
  51. play:
  52.   do
  53.     rem ***main gameplay loop***
  54.     do
  55.       rem ***we scroll the screen every 0.5 seconds or 10th tick***
  56.       n = timer
  57.       n = n - 6 
  58.  
  59.       rem ***while waiting we process movement***
  60.       rem ***this makes the character responsive***
  61.       getkey k
  62.  
  63.       rem ***if the escape key is presses then end***
  64.       if k = 27 then goto endgame
  65.  
  66.       rem ***if a capital letter is pressed, make it lowercase***
  67.       if k > 64 and k < 91 then k = k + 32
  68.  
  69.       rem ***if a movement key was pressed move the character***
  70.       if k = 'a' then gosub goleft
  71.       if k = 'd' then gosub goright
  72.  
  73.       if k = ' ' then gosub fireweapon
  74.  
  75.       rem ***loop until we need to scroll***
  76.       n = n + 1
  77.     loop until n > t
  78.  
  79.     rem ***get the next starting time***
  80.     t = timer
  81.  
  82.     rem ***scroll the game area down a line***
  83.     gosub scrollscreen
  84.  
  85.     rem ***display the new score and modifiers***
  86.     gosub printscore
  87.  
  88.     rem ***place a new item on the blank line created***
  89.     y = 0
  90.     gosub placebonus
  91.  
  92.     rem ***add more depending on the score***
  93.     rem ***note that these will be mostly bad***
  94.     if s > 1999 then gosub placebonus
  95.     if s > 4999 then gosub placebonus
  96.     if s > 9999 then gosub placebonus
  97.  
  98.     rem ***change colour of character for score***
  99.     gosub colourchange
  100.  
  101.     rem ***reprint character***
  102.     ink c
  103.     move p 24
  104.     print chr 202 ;
  105.     ink 7
  106.  
  107.     rem ***reduce benefits (if any)***
  108.     if e > 0 then e = e - 1
  109.     if f > 0 then f = f - 1
  110.  
  111.     rem ***loop until exited or lost***
  112.   loop endless
  113.   cursor on
  114. end
  115.  
  116. goleft:
  117.   rem ***make sure character is on the screen***
  118.   if p < 31 then return
  119.  
  120.   rem ***erase current position*** 
  121.   move p 24
  122.   print " " ;
  123.  
  124.   rem ***move to new position***
  125.   p = p - 1
  126.   move p 24
  127.   curschar b
  128.   gosub checkbonus
  129.  
  130.   rem ***print character in correct colour***
  131.   ink c
  132.   print chr 202 ;
  133.   ink 7
  134. return
  135.  
  136. goright:
  137.   rem ***make sure that character is on the screen***
  138.   if p > 49 then return
  139.  
  140.   rem ***erase current position***
  141.   move p 24
  142.   print " " ;
  143.  
  144.   rem ***move to new position***
  145.   p = p + 1
  146.   move p 24
  147.  
  148.   rem ***check for items there, apply effects***
  149.   curschar b
  150.   gosub checkbonus
  151.  
  152.   rem ***print character in correct colour***
  153.   ink c
  154.   print chr 202 ;
  155.   ink 7
  156. return
  157.  
  158. colourchange:
  159.   rem ***set the colour depending on how many point have been scored***
  160.   if s < 100 then c = 8
  161.   if s > 99 then c = 7
  162.   if s > 199 then c = 15
  163.   if s > 499 then c = 14
  164.   if s > 999 then c = 12
  165.   if s > 1999 then c = 9
  166.   if s > 4999 then c = 11
  167.   if s > 9999 then c = 13
  168. return
  169.  
  170. fireweapon:
  171.   q = 0
  172.   if s > 99 then q = q + 1
  173.   if s > 199 then q = q + 1
  174.   if s > 499 then q = q + 1
  175.   if s > 999 then q = q + 1
  176.   if s > 1999 then q = q + 1
  177.   if s > 4999 then q = q + 1
  178.   if s > 9999 then q = q + 1
  179.   if q = 0 then return
  180.   if e > 0 then q = q + 1
  181.   if e > 0 then e = e - 1
  182.   ink c
  183.   if q = 1 then for r = 0 to 3
  184.   if q = 2 then for r = 0 to 7
  185.   if q = 3 then for r = 0 to 11
  186.   if q > 3 then for r = 0 to 23
  187.     y = 23 - r
  188.     move p y
  189.     print "|" ;
  190.     if q > 4 then gosub extrawp
  191.     y = y % 4
  192.     if y = 3 then pause 1
  193.   next r
  194.   pause 1
  195.   t = timer
  196.   ink 7
  197.   if q = 1 then for r = 0 to 3
  198.   if q = 2 then for r = 0 to 7
  199.   if q = 3 then for r = 0 to 11
  200.   if q > 3 then for r = 0 to 23
  201.     y = 23 - r
  202.     move p y
  203.     print " " ;
  204.     if q > 4 then gosub extrawp
  205.   next r
  206.   move p 24
  207.   gosub colourchange
  208.   ink c
  209.   print chr 202 ;
  210.   ink 7
  211.   if s > 99 then s = s - 100
  212.   if s > 1999 then s = s - 200
  213.   if s > 4999 then s = s - 500
  214.   if s > 9999 then s = s - 1000
  215.   gosub scrollscreen
  216. return
  217.  
  218. extrawp:
  219.   move p y
  220.   curschar b
  221.   v = p - 1
  222.   move v y
  223.   if v > 29 then print chr b ;
  224.   v = p + 1
  225.   move v y
  226.   if v < 51 then print chr b ;
  227.   if q = 5 then return
  228.   v = p - 2
  229.   move v y
  230.   if v > 29 then print chr b ;
  231.   v = p + 2
  232.   move v y
  233.   if v < 51 then print chr b ;
  234.   if q = 6 then return
  235.   v = p - 3
  236.   move v y
  237.   if v > 29 then print chr b ;
  238.   v = p + 3
  239.   move v y
  240.   if v < 51 then print chr b ; 
  241.   v = p - 4
  242.   move v y
  243.   if v > 29 then print chr b ;
  244.   v = p + 4
  245.   move v y
  246.   if v > 51 then print chr b ;
  247. return
  248.  
  249. checkbonus:
  250.   rem ***make sure an item exists***
  251.   if b = 0 then return
  252.   if b = 32 then return
  253.  
  254.   rem ***check the effect of the item***
  255.   i = 0
  256.   j = 0
  257.  
  258.   rem ***positive items***
  259.   if b = 224 then j = 10
  260.   if b = 225 then j = 20
  261.   if b = 227 then j = 50
  262.   if b = 228 then j = 100
  263.   if b = 172 then j = 250
  264.   if b = 171 then j = 500
  265.   if b = 252 then j = 1000
  266.   if b = 253 then j = 2000
  267.  
  268.   rem ***negative items***
  269.   if b = 35 then i = 50
  270.   if b = 168 then i = 100
  271.   if b = 254 then i = 200
  272.   if b = 64 then i = 500
  273.   if b = 33 then i = 1000
  274.   if b = 19 then i = 2000
  275.  
  276.   rem ***change amount for current modifiers***
  277.   if m = 1 then j = j + 10
  278.   if m = 2 then j = j + 20
  279.   if m = 3 then j = j + 50
  280.   if m = 4 then j = j * 2
  281.   if m = 4 then i = i * 3
  282.   if m = 5 then j = j * 2
  283.   if m = 5 then i = i * 3
  284.  
  285.   rem ***if a modifer is active reduce is by one use***
  286.   if m > 0 then l = l - 1
  287.  
  288.   rem ***if it gets to zero remove the modifier***
  289.   if l = 0 then m = 0
  290.  
  291.   rem ***if there is a negative item remove the modifer***
  292.   if i > 0 then m = 0
  293.  
  294.   rem ***check for new powerups and create modifiers***
  295.   if b = 43 then m = 2
  296.   if b = 43 then l = 10
  297.   if b = 36 then m = 3
  298.   if b = 36 then l = 10
  299.   if b = 42 then m = 5
  300.   if b = 42 then l = 20
  301.  
  302.   rem ***weapons bonuses***
  303.   if b = 94 then e = e + 5
  304.  
  305.   rem ***shield bonuses***
  306.   if b = 62 then f = f + 50
  307.  
  308.   rem ***add positive total to the score***
  309.   if i = 0 then s = s + j
  310.  
  311.   rem ***check score is more than negative total***
  312.   rem ***if not the player looses***
  313.   if i > s then goto gameover
  314.  
  315.   rem ***remove negative total from score***
  316.   if i > 0 then s = s - i
  317. return
  318.  
  319. gameoverani:
  320.   219 178 177 176 32
  321.  
  322. gameover:
  323.   rem ***display death animation***
  324.   ink 4
  325.   v = p - 1
  326.   p = p + 1
  327.   for t = 1 to 5
  328.     read gameoverani t j
  329.     for w = v to p
  330.       for x = 23 to 24
  331.         move w x
  332.         print chr j ;
  333.       next x
  334.     next w
  335.     pause 1
  336.   next t
  337.  
  338.   rem ***print game over message***
  339.   ink 7
  340.   move 0 4
  341.   print "Game Over"
  342.  
  343.   rem ***calculator how far negative the score is***
  344.   i = i - s
  345.  
  346.   rem ***display it in red***
  347.   move 0 0
  348.   ink 4
  349.   print "Energy : -" ;
  350.   number i $1
  351.   print $1
  352.   waitkey k
  353.  
  354.   rem ***return everything to normal and exit***
  355.   ink 7
  356.   cls
  357.   cursor on
  358. end
  359.  
  360. endgame:
  361.   move 0 4
  362.   print "Game Over"
  363.   waitkey k
  364.   ink 7
  365.   cls
  366.   cursor on
  367. end 
  368.  
  369. scrollscreen:
  370.   rem ***scroll down one line***
  371.   for r = 0 to 23
  372.  
  373.     rem ***uses lines in opposite direction (23-0)
  374.     y = 23 - r
  375.  
  376.     for w = 30 to 50
  377.       rem ***collect character***
  378.       move w y
  379.       curschar b
  380.       curscol v
  381.       
  382.       rem ***if it's the player character then don't go over it***
  383.       rem ***also collect the previous character as bonus***
  384.       if w = p and y = 23 then gosub checkbonus
  385.       if w = p and y = 23 then goto noscroll
  386.  
  387.       rem ***move down one line and print character***
  388.       y = y + 1
  389.       move w y
  390.       ink v
  391.       print chr b ;
  392.       y = y - 1
  393.       noscroll:
  394.     next w
  395.  
  396.     rem ***blank line after moving***
  397.     move 30 y
  398.     print "                     " ;
  399.   next r
  400.   ink 7
  401. return
  402.  
  403. drawscreen:
  404.   for y = 0 to 24
  405.     rem ***print borders***
  406.     move 29 y
  407.     print chr 221 ;
  408.     move 51 y
  409.     print chr 222 ;
  410.  
  411.     rem ***randomly place items***
  412.     rand x 1 5
  413.     if y < 10 and x = 1 then gosub placebonus
  414.   next y
  415.  
  416.   rem ***print the basic information***
  417.   move 0 0
  418.   print "Energy : 0"
  419.   print "Highest: 0"
  420.   print "Modifier: None"
  421.   print "No Weapon"
  422. return
  423.  
  424. placebonus:
  425.   rem ***move to a random position on y line***
  426.   rand w 30 50
  427.   move w y
  428.  
  429.   rem ***vary the amount of good and bad items depending on the score***
  430.   if s = 0 then goto goodbonus
  431.   d = s / 10
  432.   rem ***max out at 80% bad (800 points)***
  433.   if d > 80 then d = 80
  434.  
  435.   rem ***increase for futher scores***
  436.   if s > 5000 then d = 90
  437.   if s > 10000 then d = 95
  438.  
  439.   rand w 1 100
  440.   if w < d then goto badbonus
  441.  
  442. goodbonus:
  443.   rem ***pick a item***
  444.   rem ***the rarer ones are more valueable***
  445.   rem ***if the player has more point, get rarer items***
  446.   rand w 1 88
  447.   if s > 999 then rand w 26 92
  448.   if s > 1999 then rand w 51 100
  449.   if s > 4999 then rand w 76 100
  450.   if s > 4999 and w > 95 then rand w 76 100
  451.   if s > 9999 then rand w 91 100
  452.   if s > 9999 and w > 95 then rand w 91 100
  453.   if s > 9999 and w > 95 then rand w 91 100
  454.  
  455.   rem ***good bonuses (increasing value)***
  456.   if w < 51 then v = 224
  457.   if w > 50 and w < 76 then v = 225
  458.   if w > 75 and w < 86 then v = 227
  459.   if w > 85 and w < 91 then v = 228
  460.   if w > 90 and w < 93 then v = 172
  461.   if w = 93 then v = 171
  462.   if w = 94 then v = 252
  463.   if w = 95 then v = 253
  464.  
  465.   rem ***the last five are powerups***
  466.   if w = 96 then v = 43
  467.   if w = 97 then v = 62
  468.   if w = 98 then v = 36
  469.   if w = 99 then v = 94
  470.   if w = 100 then v = 42
  471.  
  472.   rem ***print good items/powerups in green***
  473.   ink 2
  474.   print chr v ;
  475.   ink 7
  476. return
  477.  
  478. badbonus:
  479.   rem ***pick an item***
  480.   rem ***the rarer ones are more dangerous***
  481.   rem ***if a player has more point, make more dangerous items***
  482.   rand w 1 50
  483.   if s > 999 then rand w 46 75
  484.   if s > 1999 then rand w 51 100
  485.   if s > 4999 then rand w 76 100
  486.   if s > 9999 then rand w 91 100
  487.  
  488.   rem ***bad items (increasing energy loss)***
  489.   if w < 51 then v = 35
  490.   if w > 50 and w < 76 then v = 168
  491.   if w > 75 and w < 86 then v = 254
  492.   if w > 85 and w < 96 then v = 15
  493.   if w > 95 and w < 100 then v = 33
  494.   if w = 100 then v = 19
  495.  
  496.   rem ***print bad items in red***
  497.   ink 4
  498.   print chr v ;
  499.   ink 7
  500. return
  501.  
  502. printscore:
  503.   rem ***print current score***
  504.   if s > g then ink 2
  505.   if s = g then ink 7
  506.   if s < g then ink 4
  507.   g = s
  508.   move 9 0
  509.   print "     " ;
  510.   move 9 0
  511.   print s
  512.   ink 7
  513.   if s > h then ink 2
  514.   if s > h then h = s
  515.   move 9 1
  516.   print "     " ;
  517.   move 9 1
  518.   print h
  519.   ink 7
  520.  
  521.   rem ***print current modifier + uses remaining***
  522.   move 10 2
  523.   print "                  " ;
  524.   move 10 2
  525.   if m = 0 then print "None" ;
  526.   if m = 2 then print "+20" ;
  527.   if m = 3 then print "+50" ;
  528.   if m = 5 then print "Double" ;
  529.   if m > 0 then print " (" ;
  530.   if m > 0 then print l ;
  531.   if m > 0 then print " uses)"
  532.  
  533.   rem ***find out weapon***
  534.   q = 0
  535.   if s > 99 then q = q + 1
  536.   if s > 199 then q = q + 1
  537.   if s > 499 then q = q + 1
  538.   if s > 999 then q = q + 1
  539.   if s > 1999 then q = q + 1
  540.   if s > 4999 then q = q + 1
  541.   if s > 9999 then q = q + 1
  542.   if e > 0 then q = q + 1
  543.   
  544.   rem ***now print it***
  545.   gosub colourchange
  546.   ink c
  547.   move 0 3
  548.   if q = 0 then print "No Weapon      "
  549.   if q = 1 then print "Mini Laser     "
  550.   if q = 2 then print "Standard Laser "
  551.   if q = 3 then print "Power Laser    "
  552.   if q = 4 then print "Fire Laser     "
  553.   if q = 5 then print "Mega Beam      "
  554.   if q = 6 then print "Giga Beam      "
  555.   if q > 6 then ink 71
  556.   if q > 6 then print "Death Ray      "
  557.   if q > 6 then ink 7
  558.   ink 7
  559. return
  560.  
  561. intro:
  562.   cls
  563.   x = 25
  564.   y = 1
  565.   cursor off
  566.   ink 0
  567.   move x y
  568.   print "#### #### ### ##### ##### ####"
  569.   y = y + 1
  570.   move x y
  571.   print "#    #  # #   # # #   #   #   "
  572.   y = y + 1
  573.   move x y
  574.   print "#    #  # ### # # #   #   #   "
  575.   y = y + 1
  576.   move x y
  577.   print "#    #  #   # # # #   #   #   "
  578.   y = y + 1
  579.   move x y
  580.   print "#### #### ### # # # ##### ####"
  581.   y = y + 2
  582.   move x y
  583.   print "#### #    ##### #### #  # #####"
  584.   y = y + 1
  585.   move x y
  586.   print "#    #      #   #    #  #   #  "
  587.   y = y + 1
  588.   move x y
  589.   print "#### #      #   # ## ####   #  "
  590.   y = y + 1
  591.   move x y
  592.   print "#    #      #   #  # #  #   #  "
  593.   y = y + 1
  594.   move x y
  595.   print "#    #### ##### #### #  #   #  "
  596.  
  597.   y = y - 10
  598.   v = x + 30
  599.   w = y + 10
  600.  
  601.   for t = x to v
  602.     for u = y to w
  603.       move t u
  604.       curschar z
  605.       if z = '#' then print chr 219 ;
  606.     next u
  607.   next t
  608.  
  609.   ink 15
  610.   v = x - 5
  611.   w = x + 35
  612.   for u = 0 to 24
  613.     for t = 0 to v
  614.       move t u
  615.       rand s 1 10
  616.       if s = 10 then print chr 42 ;
  617.     next t
  618.     for t = w to 79
  619.       move t u
  620.       rand s 1 10
  621.       if s = 10 then print chr 42 ;
  622.     next t
  623.   next u
  624.  
  625.   ink 12
  626.   for s = 1 to 13
  627.     if s = 7 then s = 8
  628.     if s = 8 then y = y + 6
  629.     w = y + 5
  630.     read letterstart s v
  631.     v = v + x
  632.     s = s + 1
  633.     read letterstart s r
  634.     s = s - 1
  635.     r = r - 1 + x
  636.     for t = v to r
  637.       for u = y to w
  638.         move t u
  639.         curschar z
  640.         print chr z ;
  641.       next u
  642.     next t
  643.     if s < 7 then pause 2
  644.     sound 5000 1
  645.   next s
  646.  
  647.   y = y - 6
  648.   w = x - 3
  649.   u = x + 33
  650.   ink 8
  651.   for v = 0 to 24
  652.     move w v
  653.     print chr 219 ; 
  654.     move u v
  655.     print chr 219 ;
  656.     t = timer
  657.     do 
  658.       z = timer
  659.     loop until z > t
  660.   next v
  661.  
  662.   ink 28
  663.   w = w + 1
  664.   u = u - 1
  665.   for v = 0 to 24
  666.     for t = w to u
  667.       move t v
  668.       curschar s
  669.       print chr s ;
  670.     next t
  671.   next v
  672.  
  673.   pause 1
  674.  
  675.   ink 31
  676.   w = y + 12
  677.   v = x - 1
  678.   move v w
  679.   print "Cosmic Flight is a fast paced"
  680.   gosub newline
  681.   print "adventure game, in which you must"
  682.   gosub newline
  683.   print "guide your small ship through a"
  684.   gosub newline
  685.   print "dangerous galaxy, collecting as"
  686.   gosub newline
  687.   print "much energy as possible."
  688.   gosub newline
  689.   gosub newline
  690.   print "Use 'A' and 'D' to move and space"
  691.   gosub newline
  692.   print "to fire your laser weapon."
  693.   gosub newline
  694.   print "Collect " ;
  695.   ink 18
  696.   print "green" ;
  697.   ink 31 
  698.   print " items and avoid " ;
  699.   ink 20
  700.   print "red" ; 
  701.   ink 31
  702.   gosub newline
  703.   print " ones. As you get more powerful,"
  704.   gosub newline
  705.   print "the game will become much harder."
  706.  
  707.   v = x - 21
  708.   w = y + 12
  709.   ink 2
  710.   move v w
  711.   print "Good Items:"
  712.   gosub newline
  713.   print chr 224 ;
  714.   print " =   10 Energy"
  715.   gosub newline
  716.   print chr 225 ;
  717.   print " =   20 Energy"
  718.   gosub newline
  719.   print chr 227 ;
  720.   print " =   50 Energy"
  721.   gosub newline
  722.   print chr 228 ;
  723.   print " =  100 Energy"
  724.   gosub newline
  725.   print chr 172 ;
  726.   print " =  250 Energy"
  727.   gosub newline
  728.   print chr 171 ;
  729.   print " =  500 Energy"
  730.   gosub newline
  731.   print chr 252 ;
  732.   print " = 1000 Energy"
  733.   gosub newline
  734.   print chr 253 ;
  735.   print " = 2000 Energy"
  736.  
  737.   v = x + 36
  738.   w = y + 12
  739.   move v w
  740.   ink 4
  741.   print "Bad Items:"
  742.   gosub newline
  743.   print chr 35 ;
  744.   print " =   -50 Energy"
  745.   gosub newline
  746.   print chr 168 ;
  747.   print " =  -100 Energy"
  748.   gosub newline
  749.   print chr 254 ;
  750.   print " =  -200 Energy"
  751.   gosub newline
  752.   print chr 15 ;
  753.   print " =  -500 Energy"
  754.   gosub newline
  755.   print chr 33 ;
  756.   print " = -1000 Energy"
  757.   gosub newline
  758.   print chr 19 ;
  759.   print " = -2000 Energy"  
  760.  
  761.   v = x - 1
  762.   w = y + 23
  763.   move v w
  764.   ink 31
  765.   print "Press any key to start... " ;
  766.   v = v + 25
  767.   move v w
  768.   cursor on
  769.   waitkey k
  770.  
  771.   cls
  772.   ink 7
  773.   r = 0
  774.   s = 0
  775.   t = 0 
  776.   u = 0
  777.   v = 0
  778.   w = 0
  779.   x = 0
  780.   y = 0
  781.   z = 0
  782. return
  783.  
  784. letterstart:
  785.   0 5 10 14 20 26 31
  786.   0 5 10 16 21 26 32
  787.  
  788. newline:
  789.   w = w + 1
  790.   move v w
  791.   pause 2
  792. return
  793.