|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 4428 (0x114c)
Types: TextFile
Names: »shipmv.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Empire/shipmv.f«
ccc shipmv - this subroutine handles player's ship moves
subroutine shipmv ( acraloc, acrahit, num, own1, hitmax )
c
c synopsis
c
IMPLICIT INTEGER(A-Z)
include 'common.h'
C
logical fatal
do 2600 y=1,limit(num)
loc=acraloc+y
if (movedflag(loc).ne.0) goto 2600
z6=rlmap(loc)
if (z6.eq.0) goto 2600
if ((mode.eq.1).and.(poschk(z6,own1).eq.0)) goto 2600
movedflag(loc)=1
do 2500 iturn=1,2
loc=acraloc+y
z6=rlmap(loc)
if (z6.eq.0) goto 2600
jit=acrahit+y
h1=j1ts(jit)
if ((iturn.eq.2).and.(h1.le.hitmax/2)) goto 2600
z7=z6
ab=rmap(z6)
c
c Check to see if ship was destroyed becuase the city
c it was in was captured
c
if ((ab.eq.own1).or.(ab.eq.'O')) goto 100
call head ( own1, y, loc, z6, h1 )
call topmsg ( 2, 'was destroyed' )
call cflush
call delay(30)
goto 1500
100 if ((iturn.eq.1).and.(ab.eq.'O')) h1=h1+1
comment repair if in port
if (h1.gt.hitmax) h1=hitmax
call stasis(z6,loc)
200 mycod=mycode(loc)
comment get my function code
if (mycod.eq.0) goto 900
comment if zero, skip ahead
if ((mycod.ne.9997).or.((own1.ne.'T').and.(own1.ne.'C')))
1 goto 500
comment check transports and carriers
n = 0
comment for overloading
nt = 2
ia = 1
ib=limit(1)
if (own1.ne.'C') goto 300
nt=1
ia=501
ib=limit(2)+500
300 do 400 j=ia,ib
400 if (rlmap(j).eq.z6) n=n+1
if (n.lt.nt*h1) goto 500
mycode(loc)=0
goto 900
500 if ((mycod.lt.101).or.(mycod.gt.6108)) goto 1100
if (mycod.le.6000) goto 600
if (mycod.gt.6100) goto 700
goto 1100
600 z6=z6+iarrow(mov(z6,mycod)+1)
comment destination move
goto 800
700 z6=z6+iarrow(mycod-6100+1)
comment directional move
800 ad=rmap(z6)
if (((ad.eq.'.').or.(ad.eq.'O')).and.(order(z6).eq.0)) goto 1100
z6=z7
900 call sector(pmap(1))
1000 call ltr(z6,iturn)
call mve ( own1, mdate, y, loc, jit, z6, z7, disas, z6-iadjst )
if (disas.eq.-2) goto 200
c
c Move evaluation. z6 = to, z7 = from, check out new location
c
1100 if (omap(z7).ne.'*') rmap(z7)=omap(z7)
comment remove unit from map
ac = rmap ( z6 )
ao = omap ( z6 )
if (z6.eq.mycode(loc)) mycode(loc)=0
comment arrived at destination
if ( ac .ne. 'O' ) goto 1200
comment is it our city?
call topmsg ( 3, 'Ship is docked' )
comment ship is in city
call cflush
call delay(30)
goto 1800
1200 if ( ao .eq. '.' ) goto 1600
comment if sea, skip ahead
1300 if (.not. fatal(4)) goto 2700
if ((ac.ne.'+').and.(ao.ne.'*')) goto 2400
comment check for enemy to fight
1400 continue
ptr = 0
call addidt ( own1, jnkbuf, ptr )
call addstr( ' broke up on the shore', jnkbuf, ptr )
jnkbuf ( ptr + 1 ) = '\0'
call topmsg ( 2, jnkbuf )
call cflush
call delay(30)
goto 1500
1600 if (ac.ne.'.') goto 2400
rmap(z6)=own1
comment normal move
1800 rlmap(loc)=z6
j1ts(jit)=h1
1900 if ((own1.ne.'T').and.(own1.ne.'C')) goto 2500
n=0
comment if we're carring something, bring it along
ia=0
comment set up for transport
ib=limit(1)
nt=2
if (own1.ne.'C') goto 2000
ia=500
comment set up for carrier
ib=limit(2)
nt=1
2000 do 2300 i=ia+1,ia+ib
comment find pieces and move them
if (rlmap(i).ne.z7) goto 2300
if (n+1.gt.nt*h1) goto 2050
rlmap(i)=z6
n=n+1
goto 2300
2050 if (rmap(z7).eq.'O') goto 2300
rlmap(i)=0
c
c Tell about peices lost when ship went down
c
ptr = 0
if (own1.eq.'C') goto 2100
call addstr ( 'Army # ', jnkbuf, ptr )
goto 2200
2100 continue
call addstr ( 'Fighter # ', jnkbuf, ptr )
2200 continue
call addint ( i - ia, jnkbuf, ptr )
call addstr ( ' was sunk', jnkbuf, ptr )
jnkbuf ( ptr + 1 ) = '\0'
call topmsg ( 2, jnkbuf )
call cflush
call delay(30)
2300 continue
goto 2500
2400 if ((ac.ge.'A').and.(ac.le.'T')) then
if (.not.fatal(2)) goto 2700
endif
h2=30
comment going to fight another unit
own2=ac
call find(own2,z6,z8,h2)
call fght(z6,h1,h2,own1,own2)
call find(own2,z6,z8,h2)
if (h1.le.0) goto 1500
rmap(z6)=own1
comment put us on the map
if ((own2.ge.'a').and.(own2.le.'t')) call sonar(z6)
if (ao.eq.'.') goto 1800
rmap(z6)=ao
comment won the battle, but...
if ((own2.ge.'a').and.(own2.le.'t')) call sonar(z6)
call topmsg ( 2, 'Your ship successfully clears the
* enemy from the beach before, CRUNCH!, grounding itself' )
call cflush
call delay(30)
1500 rlmap(loc)=0
comment kill my unit
mycode(loc)=0
call sensor(z6)
h1=0
goto 1900
2500 call sensor(z6)
2600 continue
return
c
c Recover from fatal moves
c
2700 z6=z7
comment restore old location
rmap(z6)=ab
comment restore map
goto 900
comment try again
end