conquer - patch 4

Edward Barlow smile at mhuxd.UUCP
Tue Mar 22 00:15:14 AEST 1988


*** oldcombat.c	Fri Mar 18 17:27:00 1988
--- combat.c	Fri Mar 18 17:27:23 1988
***************
*** 342,352
  		PAloss = 120;
  		PDloss = 0;
  	}
- 	sprintf(tempstr,"%s%d",msgfile,country);
- 	if ((fpmsg=fopen(tempstr,"a+"))==NULL) {
- 		printf("\n\tERROR OPENING %s",tempstr);
- 		exit(1);
- 	}
  
  	/*divisor is the smallest combat bonus*/
  	divisor = 100;

--- 342,347 -----
  		PAloss = 120;
  		PDloss = 0;
  	}
  
  	/*divisor is the smallest combat bonus*/
  	divisor = 100;
***************
*** 411,416
  		for(i=0;i<j;i++) if(owner[j]==owner[i]) done=1;
  
  		if((done==0)&&(ntn[owner[j]].active==1)) {
  
  			fprintf(fpmsg,"%s BATTLE SUMMARY for sector %d, %d\n",ntn[owner[j]].name,ntn[owner[0]].arm[unit[0]].xloc, ntn[owner[0]].arm[unit[0]].yloc);
  

--- 406,416 -----
  		for(i=0;i<j;i++) if(owner[j]==owner[i]) done=1;
  
  		if((done==0)&&(ntn[owner[j]].active==1)) {
+ 			sprintf(tempstr,"%s%d",msgfile,owner[j]);
+ 			if ((fpmsg=fopen(tempstr,"a+"))==NULL) {
+ 				printf("\n\tERROR OPENING %s",tempstr);
+ 				exit(1);
+ 			}
  
  			fprintf(fpmsg,"%s BATTLE SUMMARY for sector %d, %d\n",ntn[owner[j]].name,ntn[owner[0]].arm[unit[0]].xloc, ntn[owner[0]].arm[unit[0]].yloc);
  
***************
*** 428,433
  			fprintf(fpmsg,"%s ODDS are %d to 100\n",ntn[owner[j]].name,odds);
  			fprintf(fpmsg,"%s RESULT: Attackers lose %d men, Defenders lose %d men\n",ntn[owner[j]].name,Aloss, Dloss);
  			fprintf(fpmsg,"%s\n","END");
  		}
  	}
  	fclose(fpmsg);

--- 428,434 -----
  			fprintf(fpmsg,"%s ODDS are %d to 100\n",ntn[owner[j]].name,odds);
  			fprintf(fpmsg,"%s RESULT: Attackers lose %d men, Defenders lose %d men\n",ntn[owner[j]].name,Aloss, Dloss);
  			fprintf(fpmsg,"%s\n","END");
+ 			fclose(fpmsg);
  		}
  	}
  }
***************
*** 430,436
  			fprintf(fpmsg,"%s\n","END");
  		}
  	}
- 	fclose(fpmsg);
  }
  
  /*Subroutine to determine combat bonuses for unit i in matrix*/

--- 431,436 -----
  			fclose(fpmsg);
  		}
  	}
  }
  
  /*Subroutine to determine combat bonuses for unit i in matrix*/
***************
*** 617,623
  				ntn[owner[i]].nvy[unit[i]].warships=0;
  				amsunk = asunk - aship;
  			} else  {
! 				ntn[owner[i]].nvy[unit[i]].warships -= asunk / aship * ntn[owner[i]].nvy[unit[i]].warships;
  			}
  		}
  		else if((dsunk>0)&&(side[i]==DFND)){

--- 617,623 -----
  				ntn[owner[i]].nvy[unit[i]].warships=0;
  				amsunk = asunk - aship;
  			} else  {
! 				ntn[owner[i]].nvy[unit[i]].warships -= asunk * ntn[owner[i]].nvy[unit[i]].warships/aship;
  			}
  		}
  		else if((dsunk>0)&&(side[i]==DFND)){
***************
*** 625,631
  				ntn[owner[i]].nvy[unit[i]].warships=0;
  				dmsunk = dsunk -dship;
  			} else  {
! 				ntn[owner[i]].nvy[unit[i]].warships -= dsunk / dship * ntn[owner[i]].nvy[unit[i]].warships;
  			}
  		}
  	}

--- 625,631 -----
  				ntn[owner[i]].nvy[unit[i]].warships=0;
  				dmsunk = dsunk -dship;
  			} else  {
! 				ntn[owner[i]].nvy[unit[i]].warships -= dsunk * ntn[owner[i]].nvy[unit[i]].warships/dship;
  			}
  		}
  	}
*** oldcommands.c	Fri Mar 18 17:27:00 1988
--- commands.c	Fri Mar 18 17:27:23 1988
***************
*** 643,648
  /* then move temp to msgfile*/
  rmessage()
  {
  	FILE *mesgfp;
  	FILE *fptemp;
  	int i;

--- 643,649 -----
  /* then move temp to msgfile*/
  rmessage()
  {
+ 	int unlink();
  	FILE *mesgfp;
  	FILE *fptemp;
  	int i;
***************
*** 666,671
  
  	sprintf(mesgfile,"%s%d",msgfile,country);
  	if ((mesgfp=fopen(mesgfile,"r"))==NULL) {
  		mvprintw(0,0,"no messages in %s, hit return",mesgfile);
  		refresh();
  		getch();

--- 667,673 -----
  
  	sprintf(mesgfile,"%s%d",msgfile,country);
  	if ((mesgfp=fopen(mesgfile,"r"))==NULL) {
+  	        (void) unlink (tempfile) ;
  		mvprintw(0,0,"no messages in %s, hit return",mesgfile);
  		refresh();
  		getch();
*** oldcexecute.c	Fri Mar 18 17:27:01 1988
--- cexecute.c	Fri Mar 18 17:27:23 1988
***************
*** 131,137
  		case CHG_MGK:
  			ntn[country].powers|=long2var;
  			if(ntn[country].powers!=longvar){
! 			printf("\nERROR ON MAGIC READ %ld != %d (or of %d)",longvar,ntn[country].powers,long2var);
  			getchar();
  			}
  			exenewmgk(long2var);

--- 131,137 -----
  		case CHG_MGK:
  			ntn[country].powers|=long2var;
  			if(ntn[country].powers!=longvar){
! 			printf("\nERROR ON MAGIC READ %ld != %ld (or of %ld)",longvar,ntn[country].powers,long2var);
  			getchar();
  			}
  			exenewmgk(long2var);
***************
*** 145,148
  	if(execed==1) return(1);
  	else return(0);
  }
- 

--- 145,147 -----
  	if(execed==1) return(1);
  	else return(0);
  }
*** oldforms.c	Fri Mar 18 17:26:41 1988
--- forms.c	Fri Mar 18 17:27:23 1988
***************
*** 62,68
  						mvprintw(6,position,"%s",*(races+i));
  				if(ntn[nationid].active>=2) mvprintw(7,position,"NPC");
  				else mvprintw(7,position,"%s",*(Class+ntn[nationid].class));
! 				mvprintw(8,position,"%d",ntn[nationid].score);
  				mvprintw(9,position,"%ld",ntn[nationid].tgold);
  				mvprintw(10,position,"%ld",ntn[nationid].tmil);
  				mvprintw(11,position,"%ld",ntn[nationid].tciv);

--- 62,68 -----
  						mvprintw(6,position,"%s",*(races+i));
  				if(ntn[nationid].active>=2) mvprintw(7,position,"NPC");
  				else mvprintw(7,position,"%s",*(Class+ntn[nationid].class));
! 				mvprintw(8,position,"%ld",ntn[nationid].score);
  				mvprintw(9,position,"%ld",ntn[nationid].tgold);
  				mvprintw(10,position,"%ld",ntn[nationid].tmil);
  				mvprintw(11,position,"%ld",ntn[nationid].tciv);
***************
*** 122,128
  		}
  		standout();
  		mvaddstr(17,0,"HIT RETURN KEY TO CHANGE STATUS");
! 		mvprintw(18,0,"HIT 'B' KEY TO BRIBE WARRING NPC NATION (%d GOLD/level)",BRIBE);
  		mvaddstr(19,0,"ANY OTHER KEY TO CONTINUE:");
  		standend();
  		refresh();

--- 122,128 -----
  		}
  		standout();
  		mvaddstr(17,0,"HIT RETURN KEY TO CHANGE STATUS");
