IRC Invaders — File Browser

IRCInvadersv1.1 / IRCInvadersv1.1 / space / space.mrc

space.mrc — 31.47 KB — Download this file

; IRC Invaders v1.1 - by entropy 2020

;=========================================================== MENUS

menu status {
  -
  $iif(!$window(@IRC),IRC Invaders $sversion)
  .800 x 600 $chr(9) (fast) { %_master = $vol(master) | %_new = $calc($vol(master) / 3) | vol -v %_new | %_display = 800 600 | space }
  .1024 x 768 $chr(9) (medium) { %_master = $vol(master) | %_new = $calc($vol(master) / 3) | vol -v %_new | %_display = 1024 768 | space }
  .Fullscreen $chr(9) (slow) { %_master = $vol(master) | %_new = $calc($vol(master) / 3) | vol -v %_new | %_display = $window(-1).w $window(-1).h | space }
  .-
  .Unload { .unload -rs $qt($script) }
  -
}

menu @IRC {
  -
  $iif(!$timer(pause) && $timer(space) && !%space_start && !%space_inter,Pause $chr(9) [PAUSE]) { pause }
  $iif($timer(pause) && %space_over != yes && !%space_inter,Unpause $chr(9) [PAUSE]) { unpause }
  -
  Replay  
  .800 x 600 $chr(9) (fast) { vol -v %_new | %_display = 800 600 | space }
  .1024 x 768 $chr(9) (medium) { vol -v %_new | %_display = 1024 768 | space }
  .Fullscreen $chr(9) (slow) { vol -v %_new | %_display = $window(-1).w $window(-1).h | space }  
  -
  Top 10 Scores $chr(9) [F1] { f1 }
  -
  Close { cleanup }
  -
}

;=========================================================== MAIN ALIASES

alias -l sversion { return 1.1 }
alias -l sauthor { return entropy }
alias -l syear { return 2020 }

;=========================================================== ON CLOSE

on *:close:@IRC:{ cleanup }

;=========================================================== LOAD/UNLOAD

on *:load:{
  if ($version < 7.55) { .unload -rs $qt($script) | echo 4 -tag * IRC Invaders requires mIRC 7.55 or greater! }
  else { echo 4 -tag * IRC Invaders - by $sauthor $syear - loaded! }
}
on *:unload:{
  echo 4 -tag * IRC Invaders - by $sauthor $syear - unloaded!
}

;=========================================================== KEYS


on *:playend:{ 
  if ($nopath($filename) == bg.mp3) { .splay -p $qt($scriptdirbg.mp3) }
}

alias -l cleanup {
  .splay stop
  if ($isfile($qt($scriptdirsave.bmp))) { .remove $qt($scriptdirsave.bmp) }
  .timerspace* off
  .timerpause off
  hfree space
  window -c @IRC.buf
  window -c @IRC.buf2
  window -c @IRC
  if ($isfile($qt($scriptdirbg.txt))) { .remove $qt($scriptdirbg.txt) }
  vol -v %_master
  unset %space_* %new_* %_dead %_damage %_owner2 %_owner %_new %_master %_display
}

alias -l checkcontrols { ;$1=angle | if ($hget(space,player) && !$istok(%_dead,player,32)) { %space_angle = $addtok($remove(%space_angle,$1),$1,32) } }
alias -l uncheckcontrols { ;$1=angle | if ($hget(space,player) && !$istok(%_dead,player,32)) { %space_angle = $remtok(%space_angle,$1,1,32) } }

on *:keydown:@IRC:37:{ ;Left | checkcontrols left }
on *:keydown:@IRC:38:{ ;Up | checkcontrols up }
on *:keydown:@IRC:39:{ ;Right | checkcontrols right }
on *:keydown:@IRC:40:{ ;Down | checkcontrols down }

on *:keyup:@IRC:37:{ uncheckcontrols left }
on *:keyup:@IRC:38:{ uncheckcontrols up } 
on *:keyup:@IRC:39:{ uncheckcontrols right }
on *:keyup:@IRC:40:{ uncheckcontrols down }

on *:keydown:@IRC:17:{ fire }

on *:keydown:@IRC:19:{ 
  if (%space_win || %space_inter) { return }
  elseif (!$timer(pause) && $timer(space) && !%space_start) { pause }
  elseif ($timer(pause) && %space_over != yes) { unpause }
}

alias -l fire {
  ;Ctrl (fire)
  if (%space_protect || %space_shot == $null || $timer(pause)) { return }
  var %_x = $calc($gettok($hget(space,player),1,32) + 14)
  var %_y = $calc($gettok($hget(space,player),2,32) - 14)
  if (!%space_wait && !$keyrpt) { 
    %space_wait = yes
    .timerspaceshotplayer -om 1 %space_shot unset $+(%,space_wait)
    hadd -m space $+(missles,$r(1000,9999)) %_x %_y missles.bmp 10 20 10 up 25 20 player 0.8 50
    inc %space_shots
    .splay -w $qt($scriptdirlaser.wav)
  }
}


;=========================================================== ALIASES

