Megapede — File Browser

Megapedev1.01 / Megapedev1.01 / megapede.mrc

megapede.mrc — 19 KB — Download this file

on 1:load: {
  echo -a Loaded Megapede v1.01 for mIRC 5.31
  echo -a Written by Hawkee (http://www.hawkee.com)
  echo -a Type /megapede to start.
}
alias megapede {
  mp.init.variables
  ;Settings that change from level to level
  %mp-megapede-length = 4
  %mp-current-level = 1
  %mp-tree-total = 50
  %mp-score = 0
  %mp-lives = 3
  ;Fit window in middle of screen
  %mp.width = $window(-1).w
  %mp.height = $window(-1).h
  %mp.x.pos = $calc((%mp.width / 2) - 180)
  %mp.y.pos = $calc((%mp.height / 2) - 235)
  window -p +nt @Megapede %mp.x.pos %mp.y.pos 340 350 @Megapede
  ;Initial black
  drawfill -r @Megapede %mp.screen.color 1 0 0
  ;border around entire screen, grey
  drawrect -r @Megapede %mp.border.color 1 0 0 336 325
  ;inner border around playing field, brown
  drawrect -r @Megapede %mp.panel.color 3 1 1 334 344
  ;inner inner border around playing field, brown
  drawrect -r @Megapede %mp.panel.color 2 5 5 330 339
  ;line separating fields
  drawline -r @Megapede %mp.border.color 1 245 0 245 345
  ;fill up the panel
  drawfill -r @Megapede %mp.panel.color %mp.border.color 250 5
  ;little line in top to get rid of grey
  drawline -r @Megapede %mp.panel.color 1 245 1 245 7
  ;line from top of panel to right side, black
  drawline -r @megapede %mp.screen.color 1 245 4 332 4
  ;line from top to bottom of panel, black
  drawline -r @Megapede %mp.screen.color 1 332 4 332 345
  ;line along bottom to fill in frame, brown
  drawline -r @Megapede %mp.panel.color 4 0 327 336 328
  ;cover up grey in panel, brown
  drawline -r @Megapede %mp.panel.color 2 245 326 332 326
  ;fix dot of grey with black
  drawdot -r @Megapede %mp.panel.color 1 4 325
  ;add line at bottom left corner, grey
  drawline -r @Megapede %mp.border.color 1 0 326 0 330
  ;add line of black at bottom left
  drawline -r @Megapede %mp.screen.color 1 4 325 4 330
  ;add speck in corner
  drawdot -r @Megapede %mp.speck.color 1 245 325
  ;fix lower right corner
  drawline -r @Megapede %mp.border.color 1 336 325 336 330
  drawline -r @Megapede %mp.screen.color 1 332 324 332 330
  drawtext -ro @Megapede %mp.text.color Arial bold 266 30 Score
  mp.frame 255 50 65 25
  drawtext -ro @Megapede %mp.text.color Arial bold 268 110 Level
  mp.frame 255 130 65 25
  drawtext -ro @Megapede %mp.text.color Arial bold 267 190 Ships
  mp.frame 255 210 65 25
  ;Draw ships in side bar and on playing field
  mp.draw.ship 275 219
  mp.draw.ship 303 219
  mp.draw.ship 123 284
  mp.window Starting level one...  
}
alias -l mp.init.variables {
  ;cleans up all the dirty variables and resets the essential variables
  unset %mp.*
  %mp.tree.color = 56320
  %mp.megapede.color = 6062080
  %mp.screen.color = 0000000
  %mp.border.color = 10064271
  %mp.speck.color = 16777215
  %mp.panel.color = 2697513
  ;Feel free to change the %mp.panel.color to whatever you wish
  ;the value which is commented out will make everything blue
  ;%mp.panel.color = 6563840
  %mp.text.color = 13551310
  %mp.score.color = 55039
  %mp.shot.speed = 10
  %mp.shot.length = 5
  %mp.p1.color = 16777215
  %mp.max.shots = 3
  %mp.speed.test = 0
  %mp.loops = 0
  %mp.kills = 0
}
alias -l mp.start.level {
  ;clears the playing field and starts the appropriate level
  if ( %mp-lives == 0 ) { 
    megapede
    return
  }
  titlebar @Megapede Level: %mp-current-level
  drawtext -rob @Megapede %mp.score.color %mp.screen.color Arial bold 284 135 %mp-current-level
  drawrect -rf @Megapede %mp.screen.color 1 7 7 235 315
  mp.draw.megapede
  mp.draw.trees
  .timermp.update -mo 0 10 mp.update
}
alias -l mp.draw.trees {
  ;fills the playing field with %mp-tree-total trees
  %mp.loop = 1
  :loop
  if %mp.loop > %mp-tree-total goto end
  %mp.x = $r(2,24)
  %mp.y = $r(2,27) 
  set %mp. $+ $calc(10 * %mp.x) $+ . $+ $calc(10 * %mp.y) 5
  drawdot -r @Megapede %mp.tree.color 5 $calc((10 * %mp.x) - 3) $calc(10 * %mp.y)
  inc %mp.loop
  goto loop
  :end
}
alias -l mp.draw.megapede {
  ;creates the megapede according to %mp-megapede-length segments
  %mp.loop = 1
  :loop
  if (%mp.loop > %mp-megapede-length) goto end
  set %mp. $+ $calc(10 * %mp.loop + 10) $+ . $+ 20 6 %mp.loop
  if (%mp.loop == %mp-megapede-length) { set %mp.body. $+ %mp.loop $calc(10 * %mp.loop + 10) 20 r d h }
  else { set %mp.body. $+ %mp.loop $calc(10 * %mp.loop + 10) 20 r d b }
  drawdot -r @Megapede %mp.megapede.color 5 $calc((10 * %mp.loop + 10) - 3) 20
  inc %mp.loop
  goto loop
  :end
}
alias -l mp.move.megapede {
  ;moves segment number $1 of the megapede in the appropriate direction
  set %mp.current %mp.body. [ $+ [ $1 ] ]
  if (%mp.current != $null) {
    if ($gettok(%mp.current,5,32) == h) {
      %mp.direction.x = $gettok(%mp.current,3,32)
      %mp.direction.y = $gettok(%mp.current,4,32)
      if (%mp.direction.x == r) {
        %mp.next.x = $calc($gettok(%mp.current,1,32) + 10)
      }
      else {
        %mp.next.x = $calc($gettok(%mp.current,1,32) - 10)
      }
      %mp.next.y = $gettok(%mp.current,2,32)
      %mp.tree.check = %mp. [ $+ [ %mp.next.x ] [ $+ . [ $+ [ %mp.next.y ] ] ] ]
      if (%mp.tree.check < 6 && %mp.tree.check != $null) { %mp.tree = $true }
      else { %mp.tree = $false }
      if ((%mp.tree || %mp.next.x > 240) && %mp.direction.y == d && %mp.direction.x == r) {
        %mp.direction.x = l
        %mp.next.x = $gettok(%mp.current,1,32)
        %mp.next.y = $calc(%mp.next.y + 10)
      }
      elseif ((%mp.tree || %mp.next.x > 240) && %mp.direction.y == u && %mp.direction.x == r) {
        %mp.direction.x = l
        %mp.next.x = $gettok(%mp.current,1,32)
        %mp.next.y = $calc(%mp.next.y - 10)
      }
      elseif ((%mp.tree || %mp.next.x < 15) && %mp.direction.y == d && %mp.direction.x == l) {
        %mp.direction.x = r
        %mp.next.x = $gettok(%mp.current,1,32)
        %mp.next.y = $calc(%mp.next.y + 10)
      }
      elseif ((%mp.tree || %mp.next.x < 15) && %mp.direction.y == u && %mp.direction.x == l) {
        %mp.direction.x = r
        %mp.next.x = $gettok(%mp.current,1,32)
        %mp.next.y = $calc(%mp.next.y - 10)
      }
      if (%mp.next.y > 310) { set %mp.direction.y u }
      elseif (%mp.next.y < 290) { set %mp.direction.y d }
      %mp.x = $gettok(%mp.current,1,32)
      %mp.y = $gettok(%mp.current,2,32)
      set %mp. $+ %mp.next.x $+ . $+ %mp.next.y 6 $1
      unset %mp. $+ $calc(%mp.x) $+ . $+ $calc(%mp.y)
      set %mp.body. $+ $1 %mp.next.x %mp.next.y %mp.direction.x %mp.direction.y h
    } 
    else {
      %mp.next.x = %mp.x
      %mp.next.y = %mp.y
      %mp.direction.x = $gettok(%mp.current,3,32)
      %mp.direction.y = $gettok(%mp.current,4,32)
      %mp.x = $gettok(%mp.current,1,32)
      %mp.y = $gettok(%mp.current,2,32)
      set %mp. $+ %mp.next.x $+ . $+ %mp.next.y 6 $1
      unset %mp. $+ $calc(%mp.x) $+ . $+ $calc(%mp.y)
      set %mp.body. $+ $1 %mp.next.x %mp.next.y %mp.direction.x %mp.direction.y b
    }
    drawdot -rn @Megapede %mp.screen.color 5 $calc(%mp.x - 3) %mp.y 
    drawdot -rn @Megapede %mp.megapede.color 5 $calc(%mp.next.x - 3) %mp.next.y
  }
}
on 1:close:@Megapede {
  if ( $window(@Mp.window) ) window -c @Mp.window
  if ( %mp.active == $false ) {
    unset %mp.*
    unset %mp-*
  }
}
alias -l mp.update {
  ;updates one frame
  %mp.timer = $ticks
  %mp.active = $true
  if ( $window(@Megapede) == $null ) {
    .timermp.update off   
    unset %mp.*
    unset %mp-*
    return
  }
  %mp.loop = %mp-megapede-length
  :loop
  if (%mp.loop < 1) { goto end }
  mp.move.megapede %mp.loop
  mp.move.bullets %mp.loop
  dec %mp.loop
  goto loop
  :end
  drawdot @Megapede
  mp.collision.check
  if ($mouse.key & 1) { mp.release.shot }
  if ( %mp-debug ) {
    inc %mp.loops
    inc %mp.speed.test $calc($ticks - %mp.timer)
    set %mp.ticks $calc(%mp.speed.test / %mp.loops)
    set %mp.refreshes.per.second $calc(1000 / %mp.ticks)
    drawtext -rob @Megapede %mp.text.color %mp.panel.color Arial bold 253 260 FPS: $round(%mp.refreshes.per.second,1)
  }
}
alias -l mp.move.bullets {
  ;moves bullet number $1 up the screen one spot if it exists
  if (%mp.bullet [ $+ [ $1 ] ] != $null) {
    %mp.current = %mp.bullet [ $+ [ $1 ] ]
    %mp.bullet.x = $calc(($gettok(%mp.current,1,32) - ($gettok(%mp.current,1,32) % 10)) + 10)
    %mp.bullet.y = $calc($gettok(%mp.current,2,32) - ($gettok(%mp.current,2,32) % 10))
    %mp.coordinate.check = %mp. [ $+ [ %mp.bullet.x ] [ $+ . [ $+ [ %mp.bullet.y ] ] ] ]
    if (%mp.coordinate.check == $null) { goto next }
    else {
      unset %mp.bullet $+ $1
      %mp.size = $gettok(%mp.coordinate.check,1,32)
      drawdot -r @Megapede %mp.screen.color %mp.size $calc(%mp.bullet.x - 3) %mp.bullet.y
      dec %mp.size
      if (%mp.size == 5) {
        inc %mp.kills 
        %mp.part = $gettok(%mp.coordinate.check,2,32)
        unset %mp.body. $+ $calc(%mp.part)
        dec %mp.part
        %mp.previous.part = %mp.body. [ $+ [ %mp.part ] ]
        if (%mp.previous.part != $null) { set %mp.body. $+ %mp.part $gettok(%mp.previous.part,1-4,32) h }
        drawdot -r @Megapede %mp.tree.color %mp.size $calc(%mp.bullet.x - 3) %mp.bullet.y
        set %mp. $+ %mp.bullet.x $+ . $+ %mp.bullet.y %mp.size
        inc %mp-score 50
        drawtext -rob @Megapede %mp.score.color %mp.screen.color Arial bold 265 55 %mp-score
        if ( %mp.kills == %mp-megapede-length ) { mp.level.complete }
      }
      elseif (%mp.size < 3) {
        unset %mp. $+ $calc(%mp.bullet.x) $+ . $+ $calc(%mp.bullet.y)
        inc %mp-score 5
        drawtext -rob @Megapede %mp.score.color %mp.screen.color Arial bold 265 55 %mp-score
      }
      else {
        drawdot -r @Megapede %mp.tree.color %mp.size $calc(%mp.bullet.x - 3) %mp.bullet.y
        set %mp. $+ %mp.bullet.x $+ . $+ %mp.bullet.y %mp.size
      }
      drawline -r @Megapede %mp.screen.color 1 %mp.current $gettok(%mp.current,1,32) $calc($gettok(%mp.current,2,32) + %mp.shot.length)
      goto end
    }
    :next
    drawline -r @Megapede %mp.screen.color 1 %mp.current $gettok(%mp.current,1,32) $calc($gettok(%mp.current,2,32) + %mp.shot.length)
    %mp.current = $gettok(%mp.current,1,32) $calc($gettok(%mp.current,2,32) - %mp.shot.speed)
    drawline @Megapede 0 1 %mp.current $gettok(%mp.current,1,32) $calc($gettok(%mp.current,2,32) + %mp.shot.length)
    if ($gettok(%mp.current,2,32) < 20) { 
      unset %mp.bullet $+ $1
      drawline -r @Megapede %mp.screen.color 1 %mp.current $gettok(%mp.current,1,32) $calc($gettok(%mp.current,2,32) + %mp.shot.length)
    }
    else { set %mp.bullet $+ $1 %mp.current }
  }
  :end
}
alias -l mp.release.shot {
  ;sets the next bullet in line to true and gives it a starting coordinate to move up from
  %mp.loop = 1
  :loop
  if (%mp.loop > %mp.max.shots) { goto end }
  if (%mp.bullet [ $+ [ %mp.loop ] ] == $null) {
    mp.coordinates
    set %mp.bullet $+ %mp.loop %mp.mouse.x $calc(%mp.mouse.y - 3)
    halt
  }
  inc %mp.loop
  goto loop    
  :end
}
menu @Megapede {
  mouse {
    if (%mp.active) {
      if ( %mp.point && %mp.lower.left && %mp.lower.right ) {      
        drawline -r @Megapede %mp.screen.color 2 %mp.point %mp.lower.left
        drawline -r @Megapede %mp.screen.color 2 %mp.point %mp.lower.right
      }
      mp.coordinates
      mp.draw.ship %mp.mouse.x %mp.mouse.y    
    }
  }
  dclick {
    mp.release.shot
  }
  Reset:.timermp.update off | megapede
  $mp.pause:mp.pause.switch
  $mp.fps:mp.fps.switch
  -
  Quit: {
    window -c @Megapede
    if ( $window(@Mp.window) ) window -c @Mp.window
    if ( %mp.active == $false ) {
      unset %mp.*
      unset %mp-*
    }
  }
}
;Menu aliases
alias -l mp.fps {
  if ( %mp-debug ) { return Hide FPS }
  else { return Show FPS }
}
alias -l mp.fps.switch {
  if ( %mp-debug ) { 
    unset %mp-debug
    drawrect -rf @Megapede %mp.panel.color 1 250 260 80 15
  }
  else { %mp-debug = $true }
}
alias -l mp.pause {
  if ($timer(mp.update).status == 0) {
    return Unpause
  }
  else { return Pause }
}
alias -l mp.pause.switch {
  if ($timer(mp.update).status == 0) {
    %mp.active = $true
    timermp.update -m 0 1 mp.update
  }
  else { 
    .timermp.update off 
    %mp.active = $false
  }
}
alias -l mp.frame {
  ;draws a little box, used in the side bar for score, level and lives
  drawrect -r @Megapede %mp.border.color 1 $1 $2 $3 $4
  drawfill -r @Megapede %mp.screen.color %mp.border.color $calc($1 + 2) $calc($2 + 2)
  drawline -r @Megapede %mp.panel.color 2 $1 $2 $calc($1 + $3) $2
  drawline -r @Megapede %mp.panel.color 2 $calc($1 + 3) $calc($2 + 3) $calc($1 + $3 - 2) $calc($2 + 3)
  drawline -r @Megapede %mp.panel.color 2 $calc($1 + 3) $calc($2 + 2) $calc($1 + 3) $calc($2 + $4)
  drawline -r @Megapede %mp.panel.color 2 $1 $2 $1 $calc($2 + $4)
  drawdot -r @Megapede %mp.screen.color 1 $calc($1 + 1) $calc($2 + $4)
  drawdot -r @Megapede %mp.screen.color 1 $calc($1 + 1) $calc($2 + $4 +1)
}
alias -l mp.window {
  ;creates the window to notify you of what is happening
  %mp.width = $window(-1).w
  %mp.height = $window(-1).h
  %mp.x.pos = $calc((%mp.width / 2) - 100)
  %mp.y.pos = $calc((%mp.height / 2) - 100)
  window -pt +nf @Mp.window %mp.x.pos %mp.y.pos 190 90 @Mp.window.menu
  drawfill -r @Mp.window %mp.panel.color 1 0 0
  mp.window.button up
  drawtext -ro @Mp.window %mp.text.color Arial 14 137 54 Ok
  if ( $1 ) {
    drawtext -ro @Mp.window %mp.text.color Arial 14 $round($calc( 112 - ( $width($1-,Arial,14,1,0) / 2 ) ),0) 20 $1-
  }
  if ( %mp-score != 0 ) {
    drawtext -ro @Mp.window %mp.text.color Arial 14 20 40 Score: %mp-score
  }
}
alias -l mp.window.button {
  ;down parameter creates a button in the down position, while up draws it in the up position
  if $window(@Mp.window) {
    if $1 == down {
      drawline -r @Mp.window %mp.border.color 1 120 70 170 70
      drawline -r @Mp.window %mp.border.color 1 170 70 170 50
      drawline -r @Mp.window %mp.screen.color 1 120 70 120 50
      drawline -r @Mp.window %mp.screen.color 1 120 50 170 50
    }
    else if $1 == up {
      drawline -r @Mp.window %mp.screen.color 1 120 70 170 70
      drawline -r @Mp.window %mp.screen.color 1 170 70 170 50
      drawline -r @Mp.window %mp.border.color 1 120 70 120 50
      drawline -r @Mp.window %mp.border.color 1 120 50 170 50
    }
  }
}
alias -l mp.window.click {
  ;used to check if the user clicked and released the mouse button while over the "ok" button of the window
  if ( $mouse.key & 1 ) { .timer -m 1 100 mp.window.click }
  else if $inrect($mouse.x,$mouse.y,120,50,50,20) {
    unset %mp.button.click
    window -c @Mp.window
    mp.window.closed
  }
}
menu @Mp.window.menu {
  ;these events were used to determine when the button should be down and when the window will be closed
  sclick {
    if ( $inrect($mouse.x,$mouse.y,120,50,50,20) ) { 
      mp.window.button down
      %mp.button.click = $true
      .timer -m 1 100 mp.window.click
    }
  }
  dclick  {
    if ( $inrect($mouse.x,$mouse.y,120,50,50,20) ) { 
      mp.window.button down
      %mp.button.click = $true
      .timer -m 1 100 mp.window.click
    }
  }
  mouse {
    if ( $inrect($mouse.x,$mouse.y,120,50,50,20) == $false ) { mp.window.button up }
    else if %mp.button.click && $mouse.key & 1 { mp.window.button down }
  }
  drop {
    if ( $inrect($mouse.x,$mouse.y,120,50,50,20) && %mp.button.click ) { 
      window -c @Mp.window
      mp.window.closed
    }
    else if ( %mp.button.click ) { unset %mp.button.click }
  }
}
alias -l mp.collision.check {
  ;checks to see if anything is touching your ship, if so you die
  mp.coordinates
  %mp.mid.left = $calc(%mp.mouse.x - 5) $calc(%mp.mouse.y + 5)
  %mp.mid.right = $calc(%mp.mouse.x + 5) $calc(%mp.mouse.y + 5)
  %mp.left.tip = $calc(%mp.mouse.x - 10) $calc(%mp.mouse.y + 10)
  %mp.right.tip = $calc(%mp.mouse.x + 10) $calc(%mp.mouse.y + 10)
  %mp.tip = $getdot(@Megapede,%mp.mouse.x,$calc(%mp.mouse.y - 2))
  %mp.mid.left = $getdot(@Megapede,$calc($gettok(%mp.mid.left,1,32) + 5),$gettok(%mp.mid.left,2,32))
  %mp.mid.right = $getdot(@Megapede,$calc($gettok(%mp.mid.right,1,32) + 5),$gettok(%mp.mid.right,2,32))
  %mp.left.tip = $getdot(@Megapede,$calc($gettok(%mp.left.tip,1,32) - 2),$gettok(%mp.left.tip,2,32))
  %mp.right.tip = $getdot(@Megapede,$calc($gettok(%mp.right.tip,1,32) + 2),$gettok(%mp.right.tip,2,32))
  if ((%mp.tip != %mp.screen.color) || (%mp.left.tip != %mp.screen.color) || (%mp.right.tip != %mp.screen.color) || (%mp.mid.left != %mp.screen.color) || (%mp.mid.right != %mp.screen.color)) {
    %mp-dead = $true
    mp.level.complete   
  }
}
alias -l mp.coordinates {
  ;adjusts the $mouse.x and $mouse.y coordinates so they map to some place in the playing area for the ship
  if ($mouse.y < 275) { %mp.mouse.y = 275 }
  elseif ($mouse.y > 310) { %mp.mouse.y = 310 }
  else { %mp.mouse.y = $mouse.y }
  if ($mouse.x > 232) { %mp.mouse.x = 232 }
  elseif ($mouse.x < 19) { %mp.mouse.x = 19 }
  else { %mp.mouse.x = $mouse.x }
}
alias -l mp.draw.ship {
  ;draws a ship at point $1, $2
  %mp.point = $1 $2
  %mp.lower.left = $calc($1 - 10) $calc($2 + 10)
  %mp.lower.right = $calc($1 + 10) $calc($2 + 10)
  drawline -r @Megapede %mp.p1.color 2 $1 $2 $calc($1 - 10) $calc($2 + 10)
  drawline -r @Megapede %mp.p1.color 2 $1 $2 $calc($1 + 10) $calc($2 + 10)
}
alias -l mp.level.complete {
  ;called when you either die or pass a level, adjusts variables according to your status and restarts the play field
  .timermp.update off
  drawrect -rf @Megapede %mp.screen.color 1 7 7 235 315
  mp.init.variables
  if ( %mp-dead ) {
    unset %mp-dead
    if ( %mp-lives == 3 ) {
      %mp.p1.color = %mp.screen.color
      mp.draw.ship 275 219
      %mp.p1.color = 16777215
      dec %mp-lives
      mp.window You died. %mp-lives ships remaining.
    }
    else if ( %mp-lives == 2 ) {
      %mp.p1.color = %mp.screen.color
      mp.draw.ship 303 219
      %mp.p1.color = 16777215
      dec %mp-lives
      mp.window You died. %mp-lives ship remaining.
    }
    else if ( %mp-lives == 1 ) {
      dec %mp-lives
      mp.window Game over,  no more ships
    } 
  }
  else if ( %mp-current-level == 1 ) {
    %mp-tree-total = 100
    %mp-current-level = 2
    %mp-megapede-length = 4
    mp.window Starting Level two...
  }
  else if ( %mp-current-level == 2 ) {
    %mp-tree.total = 100
    %mp-current-level = 3
    %mp-megapede-length = 3
    mp.window Starting level three...
  }
  else if ( %mp-current-level == 3 ) {
    %mp-tree.total = 150
    %mp-current-level = 4
    %mp-megapede-length = 2
    mp.window Starting level four...
  }
  else if ( %mp-current-level == 4 ) {
    %mp-tree.total = 200
    %mp-current-level = 5
    %mp-megapede-length = 1
    mp.window Starting level five...
  }
  else if ( %mp-current-level == 5 ) {
    window -c @Megapede
    mp.window You win! Congratulations!
  }
}
alias -l mp.window.closed {
  ;this is called when the @Mp.window is closed
  ;a new level always starts when it's closed unless 
  ;@Megapede has been shut down
  if ( $window(@Megapede) ) mp.start.level
  else {
    unset %mp.*
    unset %mp-*
  }
}