! 		mvprintw(18,0,"HIT 'B' KEY TO BRIBE WARRING NPC NATION (%ld GOLD/level)",BRIBE);
  		mvaddstr(19,0,"ANY OTHER KEY TO CONTINUE:");
  		standend();
  		refresh();
***************
*** 270,276
  	mvprintw(16,0,"nations mark is...%c ",ntn[country].mark);
  	for(i=1;i<8;i++) if(ntn[country].race==*(races+i)[0])
  		mvprintw(17,0, "nation race is....%s  ",*(races+i));
! 	mvprintw(18,0,"score currently...%d",ntn[country].score);
  
  	mvprintw(4,(COLS/2), "attack bonus...........+%2d",ntn[country].aplus);
  	mvprintw(5,(COLS/2), "defense bonus..........+%2d",ntn[country].dplus);

--- 270,276 -----
  	mvprintw(16,0,"nations mark is...%c ",ntn[country].mark);
  	for(i=1;i<8;i++) if(ntn[country].race==*(races+i)[0])
  		mvprintw(17,0, "nation race is....%s  ",*(races+i));
! 	mvprintw(18,0,"score currently...%ld",ntn[country].score);
  
  	mvprintw(4,(COLS/2), "attack bonus...........+%2d",ntn[country].aplus);
  	mvprintw(5,(COLS/2), "defense bonus..........+%2d",ntn[country].dplus);
***************
*** 293,298
  	mvaddstr(20,(COLS/2)-15,"HIT 1 or 2 TO CHANGE NAME or PASSWD");
  	if(magic(country,VAMPIRE)!=1)
  		mvaddstr(21,(COLS/2)-14,"HIT 3 TO ADD TO YOUR COMBAT BONUS");
  	if(isgod==1) mvaddstr(22,(COLS/2)-9,"HIT 4 TO DESTROY NATION");
  
  	standend();

--- 293,299 -----
  	mvaddstr(20,(COLS/2)-15,"HIT 1 or 2 TO CHANGE NAME or PASSWD");
  	if(magic(country,VAMPIRE)!=1)
  		mvaddstr(21,(COLS/2)-14,"HIT 3 TO ADD TO YOUR COMBAT BONUS");
+ 	else 	mvaddstr(21,(COLS/2)-17,"( VAMPIRES MAY NOT ADD TO COMBAT BONUS )");
  	if(isgod==1) mvaddstr(22,(COLS/2)-9,"HIT 4 TO DESTROY NATION");
  
  	standend();
***************
*** 379,384
  			mvaddstr(0,0,"VAMPIRES CAN'T ADD TO COMBAT BONUS (hit return)");
  			refresh();
  			getch();
  		}
  		if(magic(country,WARLORD)==1)      cbonus=30;
  		else if(magic(country,CAPTAIN)==1) cbonus=20;

--- 380,386 -----
  			mvaddstr(0,0,"VAMPIRES CAN'T ADD TO COMBAT BONUS (hit return)");
  			refresh();
  			getch();
+ 			break;
  		}
  		if(magic(country,WARLORD)==1)      cbonus=30;
  		else if(magic(country,CAPTAIN)==1) cbonus=20;
*** oldio.c	Fri Mar 18 17:26:44 1988
--- io.c	Fri Mar 18 17:27:23 1988
***************
*** 496,502
   				printf("	%s",*(races+i));
   		if(ntn[nationid].active>=2) printf("	NPC");
   		else printf("	%s",*(Class+ntn[nationid].class));
!  		printf("	%d	%d	%d	%d	%d",
   			ntn[nationid].score ,ntn[nationid].tgold
   			,ntn[nationid].tmil ,ntn[nationid].tciv
   			,ntn[nationid].tsctrs );

--- 496,502 -----
   				printf("	%s",*(races+i));
   		if(ntn[nationid].active>=2) printf("	NPC");
   		else printf("	%s",*(Class+ntn[nationid].class));
!  		printf("	%ld	%ld	%ld	%ld	%d",
   			ntn[nationid].score ,ntn[nationid].tgold
   			,ntn[nationid].tmil ,ntn[nationid].tciv
   			,ntn[nationid].tsctrs );
*** oldmain.c	Fri Mar 18 17:27:03 1988
--- main.c	Fri Mar 18 17:27:23 1988
***************
*** 18,23
  #include <fcntl.h>
  #include  <pwd.h>
  
  /*initialization data*/
  /*Movement costs*/
  char *ele=       "#^%-~";

--- 18,24 -----
  #include <fcntl.h>
  #include  <pwd.h>
  
+ char *getpass();
  /*initialization data*/
  /*Movement costs*/
  char *ele=       "#^%-~";
***************
*** 106,111
  int argc;
  char **argv;
  {
  	register int i;
  	char *name;
  	void srand();

--- 107,113 -----
  int argc;
  char **argv;
  {
+ 	int geteuid(), getuid(), setuid();
  	register int i;
  	char *name;
  	void srand();
***************
*** 218,224
  		printscore();
  		exit(0);
  	} else if (xflag) {	/* update the game */
! 		uid=geteuid();
  		if ( uid != (getpwnam(LOGIN))->pw_uid ){
  			printf("sorry -- your uid is invalid for updating\n");
  			printf("you need to be logged in as %s\n",LOGIN);

--- 220,226 -----
  		printscore();
  		exit(0);
  	} else if (xflag) {	/* update the game */
! 		uid=getuid();	/* use the real user id */
  		if ( uid != (getpwnam(LOGIN))->pw_uid ){
  			printf("sorry -- your uid is invalid for updating\n");
  			printf("you need to be logged in as %s\n",LOGIN);
***************
*** 228,234
  		writedata();
  		exit(1);
  	}
! 
  	/* must be a normal interactive game */
  	armornvy=AORN;
  

--- 230,242 -----
  		writedata();
  		exit(1);
  	}
!         /*
!          *  Set the real uid to the effective.  This will avoid a
!          *  number of problems involving file protection if the
!          *  executable is setuid.
!          */
!         (void) setuid (geteuid ()) ;
!   
  	/* must be a normal interactive game */
  	armornvy=AORN;
  
***************
*** 368,374
  	else {
  		mvprintw(LINES-3,COLS-20,"nation...%s",ntn[country].name);
  		mvprintw(LINES-2,COLS-20,"treasury.%ld",ntn[country].tgold);
! 		mvprintw(LINES-1,COLS-20,"score....%d",ntn[country].score);
  	}
  }
  

--- 376,382 -----
  	else {
  		mvprintw(LINES-3,COLS-20,"nation...%s",ntn[country].name);
  		mvprintw(LINES-2,COLS-20,"treasury.%ld",ntn[country].tgold);
! 		mvprintw(LINES-1,COLS-20,"score....%ld",ntn[country].score);
  	}
  }
  