alias -l entfilter { var %math = $gettok($2,1,32) - $gettok($1,1,32) | return $calc(%math / $abs(%math)) }

alias -l sorttop {
  ;$1 = nick, $2 = score, $3 = percent
  if ($2 == 0 || $gettok($3,1,47) <= 0) { return }
  var %a = 1, %b, %c, %score = $2, %l, %hits = $3-

  var %adate = $adate
  var %left = $gettok($adate,1,47)
  var %middle = $gettok($adate,2,47)
  var %right = $gettok($adate,3,47)
  var %adate = $+(%left,/,%middle,/,$mid(%right,3))

  write $qt($scriptdirtop.txt) %score $mid($1,1,10) %adate %hits
  write -c $qt($scriptdirbefore.txt)
  filter -ca $qt($scriptdirtop.txt) $qt($scriptdirbefore.txt) entfilter
  .remove $qt($scriptdirtop.txt)
  .rename $qt($scriptdirbefore.txt) $qt($scriptdirtop.txt)
}

alias f1 {
  if (%space_start) { return }
  %space_top = $iif(%space_top == on,off,on)

  .splay -w $qt($scriptdirmenu.wav) 

  if (%space_top == on) {


    var %a = $gettok(%_display,1,32), %b = $gettok(%_display,2,32)

    drawrect -fms @IRC.buf 01 22 0 0 %a %b

    if (%_display == 800 600 || %_display == 1024 768) { drawcopy -ms @IRC.buf2 0 0 %_display @IRC.buf 0 0 %a %b }
    else { drawcopy -ms @IRC.buf2 0 0 %_display @IRC.buf 0 0 $calc(%a + 12) %b }

    drawtext -o @IRC.buf 00 "Unispace" 55 185 120 Top 10 Scores

    drawtext -o @IRC.buf 00 "Cousine" 20 122 200 $chr(35)
    drawtext -o @IRC.buf 00 "Cousine" 20 164 200 Player
    drawtext -o @IRC.buf 00 "Cousine" 20 308 200 Score
    drawtext -o @IRC.buf 00 "Cousine" 20 417 200 Date
    drawtext -o @IRC.buf 00 "Cousine" 20 539 200 Accuracy

    drawrect -f @IRC.buf 0 2 110 228 585 2

    .timerspace* off
    .timerpause -om 0 20 noop

    var %a = 1, %b, %top = 215, %found = 0, %new, %last, %gotit = 0, %date, %percent
    while ($read($qt($scriptdirtop.txt),%a)) {
      %b = $v1
      %date = $gettok(%b,3,32)
      %new = $gettok(%b,2,32) $gettok(%b,1,32) $gettok(%b,3-4,32)
      %last = $mid($gettok(%space_last,1,32),1,10) $remove($gettok(%b,1,32),$chr(44)) $gettok(%space_last,3-4,32)

      %percent = $gettok(%b,4-,32)

      if (%space_shots == $null) { %space_shots = 0 }
      if (%space_hits == $null) { %space_hits = 0 }

      if (%a <= 10) { 
        inc %top 23
        inc %found
        if (%new == %last) { inc %gotit }

        var %l = $gettok(%new,1,32), %r
        if ($len(%l) > 10) { %l = $mid(%l,1,10) }
        %r = $+(%l,$str($chr(160),$calc(10 - $len(%l))))


        var %l = $bytes($gettok(%new,2,32),b), %ra
        if ($len(%l) > 7) { %l = $mid(%l,1,7) }
        %ra = $+(%l,$str($chr(160),$calc(7 - $len(%l))))        


        drawtext -o @IRC.buf $iif(%new == %last && %gotit == 1,11,0) "Cousine" 17 $iif(%a == 10,110,121) %top %found $makespace %r $makespace %ra $makespace %date $makespace %percent
      }
      if (%a == 10) { break }
      inc %a
    }
    if (%found == 0) { drawtext @IRC.buf 0 "Cousine" 22 325 250 No scores yet! }
    dodrawcopy
  }
  else { 
    if (!%space_over) { update }
    else { drawpic -ms @IRC 0 0 $qt($scriptdirsave.bmp) }
  } 
}

alias -l makespace { return $str($chr(160),1) }

alias -l pause {
  if (%space_inter) { return }

  .splay -w $qt($scriptdirmenu.wav) 

  .timerspace* off
  .timerpause -om 0 20 noop
  drawtext -o @IRC.buf 00 "Unispace" 55 315 240 Paused
  dodrawcopy
}

alias -l unpause {
  if (%space_inter) { return }

  .splay -w $qt($scriptdirmenu.wav) 

  unset %space_wait

  .timerspace -om 0 20 update
  var %a = 0, %b, %p, %n
  while ($readini($qt($+($scriptdir,%space_level,.ini)),n,$+(wave,%space_wave),$+(n,%a))) {
    %n = $v1
    %b = $gettok(%n,1,32)
    %p = $gettok($hget(space,%b),12,32)
    if (%p) { $+(.timerspaceaddshot,%b) -om 0 %p addshot %b }
    inc %a
  }
  .timerpause off
}

