-+-+-+-+-+-+-+-+ START OF PART 10 -+-+-+-+-+-+-+-+
X     hit=((3-d)+s(t(i)::ship)::slaser)/2+((3-d)+s(t(i)::ship)::slaser)*rnd/2
X     damage=0\hit=hit-pr::dodge
X     if hit>2.4 then
X        damage=int(10*s(t(i)::ship)::slaser*rnd+s(t(i)::ship)::slaser*3)
X     end if
X3369 for ii=1 to noship
X       if t(ii)::spos=pr::rpos and t(ii)::ship=22 then
X          damage=damage*(.66)
X       end if
X     next ii
X     if damage=0 then
X        a$="The laser beam skims past your ship, missing by a narrow margin"
X      else
X        if damage<10 then
X          a$="You feel your ship shudder as it takes relatively minor damage
V."
X        end if
X      end if
X     if damage<20 and damage>9 then
X        a$="MAJOR LASER BURN! Your ship shakes wildly prior to stabilizing."
X     end if
X     if damage>19 then
X        a$="DIRECT HIT! You black out momentarily as your ship spins madly."
X     end if
X     call display(23,a$)
X     if damage>25 and rnd>.9 then
X       gosub 4400`20
X       pr::energy = pr::energy - int(0.7 * damange)
X     else
X       pr::energy=pr::energy - damage
X     end if
X     gosub 1700 ! display status
X     gosub damage_report ! damage report
X     if pr::energy<0 then goto 8000 end if
X     return
X`20
X3380 ! -------------------- Police Boarding --------------------
X     t(i)::sintent=0\t(i)::spos=pr::rpos
X     a$="The Viper docks and two galpol toughs board your ship."
X     call display(23,a$)
X     if pr::cargo(2)<>0 then`20
X       a$="They confiscate all your slaves and lecture you on the evils of "
X       call display(23,a$)
X       a$="selling sentient beings."
X       call display(23,a$)
X     end if
X     if pr::cargo(7)<>0 then
X`09 a$="An electronic 'sniffer' tracks down your cargo of narcotics " &
X`09`09+"which the two"
X         call display(23,a$)
X`09 a$= "galpol agents proceed to destroy."
X         call display(23,a$)
X     end if
X     if pr::cargo(2)=0 and pr::cargo(7)=0 then
X`09a$="Well, we haven't caught you red handed but we know of your " &
X`09`09+"illicit dealing."
X        call display(23,a$)
X`09a$="You'll be fined accordingly."
X        call display(23,a$)
X     end if
X     a=0
X     if pr::debt>0 and pr::due<pr::moves then
X`09a$= "You are fined "+str$(pr::debt*2)+" for an overdue loan."
X        call display(23,a$)
X`09a=pr::debt*2
X`09pr::debt=0
X     end if
X     a=a+int(pr::cargo(2)*80+pr::cargo(7)*190*(rnd+0.5))
X     if (a<>0) then
X       a$="You are fined - "+str$(a)+" credits."
X     else
X       a$="No fine this time.  Next time we won't be so nice to you, SCUM."
X     end if
X     call display(23,a$)
X     pr::totcargo=pr::totcargo-pr::cargo(2)-pr::cargo(7)
X     pr::cargo(2)=0\pr::cargo(7)=0
X     pr::credits=pr::credits-a
X     if pr::legal=2 then pr::legal=1 end if
X     gosub 1700
X     return
X`20
X3390 ! --------------------- police warning -----------------------
X     m$="Surrender your cargo immediately and consider yourself under arrest
V."
X     m$=m$+"@Please accept or refuse boarding.  Reply IMMEDIATELY or risk "
V &
X`09+"attack"
X     sender$=t(i)::username\u$=pr::username\save=i\gosub send_message\i=save
X     if t(i)::sintent=12 then
X        if rnd>.5 then`20
X           t(i)::sintent=2
X`09   if rnd>.8 then
X             pr::legal=3`20
X`09   end if
X        end if
X     end if
X     if t(i)::sintent=1 then t(i)::sintent=12 end if
X     return
X`20
X3420 ! ------------------------- run away ---------------------------
X     if t(i)::spos>pr::rpos then`20
X`09t(i)::spos=t(i)::spos+1`20
X     else`20
X`09t(i)::spos=t(i)::spos-1
X     end if
X     if abs(t(i)::spos-pr::rpos)<3 then gosub attack_player end if
X     return
X
X3440 ! ---------------------- enemy missile fire ---------------------
X     if t(i)::smissile > 0 then t(i)::smissile = t(i)::smissile -1 end if`20
X     a$="INCOMING MISSILE detected from "+edit$(s(t(i)::ship)::sname,128%)+
V &
X        " ("+t(i)::username+")  Range: "+str$(d*2000)+"km"
X     call display(23,a$)
X     condition$="RED"\call display(16,condition$)
X     !   firer of missile now goes back to regular attack
X     if t(i)::player=0 then t(i)::sintent=2 end if
X     l1 = next_ship
X     if (l1 > noship) then noship=noship+1 end if
X     t(l1)::ship=14
X     t(l1)::spos=t(i)::spos
X     t(l1)::senergy=s(t(l1)::ship)::menergy
X     t(l1)::sintent=11
X     t(l1)::others(1)=pr::shipnum
X     t(l1)::others(2)=i
X     t(l1)::player=0
X     t(l1)::username=left$(t(i)::username,3)+"M"
X     t(l1)::special=0
X     return
X`20
X3480 ! ------------------- Update Missiles --------------------------
X     if ecm_status%=1 and rnd>.4 then
X       a$= "ECM frequency lock on achieved - Missile DESTROYED."
X       call display(23,a$)
X       t(i)::ship=-1
X       t(i)::sintent=-1
X     end if
X     if abs(t(i)::spos-t(t(i)::others(1))::spos)<1 then
X        t(i)::spos=t(t(i)::others(1))::spos
X     end if
X     if t(i)::spos>t(t(i)::others(1))::spos then
X        t(i)::spos=t(i)::spos-1
X     else
X        if t(i)::spos<t(t(i)::others(1))::spos then
X          t(i)::spos=t(i)::spos+1
X`09end if
X     end if
X     if t(i)::spos=0 then
X        t(i)::ship=-1
X        t(i)::sintent=-1
X        if abs(t(i)::spos-pr::rpos)<pr::scanrange then
X           a$="The missile burns up in the atmosphere."
X           call display(23,a$)
X        end if
X     end if
X     update #3%
X     gosub 3650                 ! check for missile hit
X     ! need to have a current record
X     get #3%, key #0 eq name$(pr::planet), wait 60
X     return
X
X3500 ! ------------------------- Laser Fire -----------------------------
X     if action_cmd$(move_count)="r" then`20
X`09a=pr::equip(2)+pr::equip(10)+2*pr::equip(4)+3*pr::equip(6)\d$="rear"
X     end if
X     if action_cmd$(move_count)="f" then`20
X`09a=pr::equip(1)+2*pr::equip(3)+3*pr::equip(5)+4*pr::equip(14) + &
X`09+5*pr::equip(17)\d$="front"
X     end if
X     if a=0 then
X`09a$="You don't have a "+d$+" laser."
X        call display(23,a$)
X`09action_combat=action_combat-1
X`09return`20
X     end if
X     for i=1 to maxships\exist(i)=0\next i
X     for i=1 to noship
X       if t(i)::ship=-1 or t(i)::username=pr::username then
X         iterate
X       end if
X       d=abs(t(i)::spos-pr::rpos)
X       e=sgn((pr::rpos-t(i)::spos)*pr::direction)
X       b$=edit$(s(t(i)::ship)::sname,128%)
X       exist(i)=0
X       if d<pr::scanrange and action_cmd$(move_count)="f" and (e=0 or e=1) t
Vhen
X`09  exist(i)=1`20
X       end if
X       if d<pr::scanrange and action_cmd$(move_count)="r" and (e=0 or e=-1)
V &
X`09  then exist(i)=1
X       end if
X     next i
X
X3540 d$="Number of target ship> "\call display(1,d$)\b=val(d$)
X     if b=0 then`20
X`09a$="Laser firing aborted."
X        call display(23,a$)
X`09action_combat=action_combat-1
X`09return`20
X     end if
X     if b<0 or b>noship or b<>int(b) then goto 3540 end if
X     if (exist(b)=0 and b<>0) or (t(b)::player=2) then`20
X`09call display(33,"That object is not in laser range.")
X`09goto 3540`20
X     end if
X     if t(b)::ship=22 then
X       call display(33,"Can't target a sand cloud.")
X       goto 3540
X     end if
X     if t(b)::ship>10 and t(b)::ship<14 and t(b)::player=0 then`20
X`09pr::legal=5
X     end if
X     if (t(b)::ship=2 or t(b)::ship=3) and rnd>.7 and t(b)::player=0 then
X       get #3%, key #0 eq name$(pr::planet), wait 60
X       t(b)::sintent=6
X       t(b)::others(2)=t(b)::others(1)
X       t(b)::others(1)=pr::shipnum
X       update #3%\free #3%
X     end if
X3545 b$=edit$(s(t(b)::ship)::sname,128%)
X     if pr::legal=5 then goto 3547 end if
X     if t(b)::ship=1 then
X       pr::legal = 4
X       t(pr::shipnum)::others(2)=t(pr::shipnum)::others(1)
X       t(pr::shipnum)::others(1)=b
X       t(pr::shipnum)::sintent=2
X     end if
X 3546 if (t(b)::ship<>10 and t(b)::ship<>14 and (t(b)::sintent<>2 and &
X       `09  t(b)::sintent<>3 and t(b)::sintent<>18 and &
X          t(b)::sintent<>6 and t(b)::sintent<>9 and t(b)::sintent<-1))&
X`09`09 and t(b)::player=0 then
X       pr::legal=4-(t(b)::ship>10)
X       t(pr::shipnum)::others(2)=t(pr::shipnum)::others(1)
X       t(pr::shipnum)::others(1)=b
X       t(pr::shipnum)::sintent=2
X     end if
X3547 d=abs(t(b)::spos-pr::rpos)
X     pr::energy=pr::energy-a
X     get #3%, key #0% eq name$(pr::planet), wait 60
X     t(pr::shipnum)::senergy=t(pr::shipnum)::senergy-a
X     update #3%\free #3%
X     if pr::energy<0 then
X       a$= "Your laser drained your last energy units, shutting off LIFE " &
X`09+"SUPPORT..."
X       call display(23,a$)
X       goto 8000
X     end if
X3548 if t(b)::ship<>10 and t(b)::sintent<>9 and t(b)::sintent<>6 and &
X`09t(b)::player=0 then
X       get #3%, key #0% eq name$(pr::planet), wait 60
X       t(b)::others(2)=t(b)::others(1)
X       t(b)::others(1)=pr::shipnum\t(b)::sintent=2\update #3%\free #3%
X     end if
X3549 if (a=1 and pr::equip(10)=1 and t(b)::ship=10 and action_cmd$(move_coun
Vt) &
X`09`09="r") then
X        a$="You fire the mining laser at the asteroid."
X        call display(23,a$)
X`09mine=1
X`09goto 3554
X     end if
X     select a
X`09case 1
X          a$="You send a stream of energy pulses at the "+b$+"."
X  `09case 2
X          a$="You fire a continuous high energy beam at the "+b$+"."
X  `09case 3
X          a$="You blast the "+b$+" with a precision focused energy beam."
X`09case 4
X          a$="You loose an ultra-coherent beam of UV radiation at the "+b$+"
V."
X        case 5
X          a$="Stimulated emission ultra high Q X-rays blast the "+b$+"."
X     end select
X     call display(23,a$)
X     if t(b)::spos <=0 and pt::trade<>9 and pt::trade<>10 then
X        a$= "Your laser beam disperses harmlessly in the atmosphere."
X        call display(23,a$)
X        mine=0
X        return
X     end if
X3554 hit=((3.3-d)+a)/2+((3.3-d)*rnd/2)
X     if hit>2.2 then
X`09if a>3 then a=a+1 end if
X        damage=int((15*a)*rnd+a*6-(a>3)*15) else damage=0
X     end if
X     for ii=1 to noship
X        if t(ii)::spos=pr::rpos and t(ii)::ship=22 then
X          damage = int(damage*.66)
X        end if
X     next ii
X     if t(b)::player=1 then
X        m$="%%la"+t(b)::username+str$(damage)+"."
X        u$=t(b)::username
X        gosub 5000
X     end if
X3555 if damage=0 then
X        a$="Your laser narrowly misses the "+b$+"."
X        call display(23,a$)
X`09mine=0
X`09return
X     end if
X3556 tar=b              ! use missile hit routine
X3558 if mine=1 then
X        get #3%, key #0% eq name$(pr::planet), wait 60
X        t(b)::ship=-1
X        t(b)::senergy=-1
X        update #3%\free #3%
X        b=int(15*rnd+5)\c=4
X        if rnd>.98 then c=10 end if
X        if c=4 then`20
X`09  a$="The asteroid is reduced to "+str$(b)+" tons of minerals."
X          call display(23,a$)
X        else`20
X`09  a$= "You find "+str$(b)+" kilos of GOLD!"`20
X          call display(23,a$)
X`09end if
X        gosub 3935
X        return
X     end if
X3559 if t(b)::ship=10 then
X        a$="Your laser hits the asteroid and destroys it totally."
X        call display(23,a$)
X        get #3%, key #0% eq name$(pr::planet), wait 60
X        t(b)::ship=-1
X        t(b)::senergy=-1
X        update #3%\free #3%
X        return
X     end if
X3560 a$="You see a red flash on "+b$+"'s hull indicating you hit."
X     call display(23,a$)
X3562 gosub 3690
X3594 return
X`20
X3600 ! -------------------- Fire Missiles ------------------------
X3601 if pr::equip(13)=0 then`20
X`09call display(33,"You're out of missiles!")
X`09action_combat=action_combat-1
X`09return
X     end if
X3602 a$="Targeting computer engaged - Please select missile target"
X     call display(23,a$)
X3603 for i=1 to maxships\exist=0\next i
X3604 for i=1 to noship
X       if t(i)::ship=-1 or t(i)::username=pr::username then
X         iterate
X       end if
X       if abs(t(i)::spos-pr::rpos)<pr::scanrange then exist(i)=1 end if
X     next i
X3613 if pr::equip(15)=1 then gosub 4300\return
X
X3614 a$="Target ship> "\call display(1,a$)\a=val(a$)
X     if a=0 then`20
X`09a$="Firing aborted."
X        call display(23,a$)
X        action_combat=action_combat-1
X`09return
X     end if
X3615 if a<1 or a>noship or a<>int(a) then`20
X        call display(33,"Invalid target - re-enter")
X        goto 3614`20
X     end if
X     if exist(a)=0 or t(a)::player=2 then
X        call display(33,"Out of Range")
X`09goto 3614
X     end if
X     if t(a)::ship=22 then
X        a$= "Target Lock in Failure - Can't enable tracking system."
X         call display(23,a$)
X       goto 3614
X     end if
X3616 if (t(a)::ship=2 or t(a)::ship=3) and rnd>.7 and t(a)::player=0 then
X`09! change response to new attacking player
X        get #3%, key #0% eq name$(pr::planet), wait 60
X        t(a)::sintent=6\t(a)::others(2)=t(a)::others(1)
X        t(a)::others(1)=pr::shipnum\update #3%\free #3%
X     end if
X3617 if pr::legal<4 then
X       if (t(a)::ship<>10 and t(a)::ship<>14 and (t(a)::sintent=0 or &
X          t(a)::sintent=1 or t(a)::sintent=15 or t(a)::sintent=7 or &
X`09  t(a)::sintent=12 or t(a)::sintent=18 or &
X          t(a)::sintent=5 or t(a)::sintent=4)) and t(a)::player=0 then
X             pr::legal=4-(t(a)::ship>10)
X       end if
X     end if
X     pr::equip(13)=pr::equip(13)-1\if t(a)::ship>10 and t(a)::ship<14 &
X          and t(a)::player=0 then pr::legal=5 end if
X     if t(a)::sintent<>9 and t(a)::ship<>10 and t(a)::sintent<>6 and &
X`09  t(a)::player=0 then
X        get #3%, key #0% eq name$(pr::planet), wait 60
X        t(a)::sintent=2\t(a)::others(2)=t(a)::others(1)
X        t(a)::others(1)=pr::shipnum\update #3%\free #3%
X     end if
X     a$="Targetcom programmed - Xionite warhead armed   5 4 3 2 1 Ignition!"
X      call display(23,a$)
X     a$="The sleek Demon Mark II missile begins tracking the "+ &
X`09  edit$(s(t(a)::ship)::sname,128%)
X     call display(23,a$)
X     if t(a)::player=1 then
X        m$="%%mi"+t(a)::username+str$(noship)+"."
X        asave=a
X        gosub 5000
X        a=asave
X     end if
X3630 get #3%, key #0% eq name$(pr::planet), wait 60
X     l1 = next_ship
X     if (l1 > noship) then noship=noship+1 end if
X     t(l1)::ship=14\t(l1)::spos=pr::rpos\t(l1)::senergy=5
X     t(l1)::sintent=11\t(l1)::others(1)=a
X     t(l1)::others(2)=pr::shipnum\t(l1)::player=0
X     t(l1)::username=left$(pr::username,3)+"M"
X     update #3%\free #3%
X`20
X3650 ! --------------- check for missile hit -------------
X     i1=i
+-+-+-+-+-+-+-+-  END  OF PART 10 +-+-+-+-+-+-+-+-