*** oldmakeworld.c	Fri Mar 18 17:27:03 1988
--- makeworld.c	Fri Mar 18 17:27:23 1988
***************
*** 596,602
  			AXLOC=x;
  			AYLOC=y;
  			ASTAT=GARRISON;
! 			ASOLD=750+100*rand()%10;
  			ATYPE=A_INFANTRY;
  			armynum++;
  			AMOVE=8;

--- 596,602 -----
  			AXLOC=x;
  			AYLOC=y;
  			ASTAT=GARRISON;
! 			ASOLD=750+100*(rand()%10);
  			ATYPE=A_INFANTRY;
  			armynum++;
  			AMOVE=8;
***************
*** 603,609
  			AXLOC=x;
  			AYLOC=y;
  			ASTAT=ATTACK;
! 			ASOLD=750+100*rand()%10;
  			ATYPE=A_INFANTRY;
  			armynum++;
  		}

--- 603,609 -----
  			AXLOC=x;
  			AYLOC=y;
  			ASTAT=ATTACK;
! 			ASOLD=750+100*(rand()%10);
  			ATYPE=A_INFANTRY;
  			armynum++;
  		}
***************
*** 694,700
  				AXLOC=x;
  				AYLOC=y;
  				ASTAT=ATTACK;
! 				ASOLD=200+100*rand()%10;
  				ATYPE=A_INFANTRY;
  				if(armynum<MAXARM-1) armynum++;
  			}

--- 694,700 -----
  				AXLOC=x;
  				AYLOC=y;
  				ASTAT=ATTACK;
! 				ASOLD=200+100*(rand()%10);
  				ATYPE=A_INFANTRY;
  				if(armynum<MAXARM-1) armynum++;
  			}
***************
*** 703,709
  				ntn[NNOMAD].arm[army2num].xloc=x;
  				ntn[NNOMAD].arm[army2num].yloc=y;
  				ntn[NNOMAD].arm[army2num].stat=ATTACK;
! 				ntn[NNOMAD].arm[army2num].sold=100+100*rand()%15;
  				ntn[NNOMAD].arm[army2num].unittyp=A_CAVALRY;
  				if(army2num<MAXARM-1) army2num++;
  			}

--- 703,709 -----
  				ntn[NNOMAD].arm[army2num].xloc=x;
  				ntn[NNOMAD].arm[army2num].yloc=y;
  				ntn[NNOMAD].arm[army2num].stat=ATTACK;
! 				ntn[NNOMAD].arm[army2num].sold=100+100*(rand()%15);
  				ntn[NNOMAD].arm[army2num].unittyp=A_CAVALRY;
  				if(army2num<MAXARM-1) army2num++;
  			}
*** oldmove.c	Fri Mar 18 17:27:03 1988
--- move.c	Fri Mar 18 17:27:23 1988
***************
*** 695,700
  	int count=0;
  	int i,j;
  	/*flee*/
  	/*check if next to anybody of the sectors owners race*/
  	for(i=x-2;i<=x+2;i++) for(j=y-2;j<=y+2;j++)
  		if(i>=0&&i<MAPX&&j>=0&&j<MAPY

--- 695,702 -----
  	int count=0;
  	int i,j;
  	/*flee*/
+ 	sct[x][y].people*=6;
+ 	sct[x][y].people/=10;
  	/*check if next to anybody of the sectors owners race*/
  	for(i=x-2;i<=x+2;i++) for(j=y-2;j<=y+2;j++)
  		if(i>=0&&i<MAPX&&j>=0&&j<MAPY
***************
*** 737,740
  		if(z==0) SADJDES2;
  	}
  }
- 

--- 739,741 -----
  		if(z==0) SADJDES2;
  	}
  }
*** oldnewlogin.c	Fri Mar 18 17:27:00 1988
--- newlogin.c	Fri Mar 18 17:27:24 1988
***************
*** 29,35
  	int temp;
  	int more=0; 	/*0 if add another player*/
  	int loop;
! 	int x;
  	char tempo[8];
  	char passwd[8];
  	register i;

--- 29,35 -----
  	int temp;
  	int more=0; 	/*0 if add another player*/
  	int loop;
! 	long x,getmagic();
  	char tempo[8];
  	char passwd[8];
  	register i;
***************
*** 143,149
  				ntn[country].jewels=10000;     /*0   pts*/
  				ntn[country].tiron=10000;     /*0   pts*/
  				ntn[country].tciv= 6000;	/*6   pts*/
! 				ntn[country].tmil= 1500;	/*1.5 pts*/
  				ntn[country].repro=   4;	/*4   pts*/
  				ntn[country].maxmove= 6;	/*1.5 pts*/
  				ntn[country].aplus=   20;	/*2   pts*/

--- 143,149 -----
  				ntn[country].jewels=10000;     /*0   pts*/
  				ntn[country].tiron=10000;     /*0   pts*/
  				ntn[country].tciv= 6000;	/*6   pts*/
! 				ntn[country].tmil= 1350;	/*1.5 pts*/
  				ntn[country].repro=   4;	/*4   pts*/
  				ntn[country].maxmove= 6;	/*1.5 pts*/
  				ntn[country].aplus=   20;	/*2   pts*/
***************
*** 186,192
  				ntn[country].jewels=10000;
  				ntn[country].tiron=10000;
  				ntn[country].tciv=4000;	/*4   pts*/
! 				ntn[country].tmil=2500;	/*2.5 pts*/
  				ntn[country].repro=8; 	/*10  pts*/
  				ntn[country].maxmove=6;	/*1.5 pts*/
  				ntn[country].aplus=00;	/*0   pts*/

--- 186,192 -----
  				ntn[country].jewels=10000;
  				ntn[country].tiron=10000;
  				ntn[country].tciv=4000;	/*4   pts*/
! 				ntn[country].tmil=2250;	/*2.5 pts*/
  				ntn[country].repro=8; 	/*10  pts*/
  				ntn[country].maxmove=6;	/*1.5 pts*/
  				ntn[country].aplus=00;	/*0   pts*/
***************
*** 208,214
  				ntn[country].jewels=10000;	/*0   pts*/
  				ntn[country].tiron=10000;	/*0   pts*/
  				ntn[country].tciv=6000;		/*6   pts*/