alias -l hud {
  var %l = %space_health, %p
  if (%space_health > 0) {
    if ($len(%l) == 1) { %p = $+(00,%l) }
    elseif ($len(%l) == 2) { %p = $+(0,%l) }
    else { %p = %l }
  }
  else { %p = 000 }
  var %l = %space_points, %w
  if (%space_points > 0) {
    if ($len(%l) == 1) { %w = $+(000000,%l) }
    elseif ($len(%l) == 2) { %w = $+(00000,%l) }
    elseif ($len(%l) == 3) { %w = $+(0000,%l) }
    elseif ($len(%l) == 4) { %w = $+(000,%l) }
    elseif ($len(%l) == 5) { %w = $+(00,%l) }
    elseif ($len(%l) == 6) { %w = $+(0,%l) }
    else { %w = %l }
  }
  else { %w = 0000000 }
  var %l = %space_lives , %q
  if (%space_lives > 0) {
    if ($len(%l) == 1) { %q = $+(0,%l) }
    elseif ($len(%l) == 2) { %q = %l }
  }
  else { %q = 00 }

  var %hits, %shots
  if (%space_shots == $null) { %shots = 000 }
  elseif ($len(%space_shots) == 2) { %shots = $+(0,%space_shots) }
  elseif ($len(%space_shots) == 1) { %shots = $+(00,%space_shots) }
  else { %shots = %space_shots }

  if (%space_hits == $null) { %hits = 000 }
  elseif ($len(%space_hits) == 2) { %hits = $+(0,%space_hits) }
  elseif ($len(%space_hits) == 1) { %hits = $+(00,%space_hits) }
  else { %hits = %space_hits }

  var %_icons, %_text, %_rect

  if (%_display == 800 600) { var %_rect = 530 | var %_icons = 532 | var %_text = 536 }
  elseif (%_display == 1024 768) { var %_rect = 530 | var %_icons = 533 | var %_text = 537 }
  else { var %_rect = 527 | var %_icons = 532 | var %_text = 537 }

  drawrect -f @IRC.buf %space_hud 32 0 %_rect $window(@IRC.buf).w 700

  drawpic -tc @IRC.buf $rgb(127,89,125) 190 %_icons $qt($scriptdirhealth.bmp)
  drawpic -tc @IRC.buf $rgb(127,89,125) 262 %_icons $qt($scriptdirlives.bmp)
  drawpic -tc @IRC.buf $rgb(127,89,125) 319 %_icons $qt($scriptdirpoints.bmp)
  drawpic -tc @IRC.buf $rgb(127,89,125) 446 %_icons $qt($scriptdirpercent.bmp)

  ;Health
  drawtext @IRC.buf 0 "Cousine" 22 223 %_text $iif($hget(space,player),%p,000)
  ;Lives
  drawtext @IRC.buf 0 "Cousine" 22 290 %_text $iif(%q,$v1,00)
  ;Points
  drawtext @IRC.buf 0 "Cousine" 22 351 %_text $iif(%w,$v1,0000000)
  ;Accuracy
  drawtext @IRC.buf 0 "Cousine" 22 479 %_text %hits $+ / $+ %shots
  drawtext @IRC.buf 0 "Cousine" 22 573 %_text ( $+ $int($round($calc(%space_hits / %space_shots * 100),1)) $+ % $+ )
}

alias -l loadini {
  if ($hget(space,0).item == 1) { 
    inc %space_wave

    if (!$ini($qt($+($scriptdir,%space_level,.ini)),$+(wave,%space_wave))) {
      var %cur = $remove(%space_level,level)
      inc %cur
      %space_level = $+(level,%cur)
      %space_wave = 1
      if (!$isfile($qt($+($scriptdir,%space_level,.ini)))) { 
        %space_win = yes
        unset %space_level

        ;Tally Points
        var %t = %space_points
        if (%space_shots == $null) { var %space_shots = 000 }
        if (%space_hits == $null) { var %space_hits = 000 }
        if ($len(%space_hits) == 1) { %space_hits = $+(00,%space_hits) }
        elseif ($len(%space_hits) == 2) { %space_hits = $+(0,%space_hits) }
        if ($len(%space_shots) == 1) { %space_shots = $+(00,%space_shots) }
        elseif ($len(%space_shots) == 2) { %space_shots = $+(0,%space_shots) }
        var %h = %space_hits $+ / $+ %space_shots ( $+ $int($round($calc(%space_hits / %space_shots * 100),1)) $+ % $+ )
        unset %space_over
        %space_health = 0
        var %adate = $adate
        var %left = $gettok($adate,1,47)
        var %middle = $gettok($adate,2,47)
        var %right = $gettok($adate,3,47)
        var %adate = $+(%left,/,%middle,/,$mid(%right,3))
        %space_last = $mnick $bytes(%space_points,b) %adate %h
        sorttop $mnick %t %h

        halt
      }
      else {
        set -u3 %space_start $ctime
        set $+(-u,$readini($qt($+($scriptdir,%space_level,.ini)),settings,protect)) %space_protect yes
        loadsettings $qt($+($scriptdir,%space_level,.ini))
        inc %space_points %space_clear
        hadd -m space player 393 487 %space_image %space_health %space_w %space_h up %space_damage %space_speed player
      }
    }
    else { loadsettings $qt($+($scriptdir,%space_level,.ini)) }
    drawpic -c @IRC.buf2 0 0 %space_background
    .timerspaceaddshot* off
    var %a = 0, %b, %act, %shot
    hdel -w space missles*
    while ($readini($qt($+($scriptdir,%space_level,.ini)),$+(wave,%space_wave),$+(n,%a))) {
      %b = $v1
      %act = $gettok(%b,1,32)
      hadd -m space %b

      %shot = $gettok($hget(space,%act),12,32)
      $+(.timerspaceaddshot,%act) -om 0 %shot addshot %act
      inc %a
    }   
  }
}

