home *** CD-ROM | disk | FTP | other *** search
/ 100 Plus Great Games 2 / 100PLUSV2.BIN / games / SpaceCanyon.dxr / 00009.ls < prev    next >
Encoding:
Text File  |  2002-01-25  |  34.7 KB  |  989 lines

  1. global bgOffset
  2.  
  3. on initializeBulletStreaks
  4.   global bStreakData
  5.   bStreakData = []
  6.   repeat with wStreak = 1 to 8
  7.     add(bStreakData, [0, 0])
  8.     wSprite = 520 + wStreak
  9.     sprite(wSprite).visible = 1
  10.     set the width of sprite wSprite to 1
  11.     set the height of sprite wSprite to 200
  12.     set the loc of sprite wSprite to point(25, 200)
  13.     set the blend of sprite wSprite to 100
  14.     set the ink of sprite wSprite to 36
  15.     sprite(wSprite).locZ = 200
  16.   end repeat
  17. end
  18.  
  19. on runBulletStreaks
  20.   global bStreakData
  21.   repeat with wStreak = 1 to count(bStreakData)
  22.     if bStreakData[wStreak][2] > 0 then
  23.       wSprite = 520 + wStreak
  24.       bStreakData[wStreak][2] = bStreakData[wStreak][2] - 1
  25.       if bStreakData[wStreak][2] = 0 then
  26.         sprite(wSprite).visible = 0
  27.         next repeat
  28.       end if
  29.       sprite(wSprite).visible = 1
  30.       set the height of sprite wSprite to bStreakData[wStreak][1]
  31.       bStreakData[wStreak][1] = bStreakData[wStreak][1] * 0.59999999999999998
  32.     end if
  33.   end repeat
  34. end
  35.  
  36. on addStreak impactLoc, streakLength, streakAim
  37.   global bStreakData
  38.   validSlot = 0
  39.   repeat with wScan = 1 to count(bStreakData)
  40.     if (validSlot = 0) and (bStreakData[wScan][2] = 0) then
  41.       validSlot = wScan
  42.     end if
  43.   end repeat
  44.   if validSlot <> 0 then
  45.     wSprite = 520 + validSlot
  46.     set the loc of sprite wSprite to impactLoc
  47.     set the height of sprite wSprite to streakLength
  48.     sprite(wSprite).rotation = streakAim
  49.     sprite(wSprite).visible = 1
  50.     bStreakData[validSlot] = [streakLength, 10]
  51.   end if
  52. end
  53.  
  54. on initializeTerrain
  55.   global terrainSO, tileSize, prevLocation, playerViewPoint, levelWidth, levelheight
  56.   terrainSO = 30
  57.   levelWidth = 15
  58.   levelheight = 10
  59.   tileSize = point(40, 40)
  60.   bgOffset = point(-10, 0)
  61.   wSprite = terrainSO - 1
  62.   repeat with wY = 1 to levelheight
  63.     repeat with wX = 1 to levelWidth
  64.       wSprite = wSprite + 1
  65.       puppetSprite(wSprite, 1)
  66.       set the loc of sprite wSprite to (point(wX, wY) * tileSize) - (tileSize / 2) + bgOffset
  67.       set the member of sprite wSprite to 244
  68.       set the ink of sprite wSprite to 36
  69.       sprite(wSprite).visible = 1
  70.       set the ink of sprite wSprite to 36
  71.     end repeat
  72.   end repeat
  73.   prevLocation = VOID
  74.   playerViewPoint = point(0, 4000)
  75.   sprite(1).locZ = 1
  76.   set the ink of sprite 1 to 36
  77.   puppetSprite(201, 1)
  78.   set the member of sprite 201 to "Satellite 1"
  79.   set the ink of sprite 201 to 36
  80.   sprite(201).rotation = 90
  81.   set the loc of sprite 201 to point(290, -100)
  82. end
  83.  
  84. on initializeMap
  85.   global roadMapData, playerViewPoint, levelWidth, levelheight, totalDistance, lSide, rSide, lDelay, rDelay
  86.   roadMapData = []
  87.   repeat with wY = 1 to 100
  88.     oneLiner = []
  89.     if wY >= 27 then
  90.       repeat with wX = 1 to levelWidth
  91.         add(oneLiner, 1)
  92.       end repeat
  93.     else
  94.       repeat with wX = 1 to levelWidth
  95.         case wX of
  96.           1:
  97.             add(oneLiner, 2)
  98.           levelWidth:
  99.             add(oneLiner, 3)
  100.           otherwise:
  101.             add(oneLiner, 12)
  102.         end case
  103.       end repeat
  104.     end if
  105.     add(roadMapData, oneLiner)
  106.   end repeat
  107.   lSide = 0
  108.   rSide = 0
  109.   totalDistance = 0
  110. end
  111.  
  112. on appendmap appendType
  113.   global roadMapData, playerData, levelWidth, tileSize, roadBarLength, lSide, rSide, playerlevel, totalDistance, enemyData, particleData, blasterData, gatewayData
  114.   oneLiner = []
  115.   repeat with wX = 1 to levelWidth
  116.     if wX <= (1 + lSide) then
  117.       if wX = (1 + lSide) then
  118.         add(oneLiner, 2)
  119.       else
  120.         add(oneLiner, 1)
  121.       end if
  122.       next repeat
  123.     end if
  124.     if wX >= (levelWidth - rSide) then
  125.       if wX = (levelWidth - rSide) then
  126.         add(oneLiner, 3)
  127.       else
  128.         add(oneLiner, 1)
  129.       end if
  130.       next repeat
  131.     end if
  132.     add(oneLiner, 12)
  133.   end repeat
  134.   if appendType = #Finish then
  135.     if lSide > 2 then
  136.       lSide = lSide - 1
  137.       oneLiner[lSide + 2] = 10
  138.       oneLiner[lSide + 1] = 8
  139.     else
  140.       if lSide < 2 then
  141.         lSide = lSide + 1
  142.         oneLiner[1 + lSide] = 6
  143.         oneLiner[lSide] = 4
  144.       end if
  145.     end if
  146.     if rSide > 2 then
  147.       rSide = rSide - 1
  148.       oneLiner[levelWidth - rSide - 1] = 11
  149.       oneLiner[levelWidth - rSide] = 9
  150.     else
  151.       if rSide < 2 then
  152.         rSide = rSide + 1
  153.         oneLiner[levelWidth - rSide + 1] = 5
  154.         oneLiner[levelWidth - rSide] = 7
  155.       end if
  156.     end if
  157.   else
  158.     case random(4) of
  159.       1:
  160.         if lSide > 1 then
  161.           lSide = lSide - 1
  162.           oneLiner[lSide + 2] = 10
  163.           oneLiner[lSide + 1] = 8
  164.         end if
  165.       2:
  166.         if lSide < 5 then
  167.           lSide = lSide + 1
  168.           oneLiner[1 + lSide] = 6
  169.           oneLiner[lSide] = 4
  170.         end if
  171.       otherwise:
  172.         if random([5, 4, 3][playerlevel]) = 1 then
  173.           case playerlevel of
  174.             1:
  175.               eClass = 1
  176.             2:
  177.               eClass = random(2)
  178.             3:
  179.               eClass = 2
  180.           end case
  181.           case eClass of
  182.             1:
  183.               addEnemy(3, point((lSide * 40) + 20, -10), [0, 0, 0, 3, 5, 60, 8, 40, 90])
  184.             2:
  185.               addEnemy(6, point((lSide * 40) + 20, -10), [0, 0, 0, 1, 2, 0, 30, 60, 90])
  186.             3:
  187.           end case
  188.         end if
  189.     end case
  190.     case random(4) of
  191.       1:
  192.         if rSide > 1 then
  193.           rSide = rSide - 1
  194.           oneLiner[levelWidth - rSide - 1] = 11
  195.           oneLiner[levelWidth - rSide] = 9
  196.         end if
  197.       2:
  198.         if rSide < 5 then
  199.           rSide = rSide + 1
  200.           oneLiner[levelWidth - rSide + 1] = 5
  201.           oneLiner[levelWidth - rSide] = 7
  202.         end if
  203.       otherwise:
  204.         if random([5, 4, 3][playerlevel]) = 1 then
  205.           case playerlevel of
  206.             1:
  207.               eClass = 1
  208.             2:
  209.               eClass = 1
  210.             3:
  211.               eClass = random(2)
  212.           end case
  213.           case eClass of
  214.             1:
  215.               addEnemy(3, point(((levelWidth - rSide) * 40) - 20, -10), [0, 0, 0, 3, 5, 60, 8, 50, 90])
  216.             2:
  217.               addEnemy(6, point(((levelWidth - rSide) * 40) - 20, -10), [0, 0, 0, 1, 2, 0, 30, 90, 270])
  218.             3:
  219.           end case
  220.         end if
  221.     end case
  222.     if random([12, 10, 8][playerlevel]) = 1 then
  223.       case playerlevel of
  224.         1:
  225.           eClass = random(2)
  226.         2:
  227.           eClass = random(3)
  228.         3:
  229.           eClass = random(3)
  230.       end case
  231.       rMid = random((levelWidth - rSide - lSide - 2) * 40) + (lSide * 40) + 40
  232.       case eClass of
  233.         1:
  234.           addEnemy(4, point(rMid, -20), [0, 0, 0, 3, 5, 60, 12, 50, 6])
  235.         2:
  236.           addEnemy(5, point(rMid, -20), [0, 0, 0, 3, 5, 60, 12, 50, 6])
  237.         3:
  238.           addEnemy(7, point(rMid, -10), [35, 0, 0, 1, 25, 25, 6, 90, 12, 0])
  239.       end case
  240.     end if
  241.   end if
  242.   randomX = random(6) + 2
  243.   addAt(roadMapData, 1, oneLiner)
  244.   totalDistance = totalDistance + 1
  245.   shiftTiles = 0
  246.   repeat while count(roadMapData) > 100
  247.     deleteAt(roadMapData, count(roadMapData))
  248.     shiftTiles = shiftTiles + 1
  249.   end repeat
  250.   pLoc = playerData[2]
  251.   pLoc = pLoc + point(0, shiftTiles * tileSize[2])
  252.   repeat with wEnemy = 1 to count(enemyData)
  253.     enemyData[wEnemy][3] = enemyData[wEnemy][3] + point(0, shiftTiles * tileSize[2])
  254.   end repeat
  255.   repeat with wPart = 1 to count(particleData)
  256.     if particleData[wPart][1] = 1 then
  257.       particleData[wPart][4] = particleData[wPart][4] + point(0, shiftTiles * tileSize[2])
  258.     end if
  259.   end repeat
  260.   repeat with wEffect = 1 to count(particleData)
  261.     if particleData[wEffect][1] <> 0 then
  262.       particleData[wEffect][4] = particleData[wEffect][4] + point(0, shiftTiles * tileSize[2])
  263.     end if
  264.   end repeat
  265.   blasterData[2] = blasterData[2] + point(0, shiftTiles * tileSize[2])
  266.   if gatewayData[1] = 1 then
  267.     gatewayData[2] = gatewayData[2] + (shiftTiles * tileSize[2])
  268.   end if
  269.   playerData[2] = pLoc
  270. end
  271.  
  272. on initializeEnemies
  273.   global enemyData, enemySO
  274.   enemySO = 450
  275.   enemyData = []
  276.   repeat with wEnemy = 1 to 30
  277.     wSprite = enemySO + wEnemy
  278.     add(enemyData, [0, 0, point(0, 0), point(0, 0), 0, 0])
  279.     puppetSprite(wSprite, 1)
  280.     set the member of sprite wSprite to "Fixed Cannon"
  281.     set the ink of sprite wSprite to 36
  282.     set the loc of sprite wSprite to point(-50, -50)
  283.     sprite(wSprite).locZ = 400
  284.   end repeat
  285. end
  286.  
  287. on addEnemy spawnType, spawnloc, spawnParameters
  288.   global enemyData, enemySO
  289.   validSlot = 0
  290.   repeat with wSlot = 1 to count(enemyData)
  291.     if (enemyData[wSlot][1] = 0) and (validSlot = 0) then
  292.       validSlot = wSlot
  293.     end if
  294.   end repeat
  295.   if validSlot <> 0 then
  296.     enemySprite = enemySO + validSlot
  297.     enemyData[validSlot] = [1, spawnType, spawnloc, 0, 0, 0, spawnParameters]
  298.     case spawnType of
  299.       1:
  300.         set the member of sprite enemySprite to "Small Bullet 1"
  301.       2:
  302.         set the member of sprite enemySprite to "Shield Pickup"
  303.       3:
  304.         set the member of sprite enemySprite to "Fixed Cannon"
  305.       4:
  306.         set the member of sprite enemySprite to "Satellite 1"
  307.       5:
  308.         set the member of sprite enemySprite to "Space mine 1"
  309.       6:
  310.         set the member of sprite enemySprite to "Fixed Cannon"
  311.       7:
  312.         set the member of sprite enemySprite to "Enemy Fighter"
  313.     end case
  314.     set the backColor of sprite enemySprite to 255
  315.     set the foreColor of sprite enemySprite to 255
  316.     set the ink of sprite enemySprite to 36
  317.     sprite(enemySprite).rotation = 0
  318.   end if
  319. end
  320.  
  321. on addpoints pValue
  322.   global playerlevel, playerScore, totalScore
  323.   playerScore = playerScore + integer(pValue * 0.5)
  324.   member("Score Display").text = string(totalScore + playerScore)
  325. end
  326.  
  327. on moveEnemy
  328.   global enemyData, enemySO, playerData, playerViewPoint
  329.   repeat with wEnemy = 1 to count(enemyData)
  330.     enemySprite = enemySO + wEnemy
  331.     if enemyData[wEnemy][1] = 1 then
  332.       playerAim = findAngle(enemyData[wEnemy][3], playerData[2])
  333.       playerDist = findDistance(enemyData[wEnemy][3], playerData[2])
  334.       case enemyData[wEnemy][2] of
  335.         1:
  336.           enemyData[wEnemy][3] = enemyData[wEnemy][3] - enemyData[wEnemy][7][1]
  337.           enemyData[wEnemy][7][2] = enemyData[wEnemy][7][2] - 1
  338.           if enemyData[wEnemy][7][2] <= 0 then
  339.             enemyData[wEnemy][1] = 0
  340.             set the loc of sprite enemySprite to point(-50, -50)
  341.             addparticle(enemyData[wEnemy][3], 0, 2)
  342.           else
  343.             if (enemyData[wEnemy][3][1] <= 0) or (enemyData[wEnemy][3][1] >= 580) then
  344.               enemyData[wEnemy][1] = 0
  345.               set the loc of sprite enemySprite to point(-50, -50)
  346.             else
  347.               if playerDist <= 20 then
  348.                 enemyData[wEnemy][1] = 0
  349.                 set the loc of sprite enemySprite to point(-50, -50)
  350.                 addparticle(enemyData[wEnemy][3], 0, 2)
  351.                 damagePlayer(10)
  352.               else
  353.                 bname = ["Small Bullet", "Big Bullet", "Thin Bullet"][enemyData[wEnemy][7][3]]
  354.                 set the ink of sprite enemySprite to 33
  355.                 case enemyData[wEnemy][7][2] mod 2 of
  356.                   0:
  357.                     set the member of sprite enemySprite to bname & " 1"
  358.                   1:
  359.                     set the member of sprite enemySprite to bname & " 2"
  360.                 end case
  361.                 set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  362.               end if
  363.             end if
  364.           end if
  365.         2:
  366.           if playerDist <= 30 then
  367.             set the ink of sprite enemySprite to 33
  368.             case enemyData[wEnemy][7][3] of
  369.               1:
  370.                 damagePlayer(-10)
  371.                 addpoints(25)
  372.               2:
  373.                 playerData[5] = 1000
  374.                 addpoints(50)
  375.             end case
  376.             set the backColor of sprite enemySprite to 255
  377.             set the foreColor of sprite enemySprite to 255
  378.             set the loc of sprite enemySprite to point(-50, -50)
  379.             enemyData[wEnemy][1] = 0
  380.           else
  381.             locY = cos(playerAim * PI / 180) * -0.5
  382.             locX = sin(playerAim * PI / 180) * 0.5
  383.             enemyData[wEnemy][3] = enemyData[wEnemy][3] + point(locX, locY)
  384.             if enemyData[wEnemy][3][2] < 100 then
  385.               enemyData[wEnemy][1] = 0
  386.             else
  387.               if enemyData[wEnemy][3][2] > 2500 then
  388.                 enemyData[wEnemy][1] = 0
  389.               end if
  390.             end if
  391.             case enemyData[wEnemy][7][3] of
  392.               1:
  393.                 set the member of sprite enemySprite to "Shield Pickup"
  394.               2:
  395.                 set the member of sprite enemySprite to "Weapon Pickup"
  396.             end case
  397.             enemyData[wEnemy][5] = enemyData[wEnemy][5] + 1
  398.             set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  399.           end if
  400.         3:
  401.           if enemyData[wEnemy][6] > 0 then
  402.             if enemyData[wEnemy][6] > 20 then
  403.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 10
  404.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 10
  405.             else
  406.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 1
  407.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 1
  408.             end if
  409.           end if
  410.           moveSpeed = point(0, 0)
  411.           if enemyData[wEnemy][7][1] > 0 then
  412.             if enemyData[wEnemy][7][2] > 0 then
  413.               enemyData[wEnemy][7][2] = enemyData[wEnemy][7][2] - 1
  414.             else
  415.               if playerDist <= 450 then
  416.                 enemyData[wEnemy][7][2] = enemyData[wEnemy][7][5]
  417.                 enemyData[wEnemy][7][1] = enemyData[wEnemy][7][1] - 1
  418.                 locY = cos(playerAim * PI / 180) * enemyData[wEnemy][7][7]
  419.                 locX = sin(playerAim * PI / 180) * -enemyData[wEnemy][7][7]
  420.                 addEnemy(1, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, 2])
  421.                 playSound("enemy cannon", 1)
  422.               end if
  423.             end if
  424.           else
  425.             if enemyData[wEnemy][7][3] > 0 then
  426.               enemyData[wEnemy][7][3] = enemyData[wEnemy][7][3] - 1
  427.             else
  428.               enemyData[wEnemy][7][3] = enemyData[wEnemy][7][6]
  429.               enemyData[wEnemy][7][1] = enemyData[wEnemy][7][4]
  430.             end if
  431.           end if
  432.           enemyData[wEnemy][3] = enemyData[wEnemy][3] - moveSpeed
  433.           if enemyData[wEnemy][3][2] < 100 then
  434.             enemyData[wEnemy][3][2] = 2500
  435.           else
  436.             if enemyData[wEnemy][3][2] > 2500 then
  437.               enemyData[wEnemy][1] = 0
  438.             end if
  439.           end if
  440.           if enemyData[wEnemy][5] > enemyData[wEnemy][7][8] then
  441.             enemyData[wEnemy][1] = 0
  442.             if random(15) = 1 then
  443.               addEnemy(2, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, 2])
  444.             end if
  445.             set the loc of sprite enemySprite to point(-50, -50)
  446.             addparticle(enemyData[wEnemy][3], 0, 1)
  447.             addpoints(40)
  448.             playSound("enemy explosion", 2)
  449.           else
  450.             set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  451.             sprite(enemySprite).rotation = playerAim
  452.           end if
  453.         4:
  454.           if playerDist <= 30 then
  455.             enemyData[wEnemy][1] = 0
  456.             addparticle(enemyData[wEnemy][3], 0, 1)
  457.             damagePlayer(10)
  458.             set the loc of sprite enemySprite to point(-50, -50)
  459.           else
  460.             maxDamage = enemyData[wEnemy][7][1]
  461.             if enemyData[wEnemy][6] > 0 then
  462.               if enemyData[wEnemy][6] > 6 then
  463.                 enemyData[wEnemy][6] = enemyData[wEnemy][6] - 5
  464.                 enemyData[wEnemy][5] = enemyData[wEnemy][5] + 5
  465.               else
  466.                 enemyData[wEnemy][6] = enemyData[wEnemy][6] - 1
  467.                 enemyData[wEnemy][5] = enemyData[wEnemy][5] + 1
  468.               end if
  469.               if enemyData[wEnemy][6] = 0 then
  470.                 set the foreColor of sprite enemySprite to 255
  471.               else
  472.                 set the foreColor of sprite enemySprite to [1, 2][(enemyData[wEnemy][6] mod 2) + 1]
  473.               end if
  474.             end if
  475.             enemyData[wEnemy][3] = enemyData[wEnemy][3] - moveSpeed
  476.             if enemyData[wEnemy][3][2] < 0 then
  477.               enemyData[wEnemy][1] = 2500
  478.             else
  479.               if enemyData[wEnemy][3][2] > 2500 then
  480.                 enemyData[wEnemy][1] = 0
  481.               end if
  482.             end if
  483.             if enemyData[wEnemy][5] > maxDamage then
  484.               enemyData[wEnemy][1] = 0
  485.               addEnemy(2, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, random(2)])
  486.               rMove = random(50)
  487.               enemyData[wEnemy][1] = 0
  488.               addparticle(enemyData[wEnemy][3], 0, 1)
  489.               addpoints(15)
  490.               playSound("enemy explosion", 2)
  491.               set the loc of sprite enemySprite to point(-50, -50)
  492.             else
  493.               set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  494.             end if
  495.           end if
  496.         5:
  497.           maxDamage = enemyData[wEnemy][7][1]
  498.           enemyData[wEnemy][3] = enemyData[wEnemy][3] - moveSpeed
  499.           if enemyData[wEnemy][3][2] < 100 then
  500.             enemyData[wEnemy][3][2] = 2500
  501.           else
  502.             if enemyData[wEnemy][3][2] > 2500 then
  503.               enemyData[wEnemy][1] = 0
  504.             end if
  505.           end if
  506.           if enemyData[wEnemy][6] > 0 then
  507.             if enemyData[wEnemy][6] > 6 then
  508.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 5
  509.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 5
  510.             else
  511.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 1
  512.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 1
  513.             end if
  514.             if enemyData[wEnemy][6] = 0 then
  515.               set the foreColor of sprite enemySprite to 255
  516.             else
  517.               set the foreColor of sprite enemySprite to [1, 2][(enemyData[wEnemy][6] mod 2) + 1]
  518.             end if
  519.           end if
  520.           if (enemyData[wEnemy][5] > maxDamage) or (playerData[2][2] < enemyData[wEnemy][3][2]) then
  521.             enemyData[wEnemy][1] = 0
  522.             repeat with whichShrap = 1 to 16
  523.               rSpeed = 4 + random(4)
  524.               locY = cos(((whichShrap * 45) + random(45)) * PI / 180) * (rSpeed / 2)
  525.               locX = sin(((whichShrap * 45) + random(45)) * PI / 180) * -rSpeed
  526.               addEnemy(1, enemyData[wEnemy][3], [point(locX, locY) + point(0, 8), 30 + random(20), 1])
  527.             end repeat
  528.             rMove = random(50)
  529.             if playerData[2][2] >= enemyData[wEnemy][3][2] then
  530.               addpoints(30)
  531.             end if
  532.             playSound("enemy explosion", 2)
  533.             set the loc of sprite enemySprite to point(-50, -50)
  534.           else
  535.             set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  536.           end if
  537.         6:
  538.           straightAim = enemyData[wEnemy][7][9]
  539.           if enemyData[wEnemy][6] > 0 then
  540.             if enemyData[wEnemy][6] > 20 then
  541.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 10
  542.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 10
  543.             else
  544.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 1
  545.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 1
  546.             end if
  547.           end if
  548.           moveSpeed = point(0, 0)
  549.           if enemyData[wEnemy][7][1] > 0 then
  550.             if enemyData[wEnemy][7][2] > 0 then
  551.               enemyData[wEnemy][7][2] = enemyData[wEnemy][7][2] - 1
  552.             else
  553.               if playerDist <= 450 then
  554.                 enemyData[wEnemy][7][2] = enemyData[wEnemy][7][5]
  555.                 enemyData[wEnemy][7][1] = enemyData[wEnemy][7][1] - 1
  556.                 locY = cos(straightAim * PI / 180) * enemyData[wEnemy][7][7]
  557.                 locX = sin(straightAim * PI / 180) * -enemyData[wEnemy][7][7]
  558.                 addEnemy(1, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, 3])
  559.                 playSound("enemy Cannon", 3)
  560.               end if
  561.             end if
  562.           else
  563.             if enemyData[wEnemy][7][3] > 0 then
  564.               enemyData[wEnemy][7][3] = enemyData[wEnemy][7][3] - 1
  565.             else
  566.               enemyData[wEnemy][7][3] = enemyData[wEnemy][7][6]
  567.               enemyData[wEnemy][7][1] = enemyData[wEnemy][7][4]
  568.             end if
  569.           end if
  570.           if enemyData[wEnemy][3][2] < 100 then
  571.             enemyData[wEnemy][1] = 0
  572.           else
  573.             if enemyData[wEnemy][3][2] > 2500 then
  574.               enemyData[wEnemy][1] = 0
  575.             end if
  576.           end if
  577.           if enemyData[wEnemy][5] > enemyData[wEnemy][7][8] then
  578.             enemyData[wEnemy][1] = 0
  579.             if random(12) = 1 then
  580.               addEnemy(2, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, 2])
  581.             end if
  582.             set the loc of sprite enemySprite to point(-50, -50)
  583.             addparticle(enemyData[wEnemy][3], 0, 1)
  584.             addpoints(75)
  585.             playSound("enemy explosion", 2)
  586.           else
  587.             set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  588.             sprite(enemySprite).rotation = straightAim
  589.           end if
  590.         7:
  591.           maxDamage = enemyData[wEnemy][7][1]
  592.           if enemyData[wEnemy][3][2] < (playerData[2][2] - 150) then
  593.             if enemyData[wEnemy][7][9] > 8 then
  594.               enemyData[wEnemy][7][9] = enemyData[wEnemy][7][9] - 1
  595.             end if
  596.             if enemyData[wEnemy][3][1] < playerData[2][1] then
  597.               enemyData[wEnemy][7][10] = enemyData[wEnemy][7][10] + 0.20000000000000001
  598.               if enemyData[wEnemy][7][10] > 6 then
  599.                 enemyData[wEnemy][7][10] = 6
  600.               end if
  601.             else
  602.               enemyData[wEnemy][7][10] = enemyData[wEnemy][7][10] - 0.20000000000000001
  603.               if enemyData[wEnemy][7][10] < -6 then
  604.                 enemyData[wEnemy][7][10] = -6
  605.               end if
  606.             end if
  607.           else
  608.             if enemyData[wEnemy][7][10] > 0 then
  609.               enemyData[wEnemy][7][10] = enemyData[wEnemy][7][10] - 0.20000000000000001
  610.             else
  611.               if enemyData[wEnemy][7][10] < 0 then
  612.                 enemyData[wEnemy][7][10] = enemyData[wEnemy][7][10] + 0.20000000000000001
  613.               end if
  614.             end if
  615.             if enemyData[wEnemy][7][9] < 16 then
  616.               enemyData[wEnemy][7][9] = enemyData[wEnemy][7][9] + 1
  617.             end if
  618.           end if
  619.           enemyData[wEnemy][3] = enemyData[wEnemy][3] + point(enemyData[wEnemy][7][10], 0)
  620.           enemyData[wEnemy][3] = enemyData[wEnemy][3] - point(0, enemyData[wEnemy][7][9])
  621.           if enemyData[wEnemy][3][2] < 100 then
  622.             enemyData[wEnemy][3][2] = 2500
  623.           else
  624.             if enemyData[wEnemy][3][2] > 2500 then
  625.               enemyData[wEnemy][3][2] = 100
  626.             end if
  627.           end if
  628.           if enemyData[wEnemy][7][1] > 0 then
  629.             if enemyData[wEnemy][7][2] > 0 then
  630.               enemyData[wEnemy][7][2] = enemyData[wEnemy][7][2] - 1
  631.             else
  632.               if playerDist <= 450 then
  633.                 enemyData[wEnemy][7][2] = enemyData[wEnemy][7][5]
  634.                 enemyData[wEnemy][7][1] = enemyData[wEnemy][7][1] - 1
  635.                 locY = cos(playerAim * PI / 180) * enemyData[wEnemy][7][7]
  636.                 locX = sin(playerAim * PI / 180) * -enemyData[wEnemy][7][7]
  637.                 addEnemy(1, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, 1])
  638.                 playSound("enemy Ship", 3)
  639.               end if
  640.             end if
  641.           else
  642.             if enemyData[wEnemy][7][3] > 0 then
  643.               enemyData[wEnemy][7][3] = enemyData[wEnemy][7][3] - 1
  644.             else
  645.               enemyData[wEnemy][7][3] = enemyData[wEnemy][7][6]
  646.               enemyData[wEnemy][7][1] = enemyData[wEnemy][7][4]
  647.             end if
  648.           end if
  649.           if enemyData[wEnemy][6] > 0 then
  650.             if enemyData[wEnemy][6] > 6 then
  651.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 5
  652.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 5
  653.               enemyData[wEnemy][7][9] = enemyData[wEnemy][7][9] + 5
  654.             else
  655.               enemyData[wEnemy][6] = enemyData[wEnemy][6] - 1
  656.               enemyData[wEnemy][5] = enemyData[wEnemy][5] + 1
  657.               enemyData[wEnemy][7][9] = enemyData[wEnemy][7][9] + 1
  658.             end if
  659.             if enemyData[wEnemy][6] = 0 then
  660.               set the foreColor of sprite enemySprite to 255
  661.             else
  662.               set the foreColor of sprite enemySprite to [1, 2][(enemyData[wEnemy][6] mod 2) + 1]
  663.             end if
  664.           end if
  665.           if enemyData[wEnemy][5] > maxDamage then
  666.             enemyData[wEnemy][1] = 0
  667.             if random(5) = 1 then
  668.               addEnemy(2, enemyData[wEnemy][3], [point(locX, locY) + moveSpeed, 45, random(2)])
  669.             end if
  670.             rMove = random(50)
  671.             repeat with wTurn = 1 to 5
  672.               locY = cos((rMove + (wTurn * 72)) * PI / 180) * 30
  673.               locX = sin((rMove + (wTurn * 72)) * PI / 180) * -30
  674.               addparticle(enemyData[wEnemy][3] + point(locX, locY), 0, 1)
  675.             end repeat
  676.             addpoints(100)
  677.             playSound("enemy explosion", 2)
  678.             set the loc of sprite enemySprite to point(-50, -50)
  679.           else
  680.             set the loc of sprite enemySprite to enemyData[wEnemy][3] - playerViewPoint + bgOffset
  681.           end if
  682.       end case
  683.     end if
  684.   end repeat
  685. end
  686.  
  687. on damagePlayer damageAmount
  688.   global playerData
  689.   playerData[4] = playerData[4] - damageAmount
  690.   if playerData[4] > 100 then
  691.     playerData[4] = 100
  692.   end if
  693.   if playerData[4] < 0 then
  694.     playerData[4] = 0
  695.   end if
  696.   set the width of sprite 506 to integer(playerData[4] / 100.0 * 152)
  697.   if playerData[4] = 0 then
  698.     playerData[1] = 0
  699.   end if
  700. end
  701.  
  702. on checkTerrainPoint checkPoint
  703.   global roadMapData, tileSize, tileLoc
  704.   xPoint = (checkPoint[1] / tileSize[1]) + 1
  705.   yPoint = (checkPoint[2] / tileSize[2]) + 1
  706.   tileLoc = point(xPoint, yPoint)
  707.   xmod = checkPoint[1] mod tileSize[1]
  708.   ymod = checkPoint[2] mod tileSize[2]
  709.   pointLoc = point(xmod, ymod)
  710.   if (tileLoc[1] >= 1) and (tileLoc[2] >= 1) and (tileLoc[1] <= count(roadMapData[1])) and (tileLoc[2] <= count(roadMapData)) then
  711.     tType = roadMapData[tileLoc[2]][tileLoc[1]]
  712.     case tType of
  713.       1:
  714.         terrainState = 2
  715.       2:
  716.         if xmod > 20 then
  717.           terrainState = 1
  718.         else
  719.           terrainState = 2
  720.         end if
  721.       3:
  722.         if xmod < 20 then
  723.           terrainState = 1
  724.         else
  725.           terrainState = 2
  726.         end if
  727.       6:
  728.         if (xmod + ymod) > 40 then
  729.           terrainState = 1
  730.         else
  731.           terrainState = 2
  732.         end if
  733.       7:
  734.         if (40 - xmod + ymod) > 40 then
  735.           terrainState = 1
  736.         else
  737.           terrainState = 2
  738.         end if
  739.       10:
  740.         if (40 - xmod + ymod) < 40 then
  741.           terrainState = 1
  742.         else
  743.           terrainState = 2
  744.         end if
  745.       11:
  746.         if (xmod + ymod) < 40 then
  747.           terrainState = 1
  748.         else
  749.           terrainState = 2
  750.         end if
  751.       12:
  752.         terrainState = 1
  753.       otherwise:
  754.         terrainState = 2
  755.     end case
  756.   else
  757.     terrainState = 0
  758.   end if
  759.   return terrainState
  760. end
  761.  
  762. on initializeplayer
  763.   global playerData, playerSO
  764.   playerData = [1, point(200, 1000), point(0, 0), 100, 0, 0, 0, 3000, 40]
  765.   playerSO = 250
  766.   puppetSprite(playerSO, 1)
  767.   puppetSprite(playerSO + 1, 1)
  768.   puppetSprite(playerSO + 2, 1)
  769.   set the member of sprite playerSO to "Spy Hunter Car"
  770.   set the loc of sprite playerSO to point(0, 0)
  771.   set the ink of sprite playerSO to 36
  772.   set the member of sprite (playerSO + 1) to "Muzzle Flash B1"
  773.   set the loc of sprite (playerSO + 1) to point(0, 0)
  774.   set the ink of sprite (playerSO + 1) to 36
  775.   sprite(playerSO + 1).visible = 0
  776.   set the member of sprite (playerSO + 1) to "Muzzle Flash B1"
  777.   set the loc of sprite (playerSO + 1) to point(0, 0)
  778.   set the ink of sprite (playerSO + 1) to 36
  779.   sprite(playerSO + 1).visible = 0
  780. end
  781.  
  782. on moveplayer
  783.   global playerData, playerSO, playerViewPoint, mouseinput, inputString, enemyData, blasterData, alternatingGun, watchme
  784.   if inputString[5] = 1 then
  785.     if playerData[7] >= 10 then
  786.       playerData[7] = playerData[7] - 10
  787.     end if
  788.   else
  789.     if playerData[7] <= 90 then
  790.       playerData[7] = playerData[7] + 10
  791.     end if
  792.   end if
  793.   mousepos = playerData[2] - playerViewPoint
  794.   moveAim = findAngle(mousepos, the mouseLoc)
  795.   moveSpeed = integer(findDistance(mousepos, the mouseLoc) / 15 / 100.0 * playerData[7])
  796.   if moveSpeed > 12 then
  797.     moveSpeed = 12
  798.   end if
  799.   locY = cos(moveAim * PI / 180) * -moveSpeed
  800.   locX = sin(moveAim * PI / 180) * moveSpeed
  801.   if (playerData[2][2] > 2500) and (locY > 0) then
  802.     ratio = (1000 - (playerData[2][2] - 2500)) / 1000.0
  803.     locY = locY * ratio
  804.   end if
  805.   playerData[3] = point(locX, locY)
  806.   pLoc = playerData[2]
  807.   pLoc = pLoc + playerData[3]
  808.   playerData[2] = point(integer(pLoc[1]), integer(pLoc[2]))
  809.   if mouseinput = 1 then
  810.     fireMGUN = 1
  811.     if playerData[6] < 4 then
  812.       playerData[6] = playerData[6] + 4
  813.     end if
  814.   else
  815.     fireMGUN = 0
  816.   end if
  817.   gunPower = 2
  818.   if playerData[5] > 0 then
  819.     playerData[5] = playerData[5] - 4
  820.     gunType = 2
  821.   else
  822.     gunType = 1
  823.   end if
  824.   streakLength = 400
  825.   case gunType of
  826.     1:
  827.       muzzleHidden = 0
  828.       if playerData[6] > 0 then
  829.         playerData[6] = playerData[6] - 1
  830.         if playerData[6] = 0 then
  831.           sprite(playerSO + 1).visible = 0
  832.         else
  833.           sprite(playerSO + 1).visible = 1
  834.           case playerData[6] mod 4 of
  835.             1:
  836.               sprite(playerSO + 1).flipH = 1
  837.               set the member of sprite (playerSO + 1) to "Muzzle Flash " & ["A", "B", "C", "D"][gunPower] & "1"
  838.               set the loc of sprite (playerSO + 1) to playerData[2] - playerViewPoint + bgOffset
  839.               sprite(playerSO + 1).rotation = moveAim
  840.             3:
  841.               sprite(playerSO + 1).flipH = 1
  842.               set the member of sprite (playerSO + 1) to "Muzzle Flash " & ["A", "B", "C", "D"][gunPower] & "2"
  843.               set the loc of sprite (playerSO + 1) to playerData[2] - playerViewPoint + bgOffset
  844.               sprite(playerSO + 1).rotation = moveAim
  845.             otherwise:
  846.               sprite(playerSO + 1).visible = 0
  847.               playSound("player secondary weapon", 5)
  848.               muzzleHidden = 1
  849.           end case
  850.         end if
  851.         muzzUsed = 0
  852.         targRange = 450
  853.         targID = 0
  854.         repeat with wEnemy = 1 to count(enemyData)
  855.           if enemyData[wEnemy][1] = 1 then
  856.             if [0, 0, 1, 1, 1, 1, 1][enemyData[wEnemy][2]] = 1 then
  857.               enemyloc = enemyData[wEnemy][3]
  858.               playerloc = playerData[2]
  859.               relativeLoc = enemyloc - playerloc
  860.               relativeAim = findAngle(point(0, 0), relativeLoc)
  861.               relativeDistance = findDistance(point(0, 0), relativeLoc)
  862.               newAim = relativeAim - moveAim
  863.               locY = cos(newAim * PI / 180) * -relativeDistance
  864.               locX = sin(newAim * PI / 180) * relativeDistance
  865.               if (abs(locX) <= 20) and (locY < 0) then
  866.                 if relativeDistance < targRange then
  867.                   targID = wEnemy
  868.                   targRange = relativeDistance
  869.                   streakLength = relativeDistance
  870.                 end if
  871.               end if
  872.             end if
  873.           end if
  874.         end repeat
  875.       end if
  876.       if targID <> 0 then
  877.         enemyData[targID][6] = enemyData[targID][6] + 4
  878.         rpoint = point(random(30) - 15, random(30) - 15)
  879.         addparticle(enemyData[targID][3] + rpoint, 0, 3)
  880.       end if
  881.     2:
  882.       sprite(playerSO + 1).visible = 0
  883.       if playerData[6] > 0 then
  884.         if blasterData[1] = 0 then
  885.           blasterData[1] = 1
  886.           blasterData[2] = playerData[2]
  887.           locY = cos(moveAim * PI / 180) * -35
  888.           locX = sin(moveAim * PI / 180) * 35
  889.           blasterData[3] = point(locX, locY)
  890.           blasterData[4] = 45
  891.           playSound("player Laser", 5)
  892.         end if
  893.         playerData[6] = 0
  894.       end if
  895.       fireMGUN = 0
  896.   end case
  897.   blastOn = 0
  898.   leftSolid = checkTerrainPoint(playerData[2] + point(-20, 0))
  899.   repeat while leftSolid = 2
  900.     leftSolid = checkTerrainPoint(playerData[2] + point(-20, 0))
  901.     if leftSolid = 2 then
  902.       playerData[2] = playerData[2] + point(2, 0)
  903.       blastOn = 1
  904.       blastloc = playerData[2] + point(-20, 0)
  905.     end if
  906.   end repeat
  907.   rightSolid = checkTerrainPoint(playerData[2] + point(20, 0))
  908.   repeat while rightSolid = 2
  909.     rightSolid = checkTerrainPoint(playerData[2] + point(20, 0))
  910.     if rightSolid = 2 then
  911.       playerData[2] = playerData[2] + point(-2, 0)
  912.       blastOn = 1
  913.       blastloc = playerData[2] + point(20, 0)
  914.     end if
  915.   end repeat
  916.   rightSolid = checkTerrainPoint(playerData[2] + point(0, 15))
  917.   repeat while rightSolid = 2
  918.     rightSolid = checkTerrainPoint(playerData[2] + point(0, 15))
  919.     if rightSolid = 2 then
  920.       playerData[2] = playerData[2] + point(0, -2)
  921.       blastOn = 1
  922.       blastloc = playerData[2] + point(0, 15)
  923.     end if
  924.   end repeat
  925.   if blastOn = 1 then
  926.     rloc = point(random(20) - 10, random(20) - 10)
  927.     addparticle(blastloc + rloc, 0, 1 + random(2))
  928.     damagePlayer(1)
  929.     playSound("Grind Wall", 4)
  930.   end if
  931.   if fireMGUN = 1 then
  932.     if alternatingGun = 1 then
  933.       alternatingGun = 2
  934.       locY = cos((moveAim + 90) * PI / 180) * -8
  935.       locX = sin((moveAim + 90) * PI / 180) * 8
  936.     else
  937.       alternatingGun = 1
  938.       locY = cos((moveAim - 90) * PI / 180) * -8
  939.       locX = sin((moveAim - 90) * PI / 180) * 8
  940.     end if
  941.     streakLength = streakLength - random(25)
  942.     locY2 = cos(moveAim * PI / 180) * -streakLength
  943.     locX2 = sin(moveAim * PI / 180) * streakLength
  944.     coreloc = playerData[2] - playerViewPoint + bgOffset + point(locX, locY) + point(locX2, locY2)
  945.     addStreak(coreloc, streakLength * 0.40000000000000002, moveAim)
  946.   end if
  947.   case checkTerrainPoint(playerData[2]) of
  948.     1:
  949.       watchme = #Safe
  950.     2:
  951.       watchme = #dead
  952.   end case
  953.   set the loc of sprite playerSO to playerData[2] - playerViewPoint + bgOffset
  954.   sprite(playerSO).rotation = moveAim
  955. end
  956.  
  957. on moveterrain
  958.   global terrainSO, tileSize, prevLocation, roadMapData, levelWidth, levelheight, playerData, playerViewPoint, tileLoc
  959.   displayOffset = playerViewPoint[2] mod tileSize[2]
  960.   tileOffset = playerViewPoint[2] / tileSize[2]
  961.   screenShake = point(0, 0)
  962.   wSprite = terrainSO - 1
  963.   repeat with wY = 1 to levelheight
  964.     repeat with wX = 1 to levelWidth
  965.       wSprite = wSprite + 1
  966.       tType = roadMapData[wY + tileOffset][wX]
  967.       set the locV of sprite wSprite to ((point(wX, wY) * tileSize) - (tileSize[2] * 0.5) - point(0, displayOffset) - screenShake)[2] + 11 + bgOffset[2]
  968.       if prevLocation <> tileOffset then
  969.         prevtType = roadMapData[wY + prevLocation][wX]
  970.         tileNameList = ["Grass", "Left Side", "Right Side", "Left Elbow Down", "Right Elbow Down", "Left Corner Down", "Right Corner Down", "Left Elbow Up", "Right Elbow Up", "Left Corner Up", "Right Corner Up", "Pavement"]
  971.         set the member of sprite wSprite to 232 + tType
  972.         if prevLocation = VOID then
  973.           set the member of sprite wSprite to 232 + tType
  974.           next repeat
  975.         end if
  976.         if tType = 12 then
  977.           sprite(wSprite).visible = 0
  978.           next repeat
  979.         end if
  980.         set the member of sprite wSprite to 232 + tType
  981.         sprite(wSprite).visible = 1
  982.       end if
  983.     end repeat
  984.   end repeat
  985.   if prevLocation <> tileOffset then
  986.     prevLocation = tileOffset
  987.   end if
  988. end
  989.