! 				ntn[country].tmil=1000;		/*1   pts*/
  				ntn[country].repro=5;		/*5   pts*/
  				ntn[country].maxmove=10;	/*2.5 pts*/
  				ntn[country].aplus=10;	/*1   pts*/

--- 208,214 -----
  				ntn[country].jewels=10000;	/*0   pts*/
  				ntn[country].tiron=10000;	/*0   pts*/
  				ntn[country].tciv=6000;		/*6   pts*/
! 				ntn[country].tmil=900;		/*1   pts*/
  				ntn[country].repro=5;		/*5   pts*/
  				ntn[country].maxmove=10;	/*2.5 pts*/
  				ntn[country].aplus=10;	/*1   pts*/
***************
*** 264,270
  			printf("\t1. population (1000/pt):\t\tnow have %ld civilians\n",ntn[country].tciv);
  			printf("\t2. more gold ($100000/pt):\t\tnow have %ld gold pieces\n",ntn[country].tgold);
  			printf("\t3. better location:\t\t\tlocation is now is %c\n",ntn[country].location);
! 			printf("\t4. more soldiers (1000/pt):\t\tnow have %ld soldiers\n",ntn[country].tmil);
  			printf("\t5. better attack (10%%/pt):\t\tnow is +%d\n ",ntn[country].aplus);
  			printf("\t6. better defence (10%%/pt):\t\tnow is +%d\n",ntn[country].dplus);
  			printf("\t7. higher reproduction (2%%/pt):\t\trate is now %d%%\n",ntn[country].repro);

--- 264,270 -----
  			printf("\t1. population (1000/pt):\t\tnow have %ld civilians\n",ntn[country].tciv);
  			printf("\t2. more gold ($100000/pt):\t\tnow have %ld gold pieces\n",ntn[country].tgold);
  			printf("\t3. better location:\t\t\tlocation is now is %c\n",ntn[country].location);
! 			printf("\t4. more soldiers (900/pt):\t\tnow have %ld soldiers\n",ntn[country].tmil);
  			printf("\t5. better attack (10%%/pt):\t\tnow is +%d\n ",ntn[country].aplus);
  			printf("\t6. better defence (10%%/pt):\t\tnow is +%d\n",ntn[country].dplus);
  			printf("\t7. higher reproduction (2%%/pt):\t\trate is now %d%%\n",ntn[country].repro);
***************
*** 276,283
  
  
  			printf("\nWhat option to buy:");
! 			scanf("%d",&n);
! 			switch(n) {
  
  			case 1:
  				printf("additional population costs 1 pt per 1000\n");

--- 276,282 -----
  
  
  			printf("\nWhat option to buy:");
! 			if(scanf("%d",&n)==1) switch(n) {
  
  			case 1:
  				printf("additional population costs 1 pt per 1000\n");
***************
*** 353,359
  				break;
  			case 4:
  				printf("you start with %ld soldiers\n",ntn[country].tmil);
! 				printf("additional military costs 1 /  1000\n");
  				printf("how many points you wish:");
  				scanf("%d",&temp);
  				putchar('\n');

--- 352,358 -----
  				break;
  			case 4:
  				printf("you start with %ld soldiers\n",ntn[country].tmil);
! 				printf("additional military costs 1 / 900 men\n");
  				printf("how many points you wish:");
  				scanf("%d",&temp);
  				putchar('\n');
***************
*** 359,365
  				putchar('\n');
  				if(points >= temp) {
  					points -= temp;
! 					ntn[country].tmil+=temp*1000;
  				}
  				else printf("You dont have enough points left");
  				break;

--- 358,364 -----
  				putchar('\n');
  				if(points >= temp) {
  					points -= temp;
! 					ntn[country].tmil+=temp*900;
  				}
  				else printf("You dont have enough points left");
  				break;
***************
*** 407,413
  					printf("you have the maximum rate");
  					break;
  				}
! 				printf("how many points you wish:");
  				scanf("%d",&temp);
  				putchar('\n');
  				if(points >= (temp*2)) {

--- 406,412 -----
  					printf("you have the maximum rate");
  					break;
  				}
! 				printf("how many points of repro to buy:");
  				scanf("%d",&temp);
  				putchar('\n');
  				if(points >= (temp*2)) {
*** oldupdate.c	Fri Mar 18 17:27:03 1988
--- update.c	Fri Mar 18 17:27:24 1988
***************
*** 29,35
  	register int i, j;
  	register int x,y;
  	int moved,armynum,nvynum,done,finis=0, number=0;
! 	int food,iron;
  	char command[80];
  	int execed[MAXNTN];
  	long	city_pop, cap_pop;

--- 29,35 -----
  	register int i, j;
  	register int x,y;
  	int moved,armynum,nvynum,done,finis=0, number=0;
! 	long food,iron,xx;
  	char command[80];
  	int execed[MAXNTN];
  	long	city_pop, cap_pop;
***************
*** 286,292
  			if(magic(sptr->owner,MINER)==1) iron*=2;
  			if(magic(sptr->owner,STEEL)==1) iron*=2;
  			nptr->tiron += iron;
! 			nptr->tgold += iron*TAXIRON/100;
  		}
  		/*harvest food*/
  		else if(sptr->designation==DFARM) {

--- 286,292 -----
  			if(magic(sptr->owner,MINER)==1) iron*=2;
  			if(magic(sptr->owner,STEEL)==1) iron*=2;
  			nptr->tiron += iron;
! 			nptr->tgold += iron*TAXIRON/100L;
  		}
  		/*harvest food*/
  		else if(sptr->designation==DFARM) {
***************
*** 290,296
  		}
  		/*harvest food*/
  		else if(sptr->designation==DFARM) {
! 			food= todigit(sptr->vegetation)*sptr->people;
  			nptr->tfood += food;
  			nptr->tgold += food*TAXFOOD/100;
  		}

--- 290,296 -----
  		}
  		/*harvest food*/
  		else if(sptr->designation==DFARM) {
! 			food= (long) todigit(sptr->vegetation)* (long)sptr->people;
  			nptr->tfood += food;
  			nptr->tgold += food*TAXFOOD/100L;
  		}