alias -l loadsettings {
  var %a = $qt($+($scriptdir,$nopath($1)))
  if (!$isfile(%a)) { return }
  %space_speed = $readini(%a,settings,speed)

  ;%space_shot = $readini(%a,settings,shot)

  if (%_display == 800 600) { %space_shot = 400 }
  elseif (%_display == 1024 768) { %space_shot = 600 }
  else { %space_shot = 800 }

  %space_remainder = $readini(%a,settings,remainder)
  %space_w = $readini(%a,settings,width)
  %space_h = $readini(%a,settings,height)
  %space_damage = $readini(%a,settings,damage)
  %space_pershot = $readini(%a,settings,pershot)
  %space_misslespeed = $readini(%a,settings,misslespeed)

  %space_background = $qt($+($scriptdir,$readini(%a,settings,background)))

  %space_hud = $readini(%a,settings,hud)
  %space_clear = $readini(%a,settings,clear)
}

alias space {
  if ($hget(space)) { hfree space }
  hmake space 100
  unset %space_* %new_* %_dead %_damage %_owner %_owner2

  if ($isfile($qt($scriptdirsave.bmp))) { .remove $qt($scriptdirsave.bmp) }

  if (!%_display) { %_display = 800 600 }

  .timerspace* off
  hdel -w space player_new*
  hdel -w space missles*

  if ($window(@IRC) && $window(@IRC.buf)) { window -c @IRC | window -c @IRC.buf | window -c @IRC.buf2 } 

  var %_w = $gettok(%_display,1,32), %_h = $gettok(%_display,2,32)

  if (%_display == 800 600) { window -pdCw0k0ard +befl @IRC -1 -1 $calc(%_w - 12) %_h }
  elseif (%_display == 1024 768) { window -pdCw0k0ard +befl @IRC -1 -1 $calc(%_w - 12) $calc(%_h - 7) }
  else { window -pdCw0k0arB +fd @IRC -1 -1 %_w %_h }

  window -pdCw0k0h +befl @IRC.buf -1 -1 800 600
  window -pdCw0k0h +befl @IRC.buf2 -1 -1 %_display

  drawrect -fms @IRC 01 22 0 0 %_display

  %space_points = 0
  %space_wave = 1
  %space_level = level1
  %space_owned = player
  %space_image = player.bmp
  %space_health = $readini($qt($scriptdirlevel1.ini),settings,health)
  %space_lives = $readini($qt($scriptdirlevel1.ini),settings,lives)
  %space_big = ball.bmp square.bmp
  %space_shots = 0
  %space_hits = 0
  %space_background = $readini($qt($scriptdirlevel1.ini),settings,background)

  loadsettings $qt($scriptdirlevel1.ini)

  set $+(-u,$readini($qt($+($scriptdir,%space_level,.ini)),settings,protect)) %space_protect yes

  set -u2 %space_start $ctime

  hadd -m space player 393 487 %space_image %space_health %space_w %space_h up %space_damage %space_speed player 0 1000

  .timerspace -om 0 20 update
  .timerspaceaddshot* off

  var %a = 0, %b, %act, %shot
  hdel -w space missles*
  while ($readini($qt($+($scriptdir,%space_level,.ini)),$+(wave,%space_wave),$+(n,%a))) {
    %b = $v1
    %act = $gettok(%b,1,32)
    hadd -m space %b

    %shot = $gettok($hget(space,%act),12,32)
    $+(.timerspaceaddshot,%act) -om 0 %shot addshot %act
    inc %a
  }
  .timerpause off
  titlebar @IRC Invaders $sversion - by $sauthor $syear

  drawpic -c @IRC.buf2 0 0 %space_background
  .splay -p $qt($scriptdirintro.mp3)
  .splay -qp $qt($scriptdirbg.mp3)
}

alias -l draw {
  drawrect -f @IRC.buf2 01 22 0 0 800 600
  write -c $qt($scriptdirbg.txt)
  var %a = 1, %b, %c
  while (%a <= 1200) {
    drawrect -fe @IRC.buf2 $r(88,97) $r(1,3) $r(0,$window(@IRC).w) $r(0,$window(@IRC).h) 2 2
    inc %a
  }
}

