home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume6
/
conquer4
/
patch7c
< prev
next >
Wrap
Text File
|
1989-12-21
|
14KB
|
529 lines
Subject: v08i078: conquer4 - middle earth multi-player game (V4), Patch7c
Newsgroups: comp.sources.games
Approved: billr@saab.CNA.TEK.COM
Submitted-by: Adam Bryant <adb@cs.bu.edu>
Posting-number: Volume 8, Issue 78
Archive-name: conquer4/Patch7c
Patch-To: conquer4: Volume 6, Issue 83-96
#!/bin/sh
# this is part 3 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patchV4.7 continued
#
CurArch=3
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file patchV4.7"
sed 's/^X//' << 'SHAR_EOF' >> patchV4.7
X+ {
X+ #ifdef DEBUG
X+ printf("\t need %d monster troops\n",neededtroops);
X+ #endif
X+ if ( (rand()%8)<5 && nomad_space)
X+ {
X+ while(!is_habitable((x=(rand()%(MAPX-8))+4),
X+ (y=(rand()%(MAPY-8))+4)))
X+ ;
X+ for(i=0;i<MAXARM;i++)
X+ if ( ntn[nomads].arm[i].sold <=0 )
X+ goto found_free_nomad_army;
X+
X+ #ifdef DEBUG
X+ printf("\t\t Out of nomad space\n");
X+ #endif
X+ nomad_space=0;
X+ continue;
X+
X+ found_free_nomad_army:
X+
X+ ntn[nomads].arm[i].xloc=x;
X+ ntn[nomads].arm[i].yloc=y;
X+ ntn[nomads].arm[i].sold=100+100*(rand()%6);
X+ ntn[nomads].arm[i].unittyp=A_LT_CAV;
X+ ntn[nomads].arm[i].stat=ATTACK;
X+ neededtroops -= ntn[nomads].arm[i].sold;
X+ #ifdef DEBUG
X+ printf("\t\tAdding nomad army %d size %d at (%d,%d)\n",i,
X+ ntn[nomads].arm[i].sold,x,y);
X+ #endif
X+ }
X+ else
X+ {
X+ do {
X+ x=(rand()%(MAPX-8))+4;
X+ y=(rand()%(MAPY-8))+4;
X+ } while ( sct[x][y].altitude == PEAK ||
X+ sct[x][y].altitude == WATER ||
X+ ( sct[x][y].owner !=0 &&
X+ sct[x][y].owner != savages &&
X+ sct[x][y].people >= 50 ) );
X+
X+ for(i=0;i<MAXARM;i++)
X+ if ( ntn[savages].arm[i].sold <=0 )
X+ goto found_free_savage_army;
X+
X+ #ifdef DEBUG
X+ printf("\t\t Out of savage space\n");
X+ #endif
X+ savage_space=0;
X+ continue;
X+
X+ found_free_savage_army:
X+
X+ ntn[savages].arm[i].xloc=x;
X+ ntn[savages].arm[i].yloc=y;
X+ ntn[savages].arm[i].sold=100+100*(rand()%3);
X+ ntn[savages].arm[i].unittyp=defaultunit(savages);
X+ ntn[savages].arm[i].stat=ATTACK;
X+ neededtroops -= ntn[savages].arm[i].sold;
X+ #ifdef DEBUG
X+ printf("\t\tAdding savage army %d size %d at (%d,%d)\n",i,
X+ ntn[savages].arm[i].sold,x,y);
X+ #endif
X+ }
X+ }
X+ }
X+ #endif /* MORE_MONST */
X+
X }
X
X void
X***************
X*** 177,197 ****
X break;
X }
X }
X- #ifdef MORE_MONST
X- /* place a few new Nomad armies */
X- for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD<=0){
X- if(rand()%4!=0) continue;
X- x=(rand()%(MAPX-8))+4;
X- y=(rand()%(MAPY-8))+4;
X- if(is_habitable(x,y)) {
X- P_AXLOC=x;
X- P_AYLOC=y;
X- P_ASOLD=100+100*(rand()%6);
X- P_ATYPE=A_LT_CAV;
X- P_ASTAT=ATTACK;
X- }
X- }
X- #endif /* MORE_MONST */
X }
X
X void
X--- 293,298 ----
X***************
X*** 227,251 ****
X }
X }
X }
X- #ifdef MORE_MONST
X- /* place a few new savage armies */
X- for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD<=0){
X- x=(rand()%(MAPX-8))+4;
X- y=(rand()%(MAPY-8))+4;
X- if((rand()%4!=0)
X- ||( sct[x][y].altitude == PEAK)
X- ||( sct[x][y].altitude == WATER))
X- continue;
X- if(sct[x][y].owner==0 || sct[x][y].owner==country
X- ||(sct[x][y].people< 50)) {
X- P_AXLOC=x;
X- P_AYLOC=y;
X- P_ASOLD=100+100*(rand()%3);
X- P_ATYPE=defaultunit(country);
X- P_ASTAT=ATTACK;
X- }
X- }
X- #endif /* MORE_MONST */
X }
X
X void
X--- 328,333 ----
X***************
X*** 389,395 ****
X {
X short x,y,armynum,nvynum;
X int i, free, done;
X! long militia=0l,ideal;
X long diff=0l;
X int ok;
X
X--- 471,477 ----
X {
X short x,y,armynum,nvynum;
X int i, free, done;
X! long ideal;
X long diff=0l;
X int ok;
X
X***************
X*** 401,409 ****
X--- 483,495 ----
X if(rand()%2==0) P_NCREW = SHIPCREW;
X }
X check();
X+ curntn->tmil = 0L;
X for(armynum=1;armynum<MAXARM;armynum++) if(P_ASOLD>0){
X /* move army back if too far out */
X ok = 0;
X+ if (P_ASOLD < MINLEADER && P_ASOLD!=A_MILITIA) {
X+ curntn->tmil += P_ASOLD;
X+ }
X for(x=(int)P_AXLOC-3;x<=(int)P_AXLOC+3;x++)
X for(y=(int)P_AYLOC-3;y<=(int)P_AYLOC+3;y++)
X if((ONMAP(x,y))&&(sct[x][y].owner==country)) ok=1;
X***************
X*** 412,418 ****
X P_AYLOC=curntn->capy;
X }
X
X! /* count and verify militia */
X if(P_ATYPE==A_MILITIA) {
X /* eliminate invalid militia */
X if(((sct[P_AXLOC][P_AYLOC].designation!=DTOWN)
X--- 498,504 ----
X P_AYLOC=curntn->capy;
X }
X
X! /* verify militia */
X if(P_ATYPE==A_MILITIA) {
X /* eliminate invalid militia */
X if(((sct[P_AXLOC][P_AYLOC].designation!=DTOWN)
X***************
X*** 426,432 ****
X sct[P_AXLOC][P_AYLOC].people+=P_ASOLD;
X else sct[curntn->capx][curntn->capy].people+=P_ASOLD;
X P_ASOLD=0;
X! } else militia+=P_ASOLD;
X }
X
X /* set default status */
X--- 512,518 ----
X sct[P_AXLOC][P_AYLOC].people+=P_ASOLD;
X else sct[curntn->capx][curntn->capy].people+=P_ASOLD;
X P_ASOLD=0;
X! }
X }
X
X /* set default status */
X***************
X*** 442,453 ****
X break;
X }
X }
X- curntn->tmil -= militia;
X
X /*make sure enough men in army 0 -- garrison duty in capitol*/
X armynum=0;
X! P_ASTAT=GARRISON;
X P_ATYPE=defaultunit(country);
X P_AXLOC=curntn->capx;
X P_AYLOC=curntn->capy;
X
X--- 528,544 ----
X break;
X }
X }
X
X /*make sure enough men in army 0 -- garrison duty in capitol*/
X armynum=0;
X! /* find lowest army of non-leader type */
X! while (armynum < MAXARM && (P_ATYPE>=MINLEADER && P_ASOLD>0)) {
X! armynum++;
X! }
X! /* oh well... wipe out army zero; c'est la vie */
X! if (armynum == MAXARM) armynum = 0;
X P_ATYPE=defaultunit(country);
X+ P_ASTAT=GARRISON;
X P_AXLOC=curntn->capx;
X P_AYLOC=curntn->capy;
X
X***************
X*** 470,481 ****
X
X /*too few soldiers on garrison*/
X /*diff is number to change mil in cap (>0)*/
X! if(curntn->tgold<0L) diff=0;
X! else diff = (long) min(ideal-P_ASOLD,(int) (curntn->metals / *(u_enmetal + (P_ATYPE%UTYPE))));
X
X diff=(long) min((int) diff, sct[curntn->capx][curntn->capy].people/2L);
X
X! if(curntn->tgold<0L || curntn->metals<0L) if(diff > 0L) diff=0;
X
X #ifdef DEBUG
X printf("\tadding %d men to garrison (too few men on garrison)\n",diff);
X--- 561,572 ----
X
X /*too few soldiers on garrison*/
X /*diff is number to change mil in cap (>0)*/
X! diff = (long) min(ideal-P_ASOLD,(int) (curntn->metals / *(u_enmetal + (P_ATYPE%UTYPE))));
X
X diff=(long) min((int) diff, sct[curntn->capx][curntn->capy].people/2L);
X
X! if ((curntn->tgold<0L || curntn->metals<0L) && (diff > 0L)) diff=0L;
X! if (sct[curntn->capx][curntn->capy].owner != country) diff=0L;
X
X #ifdef DEBUG
X printf("\tadding %d men to garrison (too few men on garrison)\n",diff);
X***************
X*** 690,695 ****
X--- 781,787 ----
X for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD==0){
X P_AXLOC=x;
X P_AYLOC=y;
X+ P_ATYPE=A_MILITIA;
X free=TRUE;
X break;
X }
X***************
X*** 711,727 ****
X }
X }
X #ifdef DEBUG
X! printf("\tadding %ld troops to %s army %d (now %ld men - populace %ld)\n",ideal-P_ASOLD,unittype[P_ATYPE],armynum,ideal,sct[x][y].people);
X #endif DEBUG
X P_ASOLD=ideal;
X- P_ATYPE=A_MILITIA;
X P_ASTAT=MILITIA;
X }
X }
X check();
X
X! /* setup default units */
X! for(armynum=1;armynum<MAXARM;armynum++)
X if((P_ASOLD>0)&&(P_ATYPE!=A_MILITIA)&&(P_ATYPE<MINLEADER))
X P_ATYPE=defaultunit(country);
X }
X--- 803,822 ----
X }
X }
X #ifdef DEBUG
X! printf("\tnow in sector %d,%d\n",x,y);
X! printf("\tadding %ld troops to %s army %d (now %ld men - populace %ld)\n",ideal-P_ASOLD,unittype[P_ATYPE%UTYPE],armynum,ideal,sct[x][y].people);
X #endif DEBUG
X P_ASOLD=ideal;
X P_ASTAT=MILITIA;
X }
X }
X check();
X+ #ifdef DEBUG
X+ printf("\tnow setting all units to default type of %s\n",unittype[defaultunit(country)]);
X+ #endif /*DEBUG*/
X
X! /* setup default units */
X! for(armynum=1;armynum<MAXARM;armynum++)
X if((P_ASOLD>0)&&(P_ATYPE!=A_MILITIA)&&(P_ATYPE<MINLEADER))
X P_ATYPE=defaultunit(country);
X }
X***************
X*** 1089,1095 ****
X
X spreadsheet(country);
X
X! hunger = spread.food/((float)(spread.civilians+2*curntn->tmil));
X if(hunger < P_EATRATE ) {
X goldthresh++;
X metalthresh++;
X--- 1184,1192 ----
X
X spreadsheet(country);
X
X! if (spread.civilians+2*curntn->tmil > 0) {
X! hunger = spread.food/((float)(spread.civilians+2*curntn->tmil));
X! } else hunger = 0.0;
X if(hunger < P_EATRATE ) {
X goldthresh++;
X metalthresh++;
X*** otrade.c Tue Dec 12 21:19:37 1989
X--- trade.c Tue Dec 12 21:20:12 1989
X***************
X*** 113,119 ****
X
X /* go through list of commodities */
X for (holdint=0;holdint<itemnum;holdint++) {
X! if (deal[holdint]==SELL) {
X count++;
X mvprintw(count,0,"%2d) %-20s",
X holdint+1,
X--- 113,121 ----
X
X /* go through list of commodities */
X for (holdint=0;holdint<itemnum;holdint++) {
X! if ((deal[holdint]==SELL) && ((country==0) ||
X! (ntn[natn[holdint]].dstatus[country] != UNMET)
X! || (natn[holdint] == country))) {
X count++;
X mvprintw(count,0,"%2d) %-20s",
X holdint+1,
X***************
X*** 197,203 ****
X inloop=FALSE;
X done=FALSE;
X break;
X! } else if (holdint<1 || holdint>itemnum) {
X tradeerr("Invalid Item Number");
X return;
X }
X--- 199,206 ----
X inloop=FALSE;
X done=FALSE;
X break;
X! } else if (holdint<1 || holdint>itemnum
X! || ntn[natn[holdint - 1]].dstatus[country]==UNMET) {
X tradeerr("Invalid Item Number");
X return;
X }
X*** ocheck.c Tue Dec 12 21:19:34 1989
X--- check.c Tue Dec 12 21:20:12 1989
X***************
X*** 50,65 ****
X __file__, __line__, country, i, a->yloc );
X a->yloc = 0;
X }
X- if( sct[a->xloc][a->yloc].altitude==PEAK ) {
X- fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (peak)\n",
X- __file__,__line__,country,i,a->xloc,a->yloc);
X- a->sold = 0;
X- }
X if( a->stat != ONBOARD && sct[a->xloc][a->yloc].altitude==WATER ) {
X fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (water) men=%d\n",
X __file__,__line__,country,i,a->xloc,a->yloc,a->sold);
X a->sold = 0;
X }
X } /* for */
X
X for( i = 0; i < NTOTAL; i++ ) {
X--- 50,65 ----
X __file__, __line__, country, i, a->yloc );
X a->yloc = 0;
X }
X if( a->stat != ONBOARD && sct[a->xloc][a->yloc].altitude==WATER ) {
X fprintf( stderr, "file %s: line %d: nation[%d] army[%d] loc=%d,%d (water) men=%d\n",
X __file__,__line__,country,i,a->xloc,a->yloc,a->sold);
X a->sold = 0;
X }
X+ if( a->stat == ONBOARD && a->smove > 0) {
X+ /* don't echo since this is still getting */
X+ /* set some place someplace I can't find yet */
X+ a->smove = 0;
X+ }
X } /* for */
X
X for( i = 0; i < NTOTAL; i++ ) {
X***************
X*** 147,154 ****
X int line;
X char *file;
X {
X! /* fprintf(stderr,"file %s line %d\n",file,line); */
X! /* verifydata(file,line); */
X }
X #endif DEBUG
X
X--- 147,154 ----
X int line;
X char *file;
X {
X! fprintf(stderr,"file %s line %d\n",file,line);
X! verifydata(file,line);
X }
X #endif DEBUG
X
X***************
X*** 158,163 ****
X--- 158,164 ----
X # include <unistd.h>
X # define do_lock(fd) lockf(fd,F_TLOCK,0)
X #else
X+ # include <sys/types.h>
X # include <sys/file.h>
X # define do_lock(fd) flock(fd,LOCK_EX|LOCK_NB)
X #endif
X***************
X*** 192,199 ****
X exit(FAIL);
X }
X #else
X! if( access( filename, 00 ) == 0 ) {
X! hold=TRUE;
X }
X if (hold==FALSE && keeplock==TRUE) {
X /* create lock file */
X--- 193,209 ----
X exit(FAIL);
X }
X #else
X! struct stat fst;
X!
X! if( stat( filename, &fst ) == 0 ) {
X! long now;
X! now = time(0);
X! if (now - fst.st_mtime < TIME_DEAD*3) {
X! hold=TRUE;
X! } else {
X! /* remove useless file */
X! unlink(filename);
X! }
X }
X if (hold==FALSE && keeplock==TRUE) {
X /* create lock file */
X*** otxt5 Tue Dec 12 21:19:38 1989
X--- txt5 Tue Dec 12 21:20:14 1989
X***************
X*** 216,221 ****
X--- 216,222 ----
X between 25%-125% of the tax rate [randomly determined]
X plus (poverty - 50)/2 and is then adjusted by the ratio of
X military to civilians.
X+ Money lost due to inflation will be indicated in the budget.
X wealth = see elsewhere.
X END
X ADDITIONAL MODIFIERS TO NATIONAL ATTRIBUTES
X***************
X*** 222,234 ****
X
X MAGIC POWERS ADD OR SUBTRACT 10 FROM POWERS AS FOLLOWS:
X SLAVER.....terror ARCHITECT..storerate
X! RELIGION...popularity URBAN......-popularity
X DEMOCRACY..-terror ROADS......communication
X KNOWALL....knowledge DESTROYER..terror
X VAMPIRE....terror
X
X CLASSES ADD 30 TO POWERS AS FOLLOWS:
X! kingdom....popularity dragon.....terror
X wizard.....knowledge priest.....popularity
X pirate.....terror shadow.....terror
X warlord....prestige demon......terror
X--- 223,235 ----
X
X MAGIC POWERS ADD OR SUBTRACT 10 FROM POWERS AS FOLLOWS:
X SLAVER.....terror ARCHITECT..storerate
X! RELIGION...popularity URBAN......-popularity
X DEMOCRACY..-terror ROADS......communication
X KNOWALL....knowledge DESTROYER..terror
X VAMPIRE....terror
X
X CLASSES ADD 30 TO POWERS AS FOLLOWS:
X! kingdom....popularity dragon.....terror
X wizard.....knowledge priest.....popularity
X pirate.....terror shadow.....terror
X warlord....prestige demon......terror
SHAR_EOF
echo "File patchV4.7 is complete"
chmod 0644 patchV4.7 || echo "restore of patchV4.7 fails"
rm -f s2_seq_.tmp
echo "You have unpacked the last part"
exit 0