***************
*** 292,298
  		else if(sptr->designation==DFARM) {
  			food= todigit(sptr->vegetation)*sptr->people;
  			nptr->tfood += food;
! 			nptr->tgold += food*TAXFOOD/100;
  		}
  		/*gold mines produce gold*/
  		else if(sptr->designation==DGOLDMINE) {

--- 292,298 -----
  		else if(sptr->designation==DFARM) {
  			food= (long) todigit(sptr->vegetation)* (long)sptr->people;
  			nptr->tfood += food;
! 			nptr->tgold += food*TAXFOOD/100L;
  		}
  		/*gold mines produce gold*/
  		else if(sptr->designation==DGOLDMINE) {
***************
*** 297,304
  		/*gold mines produce gold*/
  		else if(sptr->designation==DGOLDMINE) {
  			if(magic(sptr->owner,MINER)==1){
! 				nptr->tgold +=  2*sptr->gold * sptr->people * TAXGOLD/100;
! 				nptr->jewels += 2*sptr->gold * sptr->people;
  			}
  			else {
  				nptr->tgold += sptr->gold * sptr->people * TAXGOLD/100;

--- 297,304 -----
  		/*gold mines produce gold*/
  		else if(sptr->designation==DGOLDMINE) {
  			if(magic(sptr->owner,MINER)==1){
! 				nptr->tgold +=  2*sptr->gold * (long)sptr->people * TAXGOLD/100L;
! 				nptr->jewels += 2*sptr->gold * (long)sptr->people;
  			}
  			else {
  				nptr->tgold += sptr->gold * (long)sptr->people * TAXGOLD/100L;
***************
*** 301,308
  				nptr->jewels += 2*sptr->gold * sptr->people;
  			}
  			else {
! 				nptr->tgold += sptr->gold * sptr->people * TAXGOLD/100;
! 				nptr->jewels += sptr->gold * sptr->people;
  			}
  		}
  		else if(sptr->designation==DCAPITOL) {

--- 301,308 -----
  				nptr->jewels += 2*sptr->gold * (long)sptr->people;
  			}
  			else {
! 				nptr->tgold += sptr->gold * (long)sptr->people * TAXGOLD/100L;
! 				nptr->jewels += sptr->gold * (long)sptr->people;
  			}
  		}
  		else if(sptr->designation==DCAPITOL) {
***************
*** 316,323
  			}
  
  			if( magic(sptr->owner, ARCHITECT ) ) {
! 				city_pop *= 2;
! 				cap_pop *= 2;
  			}
  
  			nptr->tgold += (long) city_pop * TAXCITY / 100;

--- 316,323 -----
  			}
  
  			if( magic(sptr->owner, ARCHITECT ) ) {
! 				city_pop *= 2L;
! 				cap_pop *= 2L;
  			}
  
  			nptr->tgold += (long) city_pop * TAXCITY / 100L;
***************
*** 320,327
  				cap_pop *= 2;
  			}
  
! 			nptr->tgold += (long) city_pop * TAXCITY / 100;
! 			nptr->tgold += (long) cap_pop * TAXCAP / 100;
  		}
  		else if(sptr->designation==DCITY) {
  			city_pop = sptr->people;

--- 320,327 -----
  				cap_pop *= 2L;
  			}
  
! 			nptr->tgold += (long) city_pop * TAXCITY / 100L;
! 			nptr->tgold += (long) cap_pop * TAXCAP / 100L;
  		}
  		else if(sptr->designation==DCITY) {
  			city_pop = sptr->people;
***************
*** 326,333
  		else if(sptr->designation==DCITY) {
  			city_pop = sptr->people;
  			if( magic(sptr->owner, ARCHITECT ) )
! 				city_pop *= 2;
! 			nptr->tgold += (long) city_pop * TAXCITY / 100;
  		}
  		else if(((magic(country,DERVISH)==1)
  		||(magic(country,DESTROYER)==1))

--- 326,333 -----
  		else if(sptr->designation==DCITY) {
  			city_pop = sptr->people;
  			if( magic(sptr->owner, ARCHITECT ) )
! 				city_pop *= 2L;
! 			nptr->tgold += (long) city_pop * TAXCITY / 100L;
  		}
  		else if(((magic(country,DERVISH)==1)
  		||(magic(country,DESTROYER)==1))
***************
*** 334,340
  		&&((sptr->vegetation==ICE)
  		||(sptr->vegetation==DESERT))
  		&&(sptr->people>0)) {
! 			food=6*sptr->people;
  			nptr->tfood += food;
  			nptr->tgold += food*TAXFOOD/100;
  		}

--- 334,340 -----
  		&&((sptr->vegetation==ICE)
  		||(sptr->vegetation==DESERT))
  		&&(sptr->people>0)) {
! 			food=6L*sptr->people;
  			nptr->tfood += food;
  			nptr->tgold += food*TAXFOOD/100L;
  		}
***************
*** 336,342
  		&&(sptr->people>0)) {
  			food=6*sptr->people;
  			nptr->tfood += food;
! 			nptr->tgold += food*TAXFOOD/100;
  		}
  	}
  

--- 336,342 -----
  		&&(sptr->people>0)) {
  			food=6L*sptr->people;
  			nptr->tfood += food;
! 			nptr->tgold += food*TAXFOOD/100L;
  		}
  	}
  
***************
*** 436,442
  				printf("error opening %s\n",command);
  				} else {
  				fprintf(fpmsg,"%s notice from program\n%s\n",ntn[country].name,ntn[country].name);
! 				fprintf(fpmsg,"%s famine hits city at %d,%d in %s.-> %d people reduced by %d\n%s\n",ntn[country].name,x,y,ntn[country].name,sptr->people,city_pop,ntn[country].name);
  				fprintf(fpmsg,"END\n");
  				fclose(fpmsg);
  				}

--- 436,442 -----
  				printf("error opening %s\n",command);
  				} else {
  				fprintf(fpmsg,"%s notice from program\n%s\n",ntn[country].name,ntn[country].name);
! 				fprintf(fpmsg,"%s famine hits city at %d,%d in %s.-> %ld people reduced by %ld\n%s\n",ntn[country].name,x,y,ntn[country].name,sptr->people,city_pop,ntn[country].name);
  				fprintf(fpmsg,"END\n");
  				fclose(fpmsg);
  				}
***************
*** 444,450
  		}
  		/*this state can occur if few people live in cities*/
  		if(ntn[country].tfood<0) {
! 			ntn[country].tfood=0;
  		}
  		else if(ntn[country].tfood>FOODTHRESH*ntn[country].tciv) {
  			ntn[country].tgold+=ntn[country].tfood-FOODTHRESH*ntn[country].tciv;

--- 444,450 -----
  		}
  		/*this state can occur if few people live in cities*/
  		if(ntn[country].tfood<0) {
! 			ntn[country].tfood=0L;
  		}
  		else if(ntn[country].tfood>FOODTHRESH*ntn[country].tciv) {
  			ntn[country].tgold+=ntn[country].tfood-FOODTHRESH*ntn[country].tciv;
***************
*** 452,460
  		}
  
  		if(ntn[country].tgold>GOLDTHRESH*ntn[country].jewels){
! 			x=ntn[country].tgold-GOLDTHRESH*ntn[country].jewels;
! 			ntn[country].jewels += x/GOLDTHRESH;
! 			ntn[country].tgold  -= x;
  		}
  		else if(ntn[country].tgold > JEWELTHRESH * ntn[country].jewels){
  			fprintf(fnews,"3.\tTAX REVOLT IN NATION %s\n",ntn[country].name);

--- 452,460 -----
  		}
  
  		if(ntn[country].tgold>GOLDTHRESH*ntn[country].jewels){
! 			xx=ntn[country].tgold-GOLDTHRESH*ntn[country].jewels;
! 			ntn[country].jewels += xx/GOLDTHRESH;
! 			ntn[country].tgold  -= xx;
  		}
  		else if(ntn[country].tgold > JEWELTHRESH * ntn[country].jewels){
  			fprintf(fnews,"3.\tTAX REVOLT IN NATION %s\n",ntn[country].name);
***************
*** 459,464
  		else if(ntn[country].tgold > JEWELTHRESH * ntn[country].jewels){
  			fprintf(fnews,"3.\tTAX REVOLT IN NATION %s\n",ntn[country].name);
  		}
  	}
  
  	fclose(fnews);