alias -l explode {
  ;$1=x,$2=y,$3=w,$4=h
  if (!$4) { return }
  var %new_x = $1 - 20
  var %new_y = $2 - 20
  var %new_w = $3 + 40
  var %new_h = $4 + 40
  if (%new_x) { drawpic -tmsc @IRC.buf $rgb(127,89,125) %new_x %new_y %new_w %new_h $qt($scriptdirexplode.bmp) }
}

alias -l update {

  var %a = $gettok(%_display,1,32), %b = $gettok(%_display,2,32)

  if (%_display == $window(-1).w $window(-1).h) { drawcopy -ms @IRC.buf2 0 0 %_display @IRC.buf 0 0 $calc(%a + 12) %b }
  else { drawcopy -ms @IRC.buf2 0 0 %_display @IRC.buf 0 0 %a %b }

  if (!$hget(space,player)) { return }

  var %x = $gettok($hget(space,player),1,32), %y = $gettok($hget(space,player),2,32), %rest = $gettok($hget(space,player),3-,32)

  if ($istok(%space_angle,left,32)) { dec %x %space_speed }
  if ($istok(%space_angle,right,32)) { inc %x %space_speed }
  if ($istok(%space_angle,up,32)) { dec %y %space_speed }
  if ($istok(%space_angle,down,32)) { inc %y %space_speed }


  if (%_display != 800 600 && %_display != 1024 768) { var %_xy = 475 - 7 }
  else { var %_xy = 475 }

  if (%x < 11) { %x = 11 }
  if (%x > 735) { %x = 735 }
  if (%y < 8) { %y = 8 }
  if (%y > %_xy) { %y = %_xy }

  hadd -m space player %x %y %rest

  loadini 

  ;Projectiles
  projectiles

  ;Animate
  animate

  ;Draw Items
  var %a = 1, %o, %player1, %player2, %q, %__xx, %__yy, %__zimage, %__ww, %__hh, %health
  while ($hget(space,%a).item) {
    %o = $v1
    %q = $hget(space,%o)

    %__xx = $gettok(%q,1,32)
    %__yy = $gettok(%q,2,32)
    %__zimage = $gettok(%q,3,32)
    %health = $gettok(%q,4,32)
    %__ww = $gettok(%q,5,32)
    %__hh = $gettok(%q,6,32)

    %player1 = %o

    if ($istok(%_dead,%player1,32)) { explode %__xx %__yy %__ww %__hh }

    elseif ($istok(%_damage,%player1,32)) {
      var %rest = $remove($gettok(%__zimage,1,46),2)
      if (%player1 == player && %space_protect) { drawpic -tc @IRC.buf $rgb(127,89,125) %__xx %__yy $qt($scriptdirplayer3.bmp) }
      else { drawpic -tc @IRC.buf $rgb(127,89,125) %__xx %__yy $qt($scriptdir $+ %rest $+ $iif($right(%rest,1) == 3,.bmp,2.bmp)) }
    }
    else {
      if (%space_protect && %player1 == player) { var %img = player3.bmp }
      else { var %img = %__zimage }
      if (%__xx) { drawpic -tc @IRC.buf $rgb(127,89,125) %__xx %__yy $qt($scriptdir $+ %img) }
    }

    var %z = 1, %t, %j, %xxx, %yyy, %www, %hhh, %imagex

    while ($hget(space,%z).item) {

      %t = $v1
      %j = $hget(space,%t)
      %xxx = $gettok(%j,1,32)
      %yyy = $gettok(%j,2,32)
      %www = $gettok(%j,5,32)
      %hhh = $gettok(%j,6,32)
      %imagex = $gettok(%j,3,32)

      %player2 = %t
      if (%player1 != %player2) {

        var %p1.x = %__xx , %p1.y = %__yy , %p2.x = %xxx , %p2.y = %yyy , %p1.w = %__ww , %p1.h = %__hh, %p2.w = %www, %p2.h = %hhh
        var %g = $onpoly( 4,4, [ $replace(%p1.x %p1.y $calc(%p1.x + %p1.w) %p1.y $calc(%p1.x + %p1.w) $calc(%p1.y + %p1.h) %p1.x $calc(%p1.y + %p1.h),$chr(32),$chr(44)) ] , [ $replace(%p2.x %p2.y $calc(%p2.x + %p2.w) %p2.y $calc(%p2.x + %p2.w) $calc(%p2.y + %p2.h) %p2.x $calc(%p2.y + %p2.h),$chr(32),$chr(44)) ] )
        if (%g) {

          if ($istok(%_dead,%player2,32)) { explode %xxx %yyy %www %hhh }

          set %_damage $remove(%_damage,%player1,%player2) %player1 %player2

          if (missles* !iswm %player1 && missles* !iswm %player2) {
            if (new_player* iswm %player1 && player == %player2) {
              .timerspaceundamage -om 1 200 unset %_damage


              if (!%space_protect) {
                endplayer %player2 %player1
                set -u2 %_dead $remove(%_dead,%player1,%player2) %player1 %player2
                $+(.timerspaceaddshot,%player1) off
                $+(.timerspacedelete,%player1) -om 1 200 hdel -m space %player1
              }


              if (%player1 != player && %player2 != player) { %a = 0 }
              break
            }
            elseif (new_player* iswm %player2 && player == %player1) {
              .timerspaceundamage -om 1 200 unset %_damage


              if (!%space_protect) {
                endplayer %player1 %player2
                set -u2 %_dead $remove(%_dead,%player1,%player2) %player1 %player2
                $+(.timerspaceaddshot,%player2) off
                $+(.timerspacedelete,%player2) -om 1 200 hdel -m space %player2
              }


              if (%player1 != player && %player2 != player) { %a = 0 }
              break
            }
          }
          elseif (missles* iswm %player1 && missles* iswm %player2) {
            var %owner1 = $hget(space,%player1),10,32), %owner2 = $hget(space,%player2),10,32)
            if (%owner1 == player || %owner2 == player) { inc %space_hits }
            if (missles* iswm $1) { hdel -m space $1 }
            if (missles* iswm $2) { hdel -m space $2 }
          }
          .timerspaceundamage -om 1 200 unset %_damage
          deducthealth %player1 %player2
          if (%player1 != player && %player2 != player) { %a = 0 }
          break
        }
      }
      inc %z
    }
    inc %a
  }

  hud

  if (%space_win) {
    .timerspace* off
    .timerpause off
    drawcopy -ms @IRC.buf2 0 0 %_display @IRC.buf 0 0 %_display
    drawtext -o @IRC.buf 00 "Unispace" 55 270 60 You Win!
    drawtext -o @IRC.buf 00 "Cousine" 16 190 140 Well you fought your way through hell to
    drawtext -o @IRC.buf 00 "Cousine" 16 190 160 get here, now you beat the game! entropy
    drawtext -o @IRC.buf 00 "Cousine" 16 190 180 salutes you, $+($mnick,!)
    drawpic -tc @IRC.buf $rgb(127,89,125) 285 220 $qt($scriptdirtrophy.bmp)
    dodrawcopy
    return
  }
  elseif ($timer(pause) && !%space_over) { 
    drawtext -o @IRC.buf 00 "Unispace" 55 315 240 Paused
  }  
  elseif (%space_start) { 
    drawtext -o @IRC.buf 00 "Unispace" 55 310 240 level
    drawtext -o @IRC.buf %space_hud "Unispace" 55 490 240 $mid(%space_level,6,32)
    drawtext @IRC.buf 00 "Cousine" 25 356 300 Ready? Go!
    unset %_dead
  }
  ;Copy
  dodrawcopy
}

