DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T f

⟦7d1297349⟧ TextFile

    Length: 3878 (0xf26)
    Types: TextFile
    Names: »fighmv.f«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Empire/fighmv.f« 

TextFile

	subroutine fighmv
c
c	This subroutine handles player's fighter moves
c
	IMPLICIT INTEGER(A-Z)

	include 'common.h'
C
	logical fatal
 
	do 2100 y = 1, limit ( 2 )
	loc = 500 + y
	if (movedflag(loc).ne.0) goto 2100
	z6=rlmap(loc)
	if (z6.eq.0) goto 2100
	if ((mode.eq.1).and.(poschk(z6,'F').eq.0)) goto 2100
	movedflag(loc)=1
	z3=min(range(y),4)
	if (z3.eq.0) z3=4

	do 1900 iturn=1,z3
	loc=500+y
	z6=rlmap(loc)
	if (z6.eq.0) goto 2100
	ab=rmap(z6)
c 
c	Now check to see if fighter is in a city, if it is change the
c	stasis number of the fighter to that specified by fipath(i)
c
	if ( ab .ne. 'O' ) goto 300
comment	if fighter not in city
	do 100 i = 1, 70
100	if ( x ( i ) .eq. z6  ) goto 200
comment	find city at z6
200	mycode(loc)=fipath(i)
comment	change statis of fighter
c 
c	Check for fighters destroyed along with carrier or city
c
300	if ((ab.eq.'C').or.(ab.eq.'F').or.(ab.eq.'O')) goto 400
	ptr = 0
	call addstr ( 'Fighter # ', jnkbuf, ptr )
	call addint ( y, jnkbuf, ptr )
	call addstr ( ' destroyed', jnkbuf, ptr )
	jnkbuf ( ptr + 1 ) = '\0'
	call topmsg ( 3, jnkbuf )
	call cflush
	call delay(30)
	goto 1700
400	z7 = z6
	call stasis ( z6, loc )
500	if ( range ( y ) .ne. 0 ) goto 600
comment	check for fuel
	call head ( 'F', y, loc, z6, 1 )
	call topmsg ( 3, 'Ran out of fuel and crashed' )
	call cflush
	call delay(30)
	if (( ab .ne. 'C').and.(omap(z6).ne.'*')) rmap(z6)=omap(z6)
	goto 1700

600	mycod=mycode(loc)
comment	get my function code
	if (mycod.eq.0) goto 1100
comment	none, skip ahead
	if ((mycod.lt.101).or.(mycod.gt.6108)) goto 1300
	if (mycod.le.6000) goto 700
	if (mycod.gt.6100) goto 800
	goto 1300

700	z6=z6+iarrow(mov(z6,mycod)+1)
comment	destination function
	if ((range(y).eq.10).and.(idist(z6,mycod).le.10)) goto 902
	goto 900

800	z6=z6+iarrow(mycod-6100+1)
comment	directional functions
900	if (range(y).eq.10) goto 1000
902	if (order(z6).ne.0) goto 1000
	ad=rmap(z6)
comment	check new location
	if ((ad.eq.'C').or.(ad.eq.'O')) goto 1300
	if ((ad.eq.'+').or.(ad.eq.'.')) goto 1300
1000	z6=z7
1100	call sector(pmap(1))
	call ltr(z6,iturn)
1200	call mve('F',mdate,y,loc,1,z6,z7,disas,z6-iadjst)
	if (disas.eq.-2) goto 500
c 
c	Move evaluation
c 
1300	ac=rmap(z6)
	ao=omap(z6)
	if (z6.eq.mycode(loc)) mycode(loc)=0
comment	arrived at destination
	if ((ac.ne.'O').and.(ac.ne.'C')) range(y)=range(y)-1
	if (z7.eq.z6) goto 2000
comment	didnt go anywhere, end move
	if ((ab.ne.'C').and.(omap(z7).ne.'*')) rmap(z7)=omap(z7)

comment	change prev loc
	if (ao.eq.'*') goto 1400
comment	check on cities
	if (ac.eq.'C') goto 1500
comment	landing on a carrier
	if ((ac .ne. '.') .and. (ac .ne. '+')) goto 1800

comment	attack any other units
	rmap ( z6 ) = 'F'
comment	normal move
	rlmap ( loc ) = z6
	goto 1900

1400	if (ac.ne.'O') goto 1600
comment	is it my city?
1500	continue
comment	landed in a city or carrier
	if (mycode(loc) .ne. 0) goto 1313
	call topmsg ( 3, 'Landing confirmed' )
	call cflush
	call delay(30)
1313	continue
	mycode ( loc ) = 0
comment	zero my function
	rlmap(loc)=z6
	range(y)=20
	goto 2000

1600	if (.not.fatal(3)) goto 2200
comment	ask about flying over enemy city
	call topmsg ( 3, 'Fighter shot down' )
	call cflush
	call delay(30)
1700	rlmap ( loc ) = 0
	goto 2000
c
c	Attacking a unit
c
1800	if ((ac .lt. 'A') .or. (ac .gt. 'T')) goto 1314
	if (.not.fatal(2)) goto 2200
1314	continue
	h1=1
	own1='F'
	own2=ac
	h2=30
	call find(own2,z6,z8,h2)
	call fght(z6,h1,h2,own1,own2)
	call find(own2,z6,z8,h2)
	if (h1.le.0) goto 1700
	rmap(z6)='F'
	rlmap(loc)=z6
	if ((own2.ge.'a').and.(own2.le.'t')) call sonar(z6)
1900	call sensor(z6)
comment	bottom of per turn loop

2000	call sensor(z6)
comment	bottom of per unit loop
2100	continue
	return
c
c	Recover from fatal move
c
2200	z6 = z7
comment	go back to old location
	rmap(z6) = ab
comment	restore map to previous
	range(y) = range(y)+1
comment	get your fuel back
	goto 1200
	end