--- 459,482 -----
  		else if(ntn[country].tgold > JEWELTHRESH * ntn[country].jewels){
  			fprintf(fnews,"3.\tTAX REVOLT IN NATION %s\n",ntn[country].name);
  		}
+ 
+ 		/* fix overflow problems */
+         	if(ntn[country].tgold < -500000000)  {
+ 			fprintf(fnews,"2.\tVariable Overflow - gold in nation %s\n",ntn[country].name);
+ 			ntn[country].tgold=500000000;
+ 		}
+         	if(ntn[country].tfood < -500000000)  {
+ 			fprintf(fnews,"2.\tVariable Overflow - food in nation %s\n",ntn[country].name);
+ 			ntn[country].tfood=500000000;
+ 		}
+         	if(ntn[country].jewels < -500000000) {
+ 			fprintf(fnews,"2.\tVariable Overflow - jewels in nation %s\n",ntn[country].name);
+ 			ntn[country].jewels=500000000;
+ 		}
+         	if(ntn[country].tiron < -500000000)  {
+ 			fprintf(fnews,"2.\tVariable Overflow - iron in nation %s\n",ntn[country].name);
+ 			ntn[country].tiron=500000000;
+ 		}
  	}
  
  	fclose(fnews);
***************
*** 462,467
  	}
  
  	fclose(fnews);
  	score();
  
  	sprintf(command,"rm %s*",exefile);

--- 480,486 -----
  	}
  
  	fclose(fnews);
+ 	cheat();
  	score();
  
  	sprintf(command,"rm %s*",exefile);
***************
*** 629,632
    	int x;
    	printf("\nupdating scores for all nations\n");
    	for(x=1;x<MAXNTN;x++) if(ntn[x].active!=0) ntn[x].score += score_one(x);
  }

--- 648,682 -----
    	int x;
    	printf("\nupdating scores for all nations\n");
    	for(x=1;x<MAXNTN;x++) if(ntn[x].active!=0) ntn[x].score += score_one(x);
+ }
+ 
+ /* this routine cheats in favor of npc nations */
+ cheat()
+ {
+ 	int x,y;
+ 	int bonus=0, count=0, npcavg, pcavg;
+   	for(x=1;x<MAXNTN;x++) if(ntn[x].active!=0) 
+ 		if(ntn[x].active==1)  {
+ 			bonus+=ntn[x].aplus+ntn[x].dplus;
+ 			count++;
+ 		}
+ 	if(count==0) return;
+ 	pcavg = bonus / count;
+ 
+ 	bonus=0;
+ 	count=0;
+   	for(x=1;x<MAXNTN;x++) if(ntn[x].active!=0) 
+ 		if(ntn[x].active!=1)  {
+ 			bonus+=ntn[x].aplus+ntn[x].dplus;
+ 			count++;
+ 		}
+ 	if(count==0) return;
+ 	npcavg = bonus / count;
+   	for(x=1;x<MAXNTN;x++) if(ntn[x].active>1) {
+ 		if(rand()%100 < (pcavg-npcavg)) {
+ 			if(ntn[x].aplus>ntn[x].dplus) ntn[x].dplus+=5;
+ 			else ntn[x].aplus+=5;
+ 			printf("npc cheat routine - add 5%% to nation %s combat skill\n",ntn[x].name);
+ 		}
+ 	}
  }
*** oldmagic.c	Fri Mar 18 17:26:58 1988
--- magic.c	Fri Mar 18 17:27:24 1988
***************
*** 24,29
  /*do nothing if that player has that power or it is not permitted*/
  /*getmagic() returns the value of the power gained, and stores it in power*/
  
  getmagic()
  {
  int newpower;

--- 24,30 -----
  /*do nothing if that player has that power or it is not permitted*/
  /*getmagic() returns the value of the power gained, and stores it in power*/
  
+ long
  getmagic()
  {
  	long newpower;
***************
*** 26,37
  
  getmagic()
  {
! int newpower;
!   	newpower=1<<rand()%MAXPOWER;
! 	switch(newpower){
! 	case WARRIOR:
! 	case CAPTAIN:
! 	case WARLORD:
  		if(magic(country,WARRIOR)!=1){
  			ntn[country].powers|=WARRIOR;
  			return(WARRIOR);

--- 27,35 -----
  long
  getmagic()
  {
! 	long newpower;
!   	newpower=1L<<(rand()%MAXPOWER);
! 	if((newpower==WARRIOR)||(newpower==CAPTAIN)||(newpower==WARLORD)){
  		if(magic(country,WARRIOR)!=1){
  			ntn[country].powers|=WARRIOR;
  			return(WARRIOR);
***************
*** 44,54
  			ntn[country].powers|=WARLORD;
  			return(WARLORD);
  		}
! 		break;
! 	case MI_MONST:
! 	case AV_MONST:
! 	case MA_MONST:
! 		if(ntn[country].race!=ORC) return(0);
  		if(magic(country,MI_MONST)!=1){
  			ntn[country].powers|=MI_MONST;
  			return(MI_MONST);

--- 42,50 -----
  			ntn[country].powers|=WARLORD;
  			return(WARLORD);
  		}
! 		else return(0L);
! 	}else if((newpower==MI_MONST) ||(newpower==AV_MONST) ||(newpower==MA_MONST)){
! 		if(ntn[country].race!=ORC) return(0L);
  		if(magic(country,MI_MONST)!=1){
  			ntn[country].powers|=MI_MONST;
  			return(MI_MONST);
***************
*** 61,78
  			ntn[country].powers|=MA_MONST;
  			return(MA_MONST);
  		}
! 		break;
! 	case SPY:
! 	case KNOWALL:
! 	case DERVISH:
! 	case HIDDEN:
! 	case ARCHITECT:
! 	case URBAN:
! 	case THE_VOID:
! 	case HEALER:
! 	case ARCHER:
! 	case CAVALRY:
! 		if(magic(country,newpower)==1) return(0);
  		ntn[country].powers|=newpower;
  		return(newpower);
  	case DESTROYER:

--- 57,74 -----
  			ntn[country].powers|=MA_MONST;
  			return(MA_MONST);
  		}
! 		else return(0L);
! 	}else if((newpower==SPY)
! 	||(newpower==KNOWALL)
! 	||(newpower==DERVISH)
! 	||(newpower==HIDDEN)
! 	||(newpower==ARCHITECT)
! 	||(newpower==URBAN)
! 	||(newpower==THE_VOID)
! 	||(newpower==HEALER)
! 	||(newpower==ARCHER)
! 	||(newpower==CAVALRY)){
! 		if(magic(country,newpower)==1) return(0L);
  		ntn[country].powers|=newpower;
  		return(newpower);
  	}else if(newpower==DESTROYER){
***************
*** 75,81
  		if(magic(country,newpower)==1) return(0);
  		ntn[country].powers|=newpower;
  		return(newpower);
! 	case DESTROYER:
  		if((ntn[country].race!=ELF)&&(magic(country,DESTROYER)!=1)){
  			ntn[country].powers|=DESTROYER;
  			return(DESTROYER);

--- 71,77 -----
  		if(magic(country,newpower)==1) return(0L);
  		ntn[country].powers|=newpower;
  		return(newpower);
! 	}else if(newpower==DESTROYER){
  		if((ntn[country].race!=ELF)&&(magic(country,DESTROYER)!=1)){
  			ntn[country].powers|=DESTROYER;
  			return(DESTROYER);
***************
*** 80,87
  			ntn[country].powers|=DESTROYER;
  			return(DESTROYER);
  		}
! 		break;
! 	case VAMPIRE:
  		if((ntn[country].race!=ELF)&&(magic(country,VAMPIRE)!=1)){
  			ntn[country].powers|=VAMPIRE;
  			return(VAMPIRE);

--- 76,83 -----
  			ntn[country].powers|=DESTROYER;
  			return(DESTROYER);
  		}
! 		return(0L);
! 	}else if(newpower==VAMPIRE){
  		if((ntn[country].race!=ELF)&&(magic(country,VAMPIRE)!=1)){
  			ntn[country].powers|=VAMPIRE;
  			return(VAMPIRE);
***************
*** 86,93
  			ntn[country].powers|=VAMPIRE;
  			return(VAMPIRE);
  		}
! 		break;
! 	case MINER:
  		if((ntn[country].race!=ELF)&&(ntn[country].race!=DWARF)&&(magic(country,MINER)!=1)){
  			ntn[country].powers|=MINER;
  			return(MINER);

--- 82,89 -----
  			ntn[country].powers|=VAMPIRE;
  			return(VAMPIRE);
  		}
! 		return(0L);
! 	}else if(newpower==MINER){
  		if((ntn[country].race!=ELF)&&(ntn[country].race!=DWARF)&&(magic(country,MINER)!=1)){
  			ntn[country].powers|=MINER;
  			return(MINER);
***************
*** 92,101
  			ntn[country].powers|=MINER;
  			return(MINER);
  		}
! 		break;
! 	case STEEL:
! 		if(magic(country,STEEL)==1) return(0);
! 		if(magic(country,MINER)!=1) return(0);
  		ntn[country].powers|=STEEL;
  		return(STEEL);
  	case BREEDER:

--- 88,97 -----
  			ntn[country].powers|=MINER;
  			return(MINER);
  		}
! 		return(0L);
! 	}else if(newpower==STEEL){
! 		if(magic(country,STEEL)==1) return(0L);
! 		if(magic(country,MINER)!=1) return(0L);
  		ntn[country].powers|=STEEL;
  		return(STEEL);
  	}else if(newpower==BREEDER){
***************
*** 98,106
  		if(magic(country,MINER)!=1) return(0);
  		ntn[country].powers|=STEEL;
  		return(STEEL);
! 	case BREEDER:
! 		if(magic(country,BREEDER)==1) return(0);
! 		if(ntn[country].race!=ORC) return(0);
  		ntn[country].powers|=BREEDER;
  		return(BREEDER);
  	}

--- 94,102 -----
  		if(magic(country,MINER)!=1) return(0L);
  		ntn[country].powers|=STEEL;
  		return(STEEL);
! 	}else if(newpower==BREEDER){
! 		if(magic(country,BREEDER)==1) return(0L);
! 		if(ntn[country].race!=ORC) return(0L);
  		ntn[country].powers|=BREEDER;
  		return(BREEDER);
  	}
***************
*** 104,110
  		ntn[country].powers|=BREEDER;
  		return(BREEDER);
  	}
! 	return(0);
  }
  
  /*form to interactively get a magic power*/

--- 100,106 -----
  		ntn[country].powers|=BREEDER;
  		return(BREEDER);
  	}
! 	return(0L);
  }
  
  /*form to interactively get a magic power*/