alias -l deducthealth {
  var %a = $hget(space,player)

  ;If player, and protection, return...
  if ($1 == player && %space_protect) || ($2 == player && %space_protect) { return }

  ;If both are enemies...
  if (new_player* iswm $1 && new_player* iswm $2) { return }

  ;If enemy is $1, and missle is $2, and enemy is owner of missle...
  ;if (new_player* iswm $1 && missles* iswm $2 && new_player* iswm $gettok($hget(space,$2),10,32)) { return }

  ;If enemy is $2, and missle is $1, and enemy is owner of missle...
  ;if (new_player* iswm $2 && missles* iswm $1 && new_player* iswm $gettok($hget(space,$1),10,32)) { return }

  ;If $1 is a missle, and owner is not player...
  if (missles* iswm $1 && $gettok($hget(space,$1),10,32) != player) { %_owner = $gettok($hget(space,$gettok($hget(space,$1),10,32)),8,32) }

  ;If $2 is a missle, and owner is not player...
  if (missles* iswm $2 && $gettok($hget(space,$2),10,32) != player) { %_owner2 = $gettok($hget(space,$gettok($hget(space,$2),10,32)),8,32) }

  ;If $1 is missle, and no owner?
  var %owned = $gettok($hget(space,$1),10,32)
  if (missles* iswm $1 && !$hget(space,%owned)) { hdel -m space $1 | return }

  ;If $2 is missle, and no owner?
  var %owned = $gettok($hget(space,$2),10,32)
  if (missles* iswm $2 && !$hget(space,%owned)) { hdel -m space $2 | return }

  object $1
  object $2
}

alias -l dodrawcopy {
  if (%_display == 800 600) { var %di_x = $gettok(%_display,1,32) | var %di_y = $gettok(%_display,2,32) }
  elseif (%_display == 1024 768) { var %di_x = $calc($gettok(%_display,1,32) + 2) | var %di_y = $calc($gettok(%_display,2,32) + 2) }
  else { var %di_x = $calc($gettok(%_display,1,32) + 18) | var %di_y = $calc($gettok(%_display,2,32) + 16) }
  drawcopy -ms @IRC.buf 0 0 800 600 @IRC 0 0 %di_x %di_y
}

