-+-+-+-+-+-+-+-+ START OF PART 12 -+-+-+-+-+-+-+-+
X       a$= "he would have you arrested if it wasn't for all the paperwork."
X       call display(23,a$)
X       goto 3975
X     end if
X     if pr::credits<1000 then
X       a$= "Your credit rating isn't good - thrown out."
X       call display(23,a$)
X       goto 3975
X     end if
X     a$="Energy recharged and Missiles replenished.  Service Fee: CR 1000"
X     call display(23,a$)
X     pr::energy=pr::maxenergy
X     get #3%, key #0% eq name$(pr::planet), wait 60
X     t(pr::shipnum)::senergy=pr::maxenergy
X     update #3%\free #3%
X     pr::equip(13)=pr::maxmissile
X     pr::credits=pr::credits-1000
X3975 a$="DEPARTURE SEQUENCE INITIATED - Successful release from starbase."
X     call display(23,a$)
X     return
X   `20
Xfound_equipment:
X     ! ----------------- Found a piece of equipment -----------------
X     a$= "You find a working "+edit$(e(b)::ename,128%)+"."
X     call display(23,a$)
X     a$="Do you want to install it? (Y/N)"\call display(1,a$)
X     if a$="n" then goto 3940 end if
X     if b=14 then      ! excimer=14 / x-ray=17
X       if s(pr::shiptype)::mlaser<4 then a$="Sorry, your "+ &
X`09  edit$(s(pr::shiptype)::sname,128%)+ &
X`09  " just doesn't have a strong enough mount."
X          call display(23,a$)
X          return
X       else
X         pr::equip(1)=0\pr::equip(3)=0\pr::equip(5)=0\pr::equip(17)=0
X       end if
X     end if
X     if b=17 then
X       if s(pr::shiptype)::mlaser<5 then a$="Sorry, your "+ &
X`09  edit$(s(pr::shiptype)::sname,128%)+ &
X`09  " just doesn't have a strong enough mount."
X          call display(23,a$)
X          return
X       else
X         pr::equip(1)=0\pr::equip(3)=0\pr::equip(5)=0\pr::equip(14)=0
X       end if
X     end if
X     if b=13 then pr::scanrange=5 end if
X     pr::equip(b)=1
X     a$= "You install the "+edit$(e(b)::ename,128%)+" in your ship."
X     call display(23,a$)
X     goto 3940
X
X4000 ! -------------------- Police Trap -----------------------------
X     if pt::law>6 and rnd>.8 and pr::moves>10 then gosub 4030 end if
X     if pr::legal=4 and rnd<.95 then return end if
X     if pr::legal=5 and rnd<.85 then return end if
X     a=int(10*rnd+8)
X     for i=noship+1 to noship+a
X        t(i)::ship=1
X        t(i)::senergy=s(1)::menergy
X`09t(i)::smissile=s(1)::mmissile
X        t(i)::spos=int(rnd*5+2)
X        t(i)::sintent=0
X        t(i)::username="GP"+str$(i)
X     next i
X     noship=noship+a
X     return
X`20
X4030 ! ---------------- Galactic Commando ships --------------------
X     b=int(20*rnd+5)
X     if rnd>.3 then`20
X       a=1`20
X     else`20
X       if rnd>.5 then`20
X         a=2`20
X       else`20
X         a=3`20
X       end if
X     end if
X     for i=1 to a
X       noship=noship+1
X       t(noship)::ship=18
X       t(noship)::senergy=s(18)::menergy
X       t(noship)::smissile=s(18)::mmissile
X       t(noship)::spos=b+int(5*rnd-2)
X       t(noship)::sintent=0
X       t(noship)::username="GC"+str$(noship)
X     next i
X     return
X
X sand_blaster:
X     ! ---------------------- Sand blaster ------------------------
X     if pr::equip(24)<>1 then
X        a$= "Not Mounted"
X        call display(23,a$)
X`09action_combat=action_combat-1
X        return
X     end if
X     a$= "Sand Discharge initiated:  Millions of tiny particles envelop"&
X`09+" your ship."
X     call display(23,a$)
X     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=22
X     t(l1)::senergy=s(22)::menergy
X     t(l1)::spos=pr::rpos
X     t(l1)::sintent=0
X     t(l1)::username=" -  "
X     update #3%\free #3%
X     return
X
Xdamage_report:
X     ! -------------------- damage report -----------------------
X     a=pr::energy/pr::maxenergy
X     dmg$="ENERGY FAILING"
X     if a>.2 then dmg$="ENERGY LOW." end if
X     if a>.4 then dmg$="Major energy loss." end if
X     if a>.7 then dmg$="Minor energy loss." end if
X     if a=1 then dmg$="Ship undamaged." end if
X     call display(14,dmg$)
X     return
X
X galactic_fleet:
X     ! -------------------- Galactic Fleet ----------------------
X     if pt::zone=4 or (pt::zone=2 and rnd>.2) then return end if
X     if rnd>.3 then return end if
X     fleetsize=int(pr::moves/10*rnd+1)\fleetpos=int(10*rnd+5)
X     if fleetsize>30 then fleetsize=30 end if
X     for i=11 to 10+fleetsize
X       noship=noship+1
X       if i<14 then t(noship)::ship=i else t(noship)::ship=int(3*rnd+11)
X       end if
X       t(noship)::spos=int(3*rnd-1)+fleetpos
X       shipno=noship\gosub 3100
X       t(noship)::senergy=s(t(noship)::ship)::menergy
X       t(noship)::smissile=s(t(noship)::ship)::mmissile
X       t(noship)::username="GF"+str$(noship)
X     next i
X     return
X`20
X4300 ! ------------------ multi-fire missile rack -------------------
X     simult=3`09`09! default firing is 3 missiles
X     if pr::equip(13)<3 then simult=pr::equip(13) end if
X     a$="You can fire up to "+str$(simult)+" missiles - Press return when do
Vne."
X     call display(23,a$)
X     for k=1 to simult
X       gosub 3614
X       if action_combat=0 and k<>1 then`20
X         action_combat= 1
X         return`20
X       end if
X     next k
X     return
X`20
X4400 ! -------------------- Equipment Destroyed ---------------------
X     a=int(ntequip*rnd+1)
X     if pr::equip(a)=1 then
X       a$= edit$(e(a)::ename,128%)+" DESTROYED!"
X       call display(23,a$)
X       pr::equip(a)=0
X       select a
X`09case 8
X`09  pr::maxcargo=s(pr::shiptype)::mcargo
X          if pr::totcargo>pr::maxcargo then`20
X`09    pr::totcargo=0
X`09    for j=1 to 10
X`09      pr::cargo(j)=int(pr::cargo(j)/3)
X              pr::totcargo=pr::totcargo+pr::cargo(j)
X            next j
X            a$="Some of your cargo has been lost into space."
X            call display(23,a$)
X`09    return
X          end if
X`09case 11
X          pr::maxenergy=s(pr::shiptype)::menergy
X          if pr::energy>pr::maxenergy then`20
X            pr::energy=pr::maxenergy
X            a$="Some of your energy has been lost."
X            call display(23,a$)
X          end if
X`09case 12
X          pr::maxmissile=s(pr::shiptype)::mmissile
X          if pr::equip(13)>pr::maxmissile then`20
X            pr::equip(13)=pr::maxmissile
X            a$="Some of your missiles were destroyed."
X            call display(23,a$)
X          end if
X`09case 16
X`09  pr::scanrange=2
X      end select
X     end if
X     return
X`20
X4500 ! ---------------------- war zone ------------------------------
X     fighters=int(pr::moves/8*rnd+4)+int(5*rnd)\fightpos=int(5*rnd+5)
X     if fighters>40 then fighters=40 end if
X     for i=1 to fighters
X       noship=noship+1
X       t(noship)::spos=int(3*rnd-1)+fightpos
X       shipno=noship\gosub 3100
X       if rnd>.5 then t(noship)::ship=4 else t(noship)::ship=7
X       end if
X       t(noship)::senergy=s(t(noship)::ship)::menergy
X       t(noship)::smissile=s(t(noship)::ship)::mmissile
X       t(noship)::username="S"+str$(noship)+str$(int(10*rnd))
X     next i
X     return
X`20
X4800 ! -------------------- Zone messages --------------------------
X     if pr::legal<=2 then
X       select pt::zone
X`09 case 1
X`09   m$="WARNING! You are in a War Zone - Proceed at your own risk."
X`09   sender$="GPHQ"\u$=pr::username\gosub send_message
X     `09 case 3
X`09   m$="ATTENTION: This world is unclassified - proceed with caution."
X`09   sender$="GPHQ"\u$=pr::username\gosub send_message
X`09 case 4
X           m$="ALERT! Your trading permit is not recognized here - LEAVE AT"
V &
X`09`09+" ONCE."
X           sender$="GPHQ"\u$=pr::username\gosub send_message
X        end select
X     end if
X     return
X
X4900 ! -----------------  messages for thargoids ------------------
X     if pr::legal<=2 then
X       pr::thargoid=int(pr::moves/10)
X       sender$="GPHQ"\u$=pr::username\m$=""
X       select pr::moves
X`09 case 10
X           m$="WARNING: Increased Thargoid presence reported in your area."
X`09 case 20
X           m$="ALERT: Thargoid raids believed probable in your area."
X`09 case 30
X           m$="EMERGENCY WARNING! Thargoid invasion of this world expected."
X`09 case 40
X           m$="CONDITION RED! Thargoid invasion zone. Seek shelter."
X`09 case 50
X           m$="FINAL MESSAGE!  Local Thargoid presence has forced temporary"
V&
X            +"@surrender of Gal Pol forces - The situation is out of control
V."
X     `09end select
X        if m$<>"" then gosub send_message end if
X     end if
X     return
X`20
X5000 ! -----------Send to nearby player ships m$ -------------------
X     when error in
X       for i=1 to noship
X         if t(i)::player=1 and abs(t(i)::spos-pr::rpos)<pr::scanrange then
X           find #2%, key #0% eq t(i)::username, wait 60\free #2%
X           sender$=pr::username
X           u$=t(i)::username
X           gosub send_message
X         end if
X       next i
X     use
X       call display(23, "The 'ghost' disappears from your scanner.")
X       free #2%
X       get #3%, key #0% eq name$(pr::planet), wait 60
X       t(i)::ship=-1\t(i)::sintent=-1
X       update #3%\free #3%
X       continue
X     end when
X     return
X`20
X5100 ! ----------------- Save current game state -------------------
X     when error in
X       a$= "Entering suspended animation..."
X       call display(23,a$)
X       free #1%\free #2%\free #3%
X       pr::message = ""
X       op = pr
X       a$="gal_disk:gal-saves2.dat"
X       open a$ as file #4%, organization indexed fixed, &
X           allow modify, access modify, primary key op::username, &
X           map playermap
X       put #4%
X       close #4%
X       m$=pr::username+ " has entered suspended animation."
X       sender$="GPHQ"\chan=0\gosub broadcast_message
X       free #1%\free #2%\free #3%
X       oldplanet=pr::planet\gosub delete_player_from_action
X       find #2%, key #0% eq pr::username, wait 60%
X       delete #2%\free #2%
X       a$= "Suspension completed."
X       call display(23,a$)
X     use
X       print "Sorry... An error has occured writing the suspend file."
X       print "Error is "+ert$(err)
X     end when
X     goto 10000
X
Xother_save:`20
X     ! ------------ Dump another player into SU ------------------
X     when error in
X       op::date(1) = 11`09`09! set CTRL-C lockout
X       op::message = ""
X       a$="gal_disk:gal-saves2.dat"
X       open a$ as file #4%, organization indexed fixed, &
X           allow modify, access modify, primary key op::username, &
X           map playermap
X       put #4%
X       close #4%
X     use
X       free #4%\close #4%
X     end when
X     return
X`20
X5200 ! ------------------ Process event queue --------------------
X     for i=1 to numevents
X       if ev(i)::source <> pr::username then
X       select ev(i)::event
X         case "ab"
X           a$= ev(i)::source+" has abandonned ship."
X`09   call display(23,a$)
X         case "eb"
X           a$= "ENERGY BOMB LAUNCH DETECTED FROM "+ev(i)::source+"."
X`09   call display(23,a$)
X           if pr::equip(18)=1 then
X             a$= "ENERGY BOMB SHIELD UP - ANTI-MATTER SAFELY DISPERSED."
X`09     call display(23,a$)
X           else
X             a$= "EVERY ATOM IN YOUR BODY IS CONVERTED TO PURE ENERGY..."
X`09     call display(23,a$)
X             goto 8000
X           end if
X         case "mi"
X           if ev(i)::dest=pr::username then
X             a$= "INCOMING MISSILE detected from "+ev(i)::source+"."
X`09     call display(23,a$)
X           else
X             a$= ev(i)::source+" fired a missile at "+ev(i)::dest+"."
X`09     call display(23,a$)
X           end if
X         case "la"
X           if ev(i)::dest=pr::username then
X             a$= "LASER ATTACK!  Attacking ship: "+ev(i)::source+"."
X`09     call display(23,a$)
X             damage=ev(i)::p1
X             gosub 3369
X           else
X             a$=ev(i)::source+" fired it's laser at "+ev(i)::dest+"."
X`09     call display(23,a$)
X           end if
X         case "mo"
X           call display(23,"--- GALACTIC BANK TRANSACTION NOTICE ----")
X           a$= str$(ev(i)::p1)+" credits received from "+ev(i)::source+"."
X`09   call display(23,a$)
X           pr::credits=pr::credits+ev(i)::p1
X         case "mh"
X           a$=ev(i)::source+" shakes from the blast of a missile hit."
X`09   call display(23,a$)
X         end select
X       end if
X     next i
X     numevents=0
X     return
X`20
X
X6000 ! ----------------------- select ship -----------------------
X     if revived$="OK" then`20
X       call display(23,"The ship dealer is closed by government order.")
X       return
X     end if
X     call display(21,)`09! clear text window
X     call display(4,)`09! clear trade window
X     if pr::ban=TRUE then
X       call display(23,"A security guard throws you out of the building.")
X       return
X     end if
X     if pr::shiptype = 23 and s(23)::soldhere=0 and rnd > .5 then
X       call display(23, "You'll have to sell that piece of !*?* Yugo elsewhe
Vre.")
X       pr::ban=TRUE
X       return
X     end if
X     tradein% = 0
X     if  pr::shiptype<>0 then
X       ! assess value of old ship
X       a$="We access the total value of the options on your ship as shown."
X       call display(23,a$)
X       oldevalue% = 0
X       for i=7 to ntequip
X         if pr::equip(i) = 1 then`20
X           oldevalue% = oldevalue% + int(e(i)::usedeprice*factor*pr::equip(i
V))
X`09   a$=str$(pr::equip(i))+" "+edit$(e(i)::ename,128%)+": "+ &
X`09  `09str$(int(e(i)::usedeprice*factor))
X           call display(24,a$)
X         end if
X       next i
X       a$= "Total equipment value = "+str$(oldevalue%)
X       call display(24,a$)
X       call display(24,"")
X       tradein% = s(pr::shiptype)::cost - int((pr::time_owned * &
X`09(1- s(pr::shiptype)::resale/100) / 50%)*s(pr::shiptype)::cost) &
X`09- s(pr::shiptype)::cost/500
X       if tradein% < 5000 then tradein% = 5000 end if
X       a$ = "Value of a used "+edit$(s(pr::shiptype)::sname,128%)+ " = " + &
X`09`09`09`09    `09str$(tradein%)
X       call display(24,a$)
X       call display(17,)`09`09! wait for key
X       call display(4,)
X       call display(21,)
X     end if
X     a$="The above ships are for sale at the spaceport on "+ &
X`09edit$(pt::pname,128%)+"."
X     call display(23,a$)
X     a$="Ship"+space$(34)+"Cost    Energy  Cargo   Laser   Missiles"
X     call display(24,a$)
+-+-+-+-+-+-+-+-  END  OF PART 12 +-+-+-+-+-+-+-+-