***************
*** 110,117
  /*form to interactively get a magic power*/
  domagic()
  {
!   	int x, count, done=0, loop=0, i, chance;
! 	long price;
  	short isgod=0;
  	if(country==0) {
  		isgod=1;

--- 106,113 -----
  /*form to interactively get a magic power*/
  domagic()
  {
!   	int count, done=0, loop=0, i, chance;
! 	long price,x;
  	short isgod=0;
  	if(country==0) {
  		isgod=1;
***************
*** 184,190
  		for (i=1; i<count-3; i++) {
  			price <<= 1;
  			if (price > 500000000)
! 				break;
  		}
  
  		if((ntn[country].race==ORC)&& ntn[country].jewels>=100000L){

--- 180,186 -----
  		for (i=1; i<count-3; i++) {
  			price <<= 1;
  			if (price > 500000000)
! 				return(0);
  		}
  
  		if((ntn[country].race==ORC)&& ntn[country].jewels>=100000L){
***************
*** 228,234
  					CHGMGK;
  					exenewmgk(x);
  					refresh();
! 					break;
  				}
  				if (loop >= 500)
  					mvaddstr(count++,0,"You have too many powers!");

--- 224,230 -----
  					CHGMGK;
  					exenewmgk(x);
  					refresh();
! 					return(0);
  				}
  				if (loop >= 500)
  					mvaddstr(count++,0,"You have too many powers!");
***************
*** 271,277
  		printf("nation %s taken over by %s\n",ntn[country].name,ntn[save].name);
  		fprintf(fnews,"1.\tnation %s taken over by %s\n",ntn[country].name,ntn[save].name);
  		}
! 		else DESTROY;
  		destroy();
  		y=country;
  		country=save;

--- 267,279 -----
  		printf("nation %s taken over by %s\n",ntn[country].name,ntn[save].name);
  		fprintf(fnews,"1.\tnation %s taken over by %s\n",ntn[country].name,ntn[save].name);
  		}
! 		else {
! 			DESTROY;
! 			if ((fnews=fopen(newsfile,"w"))==NULL){
! 				printf("error opening newsfile");
! 				exit(1);
! 			}
! 		}
  		destroy();
  		if(isupdate!=1) fclose(fnews);
  		y=country;
***************
*** 273,278
  		}
  		else DESTROY;
  		destroy();
  		y=country;
  		country=save;
  		return(y);

--- 275,281 -----
  			}
  		}
  		destroy();
+ 		if(isupdate!=1) fclose(fnews);
  		y=country;
  		country=save;
  		return(y);