alias -l object {
  if (!$1) { return }
  var %p = 1, %j, %r, %_x, %_y, %_w, %_h, %_health, %a, %_dmg, %_angle, %_owned, %_speed, %_move, %_shoot, %_points
  var %q = $1, %b = $2

  tokenize 32 $hget(space,%q)

  var %_x = $1
  var %_y = $2
  var %_i = $3
  var %_health = $4
  var %_w = $5
  var %_h = $6
  var %_angle = $7
  var %_initdmg = $8
  var %_speed = $9
  var %_owned = $10
  var %_move = $11
  var %_shoot = $12
  var %_points = $13


  if (new_player* iswm %q) { var %_dmg = %space_damage }
  elseif (%q == player && %_owner) { var %_dmg = %_owner | unset %_owner }
  elseif (%q == player && %_owner2) { var %_dmg = %_owner2 | unset %_owner2 }
  else { var %_dmg = $gettok($hget(space,%_owned),8,32) }

  if (%q == player) { dec %space_health %_dmg }

  dec %_health %_dmg

  if (%_health <= 0) {

    set -u2 %_dead $remove(%_dead,%q) %q

    if (player == %q) { endplayer %q }
    elseif (player == %_owned && missles* iswm %q) { 
      inc %space_points %space_pershot
      inc %space_hits
      checkhdel %q
    }
    elseif (new_player* iswm %q) {
      inc %space_points $13
      .splay -m $qt($scriptdirexplode.mid)
      $+(.timercheckhdel,%q) -om 1 100 checkhdel %q
      $+(.timerspaceaddshot,%q) off
    }
    else { checkhdel %q }
  }
  else {
    if (player == %_owned && missles* iswm %q) { inc %space_hits }
    hadd -m space %q %_x %_y %_i %_health %_w %_h %_angle %_initdmg %_speed %_owned %_move %_shoot %_points
  }
}

alias -l checkhdel { if ($hget(space)) { hdel -m space $1- } }



alias -l endplayer {
  var %q = $1, %r = $2
  if (!$1) { return }
  if (%q == player) {

    dec %space_lives 1

    if (%space_lives <= 0) {

      set -u2 %space_inter yes

      .timerspace off

      var %-p = $hget(space,player)
      var %-x = $gettok(%-p,1,32)
      var %-y = $gettok(%-p,2,32)
      var %-w = $gettok(%-p,5,32)
      var %-h = $gettok(%-p,6,32)

      explode %-x %-y %-w %-h


      ;Tally Points
      var %t = %space_points
      if (%space_shots == $null) { var %space_shots = 000 }
      if (%space_hits == $null) { var %space_hits = 000 }
      if ($len(%space_hits) == 1) { %space_hits = $+(00,%space_hits) }
      elseif ($len(%space_hits) == 2) { %space_hits = $+(0,%space_hits) }
      if ($len(%space_shots) == 1) { %space_shots = $+(00,%space_shots) }
      elseif ($len(%space_shots) == 2) { %space_shots = $+(0,%space_shots) }
      var %h = %space_hits $+ / $+ %space_shots ( $+ $int($round($calc(%space_hits / %space_shots * 100),1)) $+ % $+ )
      %space_points = %t
      %space_over = yes
      %space_health = 0
      var %adate = $adate
      var %left = $gettok($adate,1,47)
      var %middle = $gettok($adate,2,47)
      var %right = $gettok($adate,3,47)
      var %adate = $+(%left,/,%middle,/,$mid(%right,3))
      %space_last = $mnick $bytes(%space_points,b) %adate %h
      .timersorttop -om 1 50 sorttop $mnick %t %h


      drawtext -o @IRC.buf 00 "Unispace" 55 260 240 Game Over
      .timerdrawsave -om 1 100 drawsave -b32 @IRC $qt($scriptdirsave.bmp)

      unset %new_*

      .splay stop
      .splay -m $qt($scriptdirexplode.mid)

      .timerspaceaddshot* off
      .timerspacetopscores -o 1 2 f1
    }
    else {

      .splay -m $qt($scriptdirexplode.mid)

      set -u2 %space_inter yes

      %space_health = %space_remainder
      var %-p = $hget(space,player)
      var %-x = $gettok(%-p,1,32)
      var %-y = $gettok(%-p,2,32)
      var %-w = $gettok(%-p,5,32)
      var %-h = $gettok(%-p,6,32)

      explode %-x %-y %-w %-h

      if ($2) {
        var %-p = $hget(space,$2)
        hdel -m space $2
        var %-x = $gettok(%-p,1,32)
        var %-y = $gettok(%-p,2,32)
        var %-w = $gettok(%-p,5,32)
        var %-h = $gettok(%-p,6,32)

        if (%-p) { explode %-x %-y %-w %-h }
      }

      hdel -m space player

      .timerspaceundeadx -o 1 1 hadd -m space player 393 487 %space_image %space_health %space_w %space_h up %space_damage %space_speed player 0 100

      set -u2 %space_start $ctime
      unset %space_angle
      set $+(-u,$readini($qt($+($scriptdir,%space_level,.ini)),settings,protect)) %space_protect yes
    }
  }
}

alias -l stats {
  var %a = $hget(space,$1)
  if (!%a) { return }
  tokenize 32 %a
  if ($prop == x) { return $1 }
  elseif ($prop == y) { return $2 }
  elseif ($prop == image) { return $3 }
  elseif ($prop == health) { return $4 }
  elseif ($prop == w) { return $5 }
  elseif ($prop == h) { return $6 }
  elseif ($prop == angle) { return $7 }
  elseif ($prop == damage) { return $8 }
  elseif ($prop == speed) { return $9 }
  elseif ($prop == owner) { return $10 }
  elseif ($prop == movement) { return $11 }
  elseif ($prop == shot) { return $12 }
  elseif ($prop == points) { return $13 }
}


alias -l projectiles {

  var %_a = 1, %_b, %_c, %_d, %_health, %_speed, %_owned, %_points, %_desc, %_move, %_shoot, %_points, %found
  while ($hfind(space,missles*,%_a,w).item) {
    %_b = $v1
    %_c = $hget(space,%_b)

    tokenize 32 %_c

    %found = no

    var %_x = $1
    var %_y = $2
    var %_i = $3
    var %_health = $4
    var %_w = $5
    var %_h = $6
    var %_ang = $7
    var %_dmg = $8
    var %_speed = $9
    var %_owned = $10
    var %_move = $11
    var %_shoot = $12
    var %_points = $13

    if (%_ang == up) { dec %_y %space_misslespeed }
    if (%_ang == down) { inc %_y %space_misslespeed }

    if (%_y < 0 || %_y > 600) { %found = yes }
    if (%_x < 0 || %_x > 800) { %found = yes }

    if (%found == yes) { hdel -m space %_b | %_a = 0 }

    else {
      if ($istok(%space_big,%_i,32)) { var %img = missles3.bmp | %_w = 50 | %_h = 31 | dec %_x 20 | inc %_y 30 }
      else { var %img = $iif(%_ang == down,missles2.bmp,missles.bmp) }
      hadd -m space %_b %_x %_y %_i 10 %_w %_h %_ang %_dmg %_speed %_owned %_move %_shoot %_points
    }
    inc %_a
  }
}

alias -l addshot {
  ;$1 = shooting entity

  if ($hfind(space,missles*,0,w).item >= 3) { return }  

  var %n = $1

  tokenize 32 $hget(space,$1)
  var %x = $1
  var %y = $2
  var %i = $3
  var %health = $4
  var %w = $5
  var %h = $6
  var %a = $7
  var %dmg = $8

  var %sp = $9

  var %move = $11
  var %shoot = $12
  var %points = $13
  var %xx = $calc(%x + (%w / 2 - 10))

  var %yy = $calc(%y + %h)
  var %r = $r(1000,9999)

  if (%yy <= 0 || %yy >= 550) { return }

  .splay -w $qt($scriptdirlaser.wav)
  if ($rand(0,1)) {
    if ($istok(%space_big,%i,32)) { dec %xx 20 | hadd -m space $+(missles,%r) %xx %yy missles3.bmp 10 48 20 down %dmg 0.8 %n %move %shoot %points }
    else { hadd -m space $+(missles,%r) %xx %yy missles2.bmp 10 20 10 down %dmg 0.8 %n %move %shoot %points }
  }
}

alias -l animate {
  var %a = 1, %b, %c, %x, %y, %w, %h, %i, %d, %an, %p, %health, %dmg, %sp, %owned, %move, %shoot, %points
  while ($hfind(space,new_player*,%a,w).item) {
    %b = $v1
    %c = $hget(space,%b)

    var %t = %c
    tokenize 32 %t
    %x = $1
    %y = $2
    %i = $3
    %health = $4
    %w = $5
    %h = $6
    %an = $7
    %dmg = $8
    %sp = $9
    %owned = $10
    %move = $11
    %shoot = $12
    %points = $13

    if (%move != 2) { hadd -m space %b %x $iif(%y < 600,$calc(%y + $9),-100) %i %health %w %h %an %dmg %sp %owned %move %shoot %points }
    else { hadd -m space %b %x %y %i %health %w %h %an %dmg %sp %owned %move %shoot %points }
    if (%move == 1) { backnforth %b }
    inc %a
  }
}


alias -l backnforth {
  ;$1 = item
  var %n = $1
  var %a = 1, %b, %c, %d, %x, %y, %w, %h, %i, %d, %an, %p, %health, %sp, %owned, %dmg, %org, %move, %shoot, %points
  %c = $hget(space,%n)
  tokenize 32 %c
  %x = $1
  %y = $2
  %i = $3
  %health = $4
  %w = $5
  %h = $6
  %an = $7
  %dmg = $8
  %sp = $9
  %owned = $10
  %move = $11
  %shoot = $12
  %points = $13

  var %right = $calc(780 - %w)
  if (!$eval($+(%,%n,_x),3)) { set $+(%,%n,_angle) $gettok(left right,$r(1,2),32) }

  elseif ($eval($+(%,%n,_x),3) < 0) { inc %x = 5 | set $+(%,%n,_angle) right }
  elseif ($eval($+(%,%n,_x),3) > %right) { dec %x 5 | set $+(%,%n,_angle) left }

  if ($eval($+(%,%n,_angle),3) == left) { dec %x %sp | set $+(%,%n,_x) %x }
  if ($eval($+(%,%n,_angle),3) == right) { inc %x %sp | set $+(%,%n,_x) %x }
  hadd -m space %n %x %y %i %health %w %h %an %dmg %sp %owned %move %shoot %points
}