***************
*** 283,288
  
  /*execute new magic*/
  exenewmgk(newpower)
  {
  	short x,y;
  	switch(newpower){

--- 286,292 -----
  
  /*execute new magic*/
  exenewmgk(newpower)
+ long newpower;
  {
  	short x,y;
  	if(newpower==WARRIOR) {
***************
*** 285,293
  exenewmgk(newpower)
  {
  	short x,y;
! 	switch(newpower){
! 		case WARRIOR:
! 			ntn[country].aplus+=10;
  			ntn[country].dplus+=10;
  			break;
  		case CAPTAIN:

--- 289,323 -----
  long newpower;
  {
  	short x,y;
! 	if(newpower==WARRIOR) {
! 		ntn[country].aplus+=10;
! 		ntn[country].dplus+=10;
! 		return(0L);
! 	}
! 	if(newpower==CAPTAIN) {
! 		ntn[country].aplus+=10;
! 		ntn[country].dplus+=10;
! 		return(0L);
! 	}
! 	if(newpower==WARLORD) {
! 		ntn[country].aplus+=10;
! 		ntn[country].dplus+=10;
! 		return(0L);
! 	}
! 	if(newpower==HEALER) {
! 		if(ntn[country].race==ORC) {
! 			if(ntn[country].repro<=11)
! 				ntn[country].repro+=2;
! 			else	ntn[country].repro=13;
! 		}
! 		else if(ntn[country].repro<=8){
! 			ntn[country].repro=10;
! 		}
! 		else if(ntn[country].repro==9){
! 			ntn[country].repro=10;
! 			ntn[country].dplus+=5;
! 		}
! 		else if(ntn[country].repro>=10){
  			ntn[country].dplus+=10;
  		}
  		return(0L);
***************
*** 289,329
  		case WARRIOR:
  			ntn[country].aplus+=10;
  			ntn[country].dplus+=10;
! 			break;
! 		case CAPTAIN:
! 			ntn[country].aplus+=10;
! 			ntn[country].dplus+=10;
! 			break;
! 		case WARLORD:
! 			ntn[country].aplus+=10;
! 			ntn[country].dplus+=10;
! 			break;
! 		case HEALER:
! 			if(ntn[country].race==ORC) {
! 				if(ntn[country].repro<=11)
! 					ntn[country].repro+=2;
! 				else	ntn[country].repro=13;
! 			}
! 			else if(ntn[country].repro<=8){
! 				ntn[country].repro=10;
! 			}
! 			else if(ntn[country].repro==9){
! 				ntn[country].repro=10;
! 				ntn[country].dplus+=5;
! 			}
! 			else if(ntn[country].repro>=10){
! 				ntn[country].dplus+=10;
! 			}
! 			break;
! 		case DESTROYER:
! 			for(x=ntn[country].capx-3;x<=ntn[country].capx+3;x++) {
! 				for(y=ntn[country].capy-3;y<=ntn[country].capy+3;y++){
! 					if((ONMAP)
! 					&&(sct[x][y].altitude!=WATER)
! 					&&(isdigit(sct[x][y].vegetation)!=0)){
! 						sct[x][y].vegetation=DESERT;
! 						sct[x][y].designation=DESERT;
! 					}
  				}
  			}
    			updmove(ntn[country].race);

--- 319,335 -----
  		}
  		else if(ntn[country].repro>=10){
  			ntn[country].dplus+=10;
! 		}
! 		return(0L);
! 	}
! 	if(newpower==DESTROYER) {
! 		for(x=ntn[country].capx-3;x<=ntn[country].capx+3;x++) {
! 			for(y=ntn[country].capy-3;y<=ntn[country].capy+3;y++){
! 				if((ONMAP)
! 				&&(sct[x][y].altitude!=WATER)
! 				&&(isdigit(sct[x][y].vegetation)!=0)){
! 					sct[x][y].vegetation=DESERT;
! 					sct[x][y].designation=DESERT;
  				}
  			}
  		}
***************
*** 326,358
  					}
  				}
  			}
!   			updmove(ntn[country].race);
! 			break;
! 		case DERVISH:
!   			updmove(ntn[country].race);
!   			break;
! 		case MI_MONST:
! 		case AV_MONST:
! 		case MA_MONST:
! 		case SPY:
! 		case KNOWALL:
! 		case HIDDEN:
! 		case THE_VOID:
! 		case ARCHITECT:
! 		case MINER:
! 			break;
! 		case VAMPIRE:
! 			ntn[country].aplus-=35;
! 			ntn[country].dplus-=35;
! 			ntn[country].maxmove-=2;
! 			break;
! 		case URBAN:
! 			if(ntn[country].race==ORC) {
! 				ntn[country].repro+=3;
! 				if(ntn[country].repro>=13){
! 				ntn[country].maxmove+=2*(ntn[country].repro-13);
! 				ntn[country].repro=13;
! 				}
  			}
  			else if(ntn[country].repro<=9){
  				ntn[country].repro+=3;

--- 332,367 -----
  					sct[x][y].designation=DESERT;
  				}
  			}
! 		}
! 		updmove(ntn[country].race);
! 		return(0L);
! 	}
! 	if(newpower==DERVISH) {
! 		updmove(ntn[country].race);
! 		return(0L);
! 	}
! 	if((newpower==MI_MONST)
! 	||(newpower==AV_MONST)
! 	||(newpower==MA_MONST)
! 	||(newpower==SPY)
! 	||(newpower==KNOWALL)
! 	||(newpower==HIDDEN)
! 	||(newpower==THE_VOID)
! 	||(newpower==ARCHITECT)
! 	||(newpower==MINER))
! 		return(0L);
! 	if(newpower==VAMPIRE) {
! 		ntn[country].aplus-=35;
! 		ntn[country].dplus-=35;
! 		ntn[country].maxmove-=2;
! 		return(0L);
! 	}
! 	if(newpower==URBAN) {
! 		if(ntn[country].race==ORC) {
! 			ntn[country].repro+=3;
! 			if(ntn[country].repro>=13){
! 			ntn[country].maxmove+=2*(ntn[country].repro-13);
! 			ntn[country].repro=13;
  			}
  		}
  		else if(ntn[country].repro<=9){
***************
*** 354,377
  				ntn[country].repro=13;
  				}
  			}
! 			else if(ntn[country].repro<=9){
! 				ntn[country].repro+=3;
! 			}
! 			else {
! 				ntn[country].maxmove+=2*(ntn[country].repro-9);
! 				ntn[country].repro=12;
! 			}
! 			break;
! 		case STEEL:
! 			break;
! 		case ARCHER:
! 			ntn[country].dplus+=10;
! 			break;
! 		case CAVALRY:
! 			ntn[country].aplus+=10;
! 			ntn[country].maxmove+=6;
! 			break;
! 		case BREEDER:
  			ntn[country].repro+=3;
  			ntn[country].dplus-=10;
  			ntn[country].dplus-=10;

--- 363,370 -----
  			ntn[country].maxmove+=2*(ntn[country].repro-13);
  			ntn[country].repro=13;
  			}
! 		}
! 		else if(ntn[country].repro<=9){
  			ntn[country].repro+=3;
  		}
  		else {
***************
*** 373,380
  			break;
  		case BREEDER:
  			ntn[country].repro+=3;
! 			ntn[country].dplus-=10;
! 			ntn[country].dplus-=10;
! 			break;
  	}
  }

--- 366,394 -----
  		}
  		else if(ntn[country].repro<=9){
  			ntn[country].repro+=3;
! 		}
! 		else {
! 			ntn[country].maxmove+=2*(ntn[country].repro-9);
! 			ntn[country].repro=12;
! 		}
! 		return(0L);
! 	}
! 	if(newpower==STEEL) {
! 		return(0L);
! 	}
! 	if(newpower==ARCHER) {
! 		ntn[country].dplus+=10;
! 		return(0L);
! 	}
! 	if(newpower==CAVALRY) {
! 		ntn[country].aplus+=10;
! 		ntn[country].maxmove+=6;
! 		return(0L);
! 	}
! 	if(newpower==BREEDER) {
! 		ntn[country].repro+=3;
! 		ntn[country].dplus-=10;
! 		ntn[country].dplus-=10;
! 		return(0L);
  	}
  }



More information about the Comp.sources.bugs mailing list