[comp.sources.games] v08i033: conquer4 - middle earth multi-player game

billr@saab.CNA.TEK.COM (Bill Randle) (09/21/89)

Submitted-by: Adam Bryant <adb@bu-cs.bu.edu>
Posting-number: Volume 8, Issue 33
Archive-name: conquer4/Patch6b
Patch-To: conquer4: Volume 6, Issue 83-96


#!/bin/sh
# this is part 2 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patchV4.6 continued
#
CurArch=2
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
sed 's/^X//' << 'SHAR_EOF' >> patchV4.6
X! 		}
X  
X  		if( TURN!= 1) {
X  		curntn->reputation += rand()%8-3;
X***************
X*** 501,522 ****
X  		else temp = 0;
X  		curntn->farm_ability = min( temp,MAXTGVAL );
X  		}
X  		temp = (minepts/3 + cityfolk/2 + townfolk/2 + blksmths);
X- 		curntn->mine_ability = min( temp,MAXTGVAL );
X  		if( magic(country,MINER) )
X! 			curntn->mine_ability += 15;
X  		if( magic(country,STEEL) )
X! 			curntn->mine_ability += 15;
X  
X  		temp = cityfolk/2 + townfolk/6 + scholars/2;
X  		curntn->knowledge = min( temp,MAXTGVAL );
X  
X  		temp = (curntn->wealth + 10*P_EATRATE + clerics + curntn->popularity)/2;
X  		curntn->popularity = min( temp,MAXTGVAL );
X  
X- 		/* poverty tends 10% to 100-wealth/4 */
X- 		curntn->poverty += (100-curntn->wealth/4-curntn->poverty+5)/10;
X- 
X  		if(magic(country,SLAVER))	curntn->terror+=PWR_NA;
X  		if(magic(country,RELIGION))	curntn->popularity+=PWR_NA;
X  		if(magic(country,URBAN)) {
X--- 512,538 ----
X  		else temp = 0;
X  		curntn->farm_ability = min( temp,MAXTGVAL );
X  		}
X+ 
X+ 		/* calcualte mining ability */
X  		temp = (minepts/3 + cityfolk/2 + townfolk/2 + blksmths);
X  		if( magic(country,MINER) )
X! 			temp += 15;
X  		if( magic(country,STEEL) )
X! 			temp += 15;
X! 		if (temp >= curntn->mine_ability) {
X! 			curntn->mine_ability = min( temp,MAXTGVAL );
X! 		} else {
X! 			curntn->mine_ability -= (curntn->mine_ability - temp)/4;
X! 		}
X  
X+ 		/* calculate knowledge */
X  		temp = cityfolk/2 + townfolk/6 + scholars/2;
X  		curntn->knowledge = min( temp,MAXTGVAL );
X  
X+ 		/* find national popularity */
X  		temp = (curntn->wealth + 10*P_EATRATE + clerics + curntn->popularity)/2;
X  		curntn->popularity = min( temp,MAXTGVAL );
X  
X  		if(magic(country,SLAVER))	curntn->terror+=PWR_NA;
X  		if(magic(country,RELIGION))	curntn->popularity+=PWR_NA;
X  		if(magic(country,URBAN)) {
X***************
X*** 529,535 ****
X  			if(curntn->terror > PWR_NA)
X  				curntn->terror-=PWR_NA;
X  			else	curntn->terror=0;
X! 			curntn->charity+=2;	/* it creeps up */
X  		}
X  		if(magic(country,KNOWALL))	curntn->knowledge+=PWR_NA;
X  		if(magic(country,ARCHITECT)){
X--- 545,554 ----
X  			if(curntn->terror > PWR_NA)
X  				curntn->terror-=PWR_NA;
X  			else	curntn->terror=0;
X! 			if (curntn->charity < 15) {
X! 				/* it creeps up */
X! 				curntn->charity+=2;
X! 			}
X  		}
X  		if(magic(country,KNOWALL))	curntn->knowledge+=PWR_NA;
X  		if(magic(country,ARCHITECT)){
X*** oextcmds.c	Wed Sep 20 21:40:55 1989
X--- extcmds.c	Wed Sep 20 21:41:23 1989
X***************
X*** 44,50 ****
X  		if (P_ATYPE>=MINLEADER && P_ATYPE<MINMONSTER &&
X  		ISCITY(sct[P_AXLOC][P_AYLOC].designation)) addstr(", (R)ule");
X  	}
X! 	mvprintw(LINES-4, 0, "Extended command:");
X  	refresh();
X  
X  	switch(getch()) {
X--- 44,50 ----
X  		if (P_ATYPE>=MINLEADER && P_ATYPE<MINMONSTER &&
X  		ISCITY(sct[P_AXLOC][P_AYLOC].designation)) addstr(", (R)ule");
X  	}
X! 	mvaddstr(LINES-4, 0, "Extended command:");
X  	refresh();
X  
X  	switch(getch()) {
X***************
X*** 80,87 ****
X  	default:		/* unimplemented? */
X  		errormsg("Unimplemented extended command");
X  	}
X- 	makebottom();
X- 	refresh();
X  }
X  
X  /* returns TRUE if uncombinable FALSE if combinable */
X--- 80,85 ----
X*** omakeworl.c	Wed Sep 20 21:40:55 1989
X--- makeworl.c	Wed Sep 20 21:41:24 1989
X***************
X*** 23,29 ****
X  
X  int pwater;		/* percent water in world (0-100) */
X  extern short	country;
X! extern int	numleaders;
X  char datadir[FILELTH];
X  char **area_map;			/*Value Map of Areas*/
X  char **type;
X--- 23,29 ----
X  
X  int pwater;		/* percent water in world (0-100) */
X  extern short	country;
X! extern int	numleaders,remake;
X  char datadir[FILELTH];
X  char **area_map;			/*Value Map of Areas*/
X  char **type;
X***************
X*** 65,70 ****
X--- 65,71 ----
X  		curntn->powers = curntn->tciv = curntn->tmil = curntn->score = 0L;
X  		curntn->race = TUNKNOWN;
X  		curntn->maxmove = 0;
X+ 		curntn->spellpts = 0;
X  		curntn->class = curntn->aplus = curntn->dplus = (short)0;
X  		curntn->inflation = curntn->tsctrs = curntn->tships = (short)0;
X  	}
X***************
X*** 106,112 ****
X  
X  	valid=FALSE;
X  	while(valid==FALSE) {			/* password routine */
X! 		mvprintw(7,0,"Enter Super-User Password: ");
X  		clrtoeol();
X  		refresh();
X  		i = get_pass(newstring);
X--- 107,113 ----
X  
X  	valid=FALSE;
X  	while(valid==FALSE) {			/* password routine */
X! 		mvaddstr(7,0,"Enter Super-User Password: ");
X  		clrtoeol();
X  		refresh();
X  		i = get_pass(newstring);
X***************
X*** 117,123 ****
X  			newerror("Password Too Long");
X  			continue;
X  		}
X! 		mvprintw(7,0,"Reenter Super-User Password: ");
X  		clrtoeol();
X  		refresh();
X  		i = get_pass(passwd);
X--- 118,124 ----
X  			newerror("Password Too Long");
X  			continue;
X  		}
X! 		mvaddstr(7,0,"Reenter Super-User Password: ");
X  		clrtoeol();
X  		refresh();
X  		i = get_pass(passwd);
X***************
X*** 130,142 ****
X  	
X  	/* finally ask for the secondary administrator */
X  	mvaddstr(7,0,"You may designate an other user as an alternate \"god\" for this world.");
X! 	mvaddstr(8,0,"Enter System Login of alternate user or hit return to continue.");
X  	while(TRUE) {
X! 		mvaddstr(9,0,"What demi-god shall co-rule this world: ");
X  		clrtoeol();
X  		refresh();
X  		get_nname( newstring );
X! 		if (strlen(newstring)==0) {
X  			newmsg("God will personally rule this world!!!");
X  			sleep(1);
X  			(void) strcpy(ntn[0].leader,LOGIN);
X--- 131,155 ----
X  	
X  	/* finally ask for the secondary administrator */
X  	mvaddstr(7,0,"You may designate an other user as an alternate \"god\" for this world.");
X! 	mvaddstr(8,0,"Enter a System Login or \"god\" to have none.  [Return for default]");
X! #ifdef REMAKE
X! 	if (remake==FALSE) {
X! 		(void) strcpy(ntn[0].leader,"god");
X! 	} else if (getpwnam(ntn[0].leader)==NULL) {
X! 		(void) strcpy(ntn[0].leader,"god");
X! 		remake=FALSE;
X! 	}
X! #else
X! 	(void) strcpy(ntn[0].leader,"god");
X! #endif REMAKE
X  	while(TRUE) {
X! 		mvprintw(9,0,"What demi-god shall co-rule this world? [%s]: ",ntn[0].leader);
X  		clrtoeol();
X  		refresh();
X  		get_nname( newstring );
X! 		if ((strcmp(newstring,"GOD")==0)
X! 		||(strcmp(newstring,"God")==0)
X! 		||(strcmp(newstring,"god")==0)) {
X  			newmsg("God will personally rule this world!!!");
X  			sleep(1);
X  			(void) strcpy(ntn[0].leader,LOGIN);
X***************
X*** 143,151 ****
X  			mvaddstr(7,0,"Demi-God: [none]");
X  			clrtoeol();
X  			break;
X  		} else if (strlen(newstring) <= LEADERLTH) {
X  			if (getpwnam(newstring)!=NULL) {
X! 				sprintf(tempc,"The demi-god %s may administrate this new world.",newstring);
X  				newmsg(tempc);
X  				(void) strncpy(ntn[0].leader,newstring,LEADERLTH);
X  				mvprintw(7,0,"Demi-God: %s",ntn[0].leader);
X--- 156,185 ----
X  			mvaddstr(7,0,"Demi-God: [none]");
X  			clrtoeol();
X  			break;
X+ 		}
X+ 		if (strlen(newstring)==0) {
X+ #ifdef REMAKE
X+ 			if (remake==FALSE) {
X+ #endif /*REMAKE*/
X+ 				newmsg("God will personally rule this world!!!");
X+ 				sleep(1);
X+ 				(void) strcpy(ntn[0].leader,LOGIN);
X+ 				mvaddstr(7,0,"Demi-God: [none]");
X+ 				clrtoeol();
X+ 				break;
X+ #ifdef REMAKE
X+ 			} else {
X+ 				(void) sprintf(tempc,"The demi-god %s will continue to reign.",ntn[0].leader);
X+ 				newmsg(tempc);
X+ 				sleep(1);
X+ 				mvprintw(7,0,"Demi-God: [%s]",ntn[0].leader);
X+ 				clrtoeol();
X+ 				break;
X+ 			}
X+ #endif /*REMAKE*/
X  		} else if (strlen(newstring) <= LEADERLTH) {
X  			if (getpwnam(newstring)!=NULL) {
X! 				(void) sprintf(tempc,"The demi-god %s may administrate this new world.",newstring);
X  				newmsg(tempc);
X  				(void) strncpy(ntn[0].leader,newstring,LEADERLTH);
X  				mvprintw(7,0,"Demi-God: %s",ntn[0].leader);
X***************
X*** 152,158 ****
X  				clrtoeol();
X  				break;
X  			} else {
X! 				sprintf(tempc,"Their is no mortal named %s on this system.",newstring);
X  				newerror(tempc);
X  			}
X  		} else {
X--- 186,192 ----
X  				clrtoeol();
X  				break;
X  			} else {
X! 				(void) sprintf(tempc,"Their is no mortal named %s on this system.",newstring);
X  				newerror(tempc);
X  			}
X  		} else {
X***************
X*** 722,731 ****
X  		}
X  	}
X  
X! 	mvprintw(13,5,"All manner of creatures were created: big ones, little ones,");
X! 	mvprintw(14,0,"fat ones, skinny ones, orange ones, turquois ones, bright blue ones.");
X! 	mvprintw(15,0,"WAIT!!!  God has suddenly realized that smurfs were taking things");
X! 	mvprintw(16,0,"too far and stopped creating new ones, and placed everybody on the map...");
X  	newmsg("Day 5... God decreed that world would be populated");
X  	sleep(1);
X  	move(14,0);
X--- 756,765 ----
X  		}
X  	}
X  
X! 	mvaddstr(13,5,"All manner of creatures were created: big ones, little ones,");
X! 	mvaddstr(14,0,"fat ones, skinny ones, orange ones, turquois ones, bright blue ones.");
X! 	mvaddstr(15,0,"WAIT!!!  God has suddenly realized that smurfs were taking things");
X! 	mvaddstr(16,0,"too far and stopped creating new ones to place everybody on the map...");
X  	newmsg("Day 5... God decreed that world would be populated");
X  	sleep(1);
X  	move(14,0);
X***************
X*** 1140,1149 ****
X  	}
X  
X  	cnum=1;
X! 	mvprintw(15,0,"ADDING NATIONS:");
X  	refresh();
X  	xpos = 16;
X! 	ypos = 15;
X  	while(fgets(line,LINELTH,fp)!=NULL) {
X  		/*read and parse a new line*/
X  		if(line[0]!='#') {
X--- 1174,1184 ----
X  	}
X  
X  	cnum=1;
X! 	mvaddstr(14,0,"ADDING NATIONS:");
X! 	clrtoeol();
X  	refresh();
X  	xpos = 16;
X! 	ypos = 14;
X  	while(fgets(line,LINELTH,fp)!=NULL) {
X  		/*read and parse a new line*/
X  		if(line[0]!='#') {
X*** orandeven.c	Wed Sep 20 21:41:00 1989
X--- randeven.c	Wed Sep 20 21:41:24 1989
X***************
X*** 903,910 ****
X  
X  	/*send a message to the country if it is a PC*/
X  	if(ispc(ntn[cntry].active)) {
X! 		mailopen( cntry );
X! 		fprintf(fm,"MESSAGE FROM CONQUER\n");
X  		fprintf(fm,"An event occurs within your nation (%s)\n",ntn[cntry].name);
X  		fprintf(fm,"%s during the %s of Year %d,\n",event,PSEASON(TURN),YEAR(TURN));
X  		if(xloc != -1)
X--- 903,910 ----
X  
X  	/*send a message to the country if it is a PC*/
X  	if(ispc(ntn[cntry].active)) {
X! 		if(mailopen( cntry )!=(-1)) {
X! 		fprintf(fm,"MESSAGE FROM CONQUER\n\n");
X  		fprintf(fm,"An event occurs within your nation (%s)\n",ntn[cntry].name);
X  		fprintf(fm,"%s during the %s of Year %d,\n",event,PSEASON(TURN),YEAR(TURN));
X  		if(xloc != -1)
X***************
X*** 912,917 ****
X--- 912,918 ----
X  		if(prcnt>0) {
X  			fprintf(fm,"Damage was estimated at about %d%% in severity.\n",prcnt);
X  		}
X+ 		}
X  	}
X  
X  	if(strlen(eventstr)>5) {
X***************
X*** 928,934 ****
X  		if(ispc(ntn[cntry].active))
X  			fprintf(fm,"\t%s\n",eventstr);
X  	}
X! 	mailclose();
X  }
X  
X  int
X--- 929,935 ----
X  		if(ispc(ntn[cntry].active))
X  			fprintf(fm,"\t%s\n",eventstr);
X  	}
X! 	if(ispc(ntn[cntry].active)) mailclose(cntry);
X  }
X  
X  int
X*** ocexecute.c	Wed Sep 20 21:40:54 1989
X--- cexecute.c	Wed Sep 20 21:41:25 1989
X***************
X*** 194,199 ****
X--- 194,210 ----
X  			}
X  			sct[x][y].people=armynum;
X  			break;
X+ 		case XSACIV3:	/*Sadjciv3 - incremental people adjust */
X+ 			/* if you dont own it, put people in your capitol */
X+ 			if((sct[x][y].owner!=country)&&(country!=0)) {
X+ 				sct[curntn->capx][curntn->capy].people+=armynum;
X+ 				fprintf(stderr,"SACIV3: <%s> told to put %d civilians in sector %d,%d not owned - placed in capitol\n",curntn->name,armynum,x,y);
X+ 			}
X+ 			else
X+ 			{
X+ 				sct[x][y].people+=armynum;
X+ 			}
X+ 			break;
X  		case XSIFORT:	/*Sincfort*/
X  			sct[x][y].fortress++;
X  			break;
X***************
X*** 269,274 ****
X--- 280,287 ----
X  void
X  hangup()
X  {
X+ 	char line[LINELTH];
X+ 
X  	if(country==0) writedata();
X  	else {
X  		fprintf(fexe,"L_NGOLD\t%d \t%d \t%ld \t0 \t0 \t%s\n",
X***************
X*** 281,292 ****
X  	/*close file*/
X  	fclose(fexe);
X  	/*send a message to God*/
X! 	mailopen( 0 );
X! 	fprintf(fm,"WARNING: Nation %s hungup on me.\n",curntn->name);
X! 	mailclose();
X  
X  	/* remove the lock file */
X  	unlink(fison);
X  	/* exit program */
X  	exit(FAIL);
X  }
X--- 294,313 ----
X  	/*close file*/
X  	fclose(fexe);
X  	/*send a message to God*/
X! 	if(mailopen( 0 )!=(-1)) {
X! 		fprintf(fm,"WARNING: Nation %s hungup on me.\n",curntn->name);
X! 		mailclose(0);
X! 	}
X  
X  	/* remove the lock file */
X  	unlink(fison);
X+ 	/* remove any existing mail reading/writing file */
X+ 	if (mailok!=DONEMAIL) {
X+ 		extern char tmp_mail_name[];
X+ 		unlink(tmp_mail_name);
X+ 	}
X+ 	sprintf(line,"%s%hd.tmp",msgfile,country);
X+ 	unlink(line);
X  	/* exit program */
X  	exit(FAIL);
X  }
X*** oforms.c	Wed Sep 20 21:40:55 1989
X--- forms.c	Wed Sep 20 21:41:25 1989
X***************
X*** 41,48 ****
X  	int nationid; 	     /*current nation id */
X  
X  	count2=1;
X  	while(done==FALSE) {
X! 		clear();
X  		standout();
X  		mvaddstr(0,(COLS/2)-10,"NATION SCORE SCREEN");
X  		standend();
X--- 41,50 ----
X  	int nationid; 	     /*current nation id */
X  
X  	count2=1;
X+ 	clear();
X  	while(done==FALSE) {
X! 		move(0,0);
X! 		clrtobot();
X  		standout();
X  		mvaddstr(0,(COLS/2)-10,"NATION SCORE SCREEN");
X  		standend();
X***************
X*** 94,101 ****
X  				mvprintw(ypos+6,xpos,"%ld",ntn[nationid].score);
X  #ifdef NOSCORE
X  				if(isnpc(ntn[nationid].active))
X! 					mvprintw(ypos+7,xpos,"Yes");
X! 				else mvprintw(ypos+7,xpos,"No");
X  				if (country==0) {
X  					mvprintw(ypos+8,xpos,"%ld",ntn[nationid].tgold);
X  					mvprintw(ypos+9,xpos,"%ld",ntn[nationid].tmil);
X--- 96,103 ----
X  				mvprintw(ypos+6,xpos,"%ld",ntn[nationid].score);
X  #ifdef NOSCORE
X  				if(isnpc(ntn[nationid].active))
X! 					mvaddstr(ypos+7,xpos,"Yes");
X! 				else mvaddstr(ypos+7,xpos,"No");
X  				if (country==0) {
X  					mvprintw(ypos+8,xpos,"%ld",ntn[nationid].tgold);
X  					mvprintw(ypos+9,xpos,"%ld",ntn[nationid].tmil);
X***************
X*** 108,115 ****
X  				mvprintw(ypos+9,xpos,"%ld",ntn[nationid].tciv);
X  				mvprintw(ypos+10,xpos,"%d",ntn[nationid].tsctrs);
X  				if(isnpc(ntn[nationid].active))
X! 					mvprintw(ypos+11,xpos,"Yes");
X! 				else mvprintw(ypos+11,xpos,"No");
X  #endif /* NOSCORE */
X  				count++;
X  				if(count<MAXINSCR && count%MAXINROW==0) {
X--- 110,117 ----
X  				mvprintw(ypos+9,xpos,"%ld",ntn[nationid].tciv);
X  				mvprintw(ypos+10,xpos,"%d",ntn[nationid].tsctrs);
X  				if(isnpc(ntn[nationid].active))
X! 					mvaddstr(ypos+11,xpos,"Yes");
X! 				else mvaddstr(ypos+11,xpos,"No");
X  #endif /* NOSCORE */
X  				count++;
X  				if(count<MAXINSCR && count%MAXINROW==0) {
X***************
X*** 151,161 ****
X  		isgod=TRUE;
X  		if (get_god()) return;
X  	}
X  	count2=1;
X  	while(1){
X  		count=1;
X  		offset=0;
X! 		clear();
X  		standout();
X  		mvaddstr(0,(COLS/2)-12,"NATION DIPLOMACY SUMMARY");
X  		standend();
X--- 153,165 ----
X  		isgod=TRUE;
X  		if (get_god()) return;
X  	}
X+ 	clear();
X  	count2=1;
X  	while(1){
X  		count=1;
X  		offset=0;
X! 		move(0,0);
X! 		clrtobot();
X  		standout();
X  		mvaddstr(0,(COLS/2)-12,"NATION DIPLOMACY SUMMARY");
X  		standend();
X***************
X*** 255,261 ****
X  				exit(FAIL);
X  			}
X  			BRIBENATION;
X- 			mailclose();
X  
X  			ntn[nation].dstatus[country]--;
X  
X--- 259,264 ----
X***************
X*** 313,328 ****
X  			}
X  			if((temp<=UNMET)||(temp>JIHAD)
X  			||((isgod==FALSE)&&(temp==UNMET))){
X! 				mvprintw(LINES-1,0,"SORRY, Invalid inputs -- hit return");
X! 				refresh();
X! 				getch();
X  				if(isgod==TRUE) reset_god();
X  				return;
X  			}
X  
X! 			if(((curntn->dstatus[nation]==TREATY)&&(temp!=TREATY))
X! 			||(( curntn->dstatus[nation]==JIHAD)&&(temp!=JIHAD)))
X  		    		curntn->tgold -= BREAKJIHAD;
X  
X  			curntn->dstatus[nation]=temp;
X  			EADJDIP(country,nation);
X--- 316,335 ----
X  			}
X  			if((temp<=UNMET)||(temp>JIHAD)
X  			||((isgod==FALSE)&&(temp==UNMET))){
X! 				errormsg("SORRY, Invalid inputs -- hit return");
X  				if(isgod==TRUE) reset_god();
X  				return;
X  			}
X  
X! 			if((curntn->dstatus[nation]==JIHAD)&&(temp!=JIHAD))
X  		    		curntn->tgold -= BREAKJIHAD;
X+ 			else if ((curntn->dstatus[nation]==TREATY)&&(temp!=TREATY)) {
X+ 				if (ntn[nation].dstatus[country]!=TREATY) {
X+ 					errormsg("Non-binding Treaty broken... fee waived.");
X+ 				} else {
X+ 					curntn->tgold -= BREAKJIHAD;
X+ 				}
X+ 			}
X  
X  			curntn->dstatus[nation]=temp;
X  			EADJDIP(country,nation);
X***************
X*** 330,340 ****
X  			if((temp>HOSTILE)
X  			&&(ispc(ntn[nation].active))
X  			&&(ntn[nation].dstatus[country]<WAR)) {
X! 				mailopen(nation);
X! 				fprintf(fm,"Message to %s from CONQUER\n",ntn[nation].name);
X! 				fprintf(fm,"    During the %s of Year %d,\n",PSEASON(TURN),YEAR(TURN));
X! 				fprintf(fm,"      %s declared war on you\n",curntn->name);
X! 				mailclose();
X  			}
X  
X  			/*prevent ron from being sneaky*/
X--- 337,348 ----
X  			if((temp>HOSTILE)
X  			&&(ispc(ntn[nation].active))
X  			&&(ntn[nation].dstatus[country]<WAR)) {
X! 				if(mailopen(nation)!=(-1)) {
X! 					fprintf(fm,"Message to %s from CONQUER\n",ntn[nation].name);
X! 					fprintf(fm,"    During the %s of Year %d,\n",PSEASON(TURN),YEAR(TURN));
X! 					fprintf(fm,"      %s declared war on you\n",curntn->name);
X! 					mailclose(nation);
X! 				}
X  			}
X  
X  			/*prevent ron from being sneaky*/
X***************
X*** 347,353 ****
X  				if(ntn[i].dstatus[nation]==TREATY){
X  					ntn[i].dstatus[country]=WAR;
X  					EADJDIP(i,country);
X! 					mailopen(country);
X  					fprintf(fm,"Message to %s from %s\n",ntn[country].name,ntn[i].name);
X  					switch( rand()%4 ) {
X  					case 0: fprintf(fm,"You just attacked my friend %s - your loss!!!\n",ntn[nation].name);
X--- 355,361 ----
X  				if(ntn[i].dstatus[nation]==TREATY){
X  					ntn[i].dstatus[country]=WAR;
X  					EADJDIP(i,country);
X! 					if (mailopen(country)==(-1)) {
X  					fprintf(fm,"Message to %s from %s\n",ntn[country].name,ntn[i].name);
X  					switch( rand()%4 ) {
X  					case 0: fprintf(fm,"You just attacked my friend %s - your loss!!!\n",ntn[nation].name);
X***************
X*** 361,367 ****
X  						fprintf(fm,"appropriate counter measures!!! DIE!!!\n");
X  						break;
X  					}
X! 					mailclose();
X  				}
X  			}
X  		}
X--- 369,376 ----
X  						fprintf(fm,"appropriate counter measures!!! DIE!!!\n");
X  						break;
X  					}
X! 					}
X! 					mailclose(country);
X  				}
X  			}
X  		}
X***************
X*** 390,397 ****
X  	}
X   
X  	/* continuous loop */
X- 	while(1) {
X  	clear();
X  	standout();
X  	mvaddstr(0,(COLS/2)-10,"NATION STATS SUMMARY");
X  	mvprintw(3,0,"nation name is %s",curntn->name);
X--- 399,408 ----
X  	}
X   
X  	/* continuous loop */
X  	clear();
X+ 	while(1) {
X+ 	move(0,0);
X+ 	clrtobot();
X  	standout();
X  	mvaddstr(0,(COLS/2)-10,"NATION STATS SUMMARY");
X  	mvprintw(3,0,"nation name is %s",curntn->name);
X*** omisc.c	Wed Sep 20 21:40:56 1989
X--- misc.c	Wed Sep 20 21:41:25 1989
X***************
X*** 5,10 ****
X--- 5,11 ----
X  #include	"data.h"
X  
X  extern FILE *fnews;
X+ extern short country;
X  
X  extern char *HVegcost, *OVegcost, *EVegcost, *DVegcost, *FVegcost;
X  extern char *HElecost, *OElecost, *EElecost, *DElecost, *FElecost;
X***************
X*** 182,187 ****
X--- 183,190 ----
X  			if( (y = ay + dy[i]) < 0 || y >= MAPY )
X  				continue;
X  
X+ 			if ( movecost[ x ][ y ] < 0 )	/* just in case */
X+ 				continue;
X  			if( sct[x][y].altitude == PEAK)
X  				continue;
X  			if( sct[x][y].altitude == WATER)
X***************
X*** 790,808 ****
X  			}
X  			P_ASOLD=0;
X  			if(ispc(curntn->active)) {
X! 				mailopen(country);
X! 				fprintf(fm,"Message to %s from Conquer\n\n",curntn->name);
X! 				fprintf(fm,"\tYour %s Army %d disperses into the population\n",*(unittype+(P_ATYPE%UTYPE)),armynum);
X! 				mailclose();
X  			}
X  		} else if(P_ATYPE>=MINMONSTER) {
X  			/* disbanding of ALL monsters should take place */
X  			P_ASOLD=0;
X  			if(ispc(curntn->active)) {
X! 				mailopen(country);
X! 				fprintf(fm,"Message to %s from Conquer\n\n",curntn->name);
X! 				fprintf(fm,"\tYour %s (unit %d) leaves due to the loss of your jewels.\n",*(unittype+(P_ATYPE%UTYPE)),armynum);
X! 				mailclose();
X  			}
X  		}
X  	}
X--- 793,813 ----
X  			}
X  			P_ASOLD=0;
X  			if(ispc(curntn->active)) {
X! 				if (mailopen(country)!=(-1)) {
X! 					fprintf(fm,"Message to %s from Conquer\n\n",curntn->name);
X! 					fprintf(fm,"\tYour %s Army %d disperses into the population\n",*(unittype+(P_ATYPE%UTYPE)),armynum);
X! 					mailclose(country);
X! 				}
X  			}
X  		} else if(P_ATYPE>=MINMONSTER) {
X  			/* disbanding of ALL monsters should take place */
X  			P_ASOLD=0;
X  			if(ispc(curntn->active)) {
X! 				if (mailopen(country)!=(-1)) {
X! 					fprintf(fm,"Message to %s from Conquer\n\n",curntn->name);
X! 					fprintf(fm,"\tYour %s (unit %d) leaves due to the loss of your jewels.\n",*(unittype+(P_ATYPE%UTYPE)),armynum);
X! 					mailclose(country);
X! 				}
X  			}
X  		}
X  	}
X***************
X*** 810,818 ****
X  	/* check for sectors breaking away -- not capx, capy */
X  	if(ispc(curntn->active)) {
X  		/* create a summarized mail message of sectors effected */
X! 		mailopen(country);
X! 		fprintf(fm,"Message to %s from Conquer\n\n",curntn->name);
X! 		fprintf(fm,"Riots and Rebellion flourish:\n");
X  	}
X  	for(i=0;i<MAPX;i++) for(j=0;j<MAPY;j++)
X  	if(sct[i][j].owner==country && (i!=x || j!=y) ) {
X--- 815,824 ----
X  	/* check for sectors breaking away -- not capx, capy */
X  	if(ispc(curntn->active)) {
X  		/* create a summarized mail message of sectors effected */
X! 		if (mailopen(country)!=(1)) {
X! 			fprintf(fm,"Message to %s from Conquer\n\n",curntn->name);
X! 			fprintf(fm,"Riots and Rebellion flourish:\n");
X! 		}
X  	}
X  	for(i=0;i<MAPX;i++) for(j=0;j<MAPY;j++)
X  	if(sct[i][j].owner==country && (i!=x || j!=y) ) {
X***************
X*** 838,844 ****
X  		}
X  	}
X  	if(ispc(curntn->active)) {
X! 		mailclose();
X  	} else if(isnpc(curntn->active)) {
X  		if(sct[curntn->capx][curntn->capy].owner==country) {
X  			/* reset capitol for npcs */
X--- 844,850 ----
X  		}
X  	}
X  	if(ispc(curntn->active)) {
X! 		mailclose(country);
X  	} else if(isnpc(curntn->active)) {
X  		if(sct[curntn->capx][curntn->capy].owner==country) {
X  			/* reset capitol for npcs */
X***************
X*** 912,924 ****
X  	if ((x!=curntn->capx)||(y!=curntn->capy)) {
X  		/* assign new pseudo capitol */
X  		if(ispc(curntn->active)) {
X! 			mailopen(country);
X  			fprintf(fm,"Message to %s from Conquer\n\n",ntn[country].name);
X  			fprintf(fm,"\tYour Capitol at sector location %d,%d\n",curntn->capx,curntn->capy);
X  			fprintf(fm,"\t was overrun by nation %s.\n\n",ntn[nation].name);
X  			fprintf(fm,"\tA temporary headquarters is now in sector %d,%d,\n",x,y);
X  			fprintf(fm,"\t but designation of a new Capitol is recommended.\n");
X! 			mailclose();
X  		}
X  		curntn->capx=x;
X  		curntn->capy=y;
X--- 918,931 ----
X  	if ((x!=curntn->capx)||(y!=curntn->capy)) {
X  		/* assign new pseudo capitol */
X  		if(ispc(curntn->active)) {
X! 			if(mailopen(country)!=(-1)) {
X  			fprintf(fm,"Message to %s from Conquer\n\n",ntn[country].name);
X  			fprintf(fm,"\tYour Capitol at sector location %d,%d\n",curntn->capx,curntn->capy);
X  			fprintf(fm,"\t was overrun by nation %s.\n\n",ntn[nation].name);
X  			fprintf(fm,"\tA temporary headquarters is now in sector %d,%d,\n",x,y);
X  			fprintf(fm,"\t but designation of a new Capitol is recommended.\n");
X! 			mailclose(country);
X! 			}
X  		}
X  		curntn->capx=x;
X  		curntn->capy=y;
X***************
X*** 925,937 ****
X  	} else {
X  		/* no new capitol assignment */
X  		if(ispc(curntn->active)) {
X! 			mailopen(country);
X  			fprintf(fm,"Message to %s from Conquer\n\n",ntn[country].name);
X  			fprintf(fm,"\tYour Capitol at sector location %d,%d\n",curntn->capx,curntn->capy);
X  			fprintf(fm,"\t was overrun by nation %s.\n\n",ntn[nation].name);
X  			fprintf(fm,"\tNo other land remains.  The destruction\n");
X  			fprintf(fm,"\t of your nation seems imminent.\n");
X! 			mailclose();
X  		}
X  	}
X  	/* restore */
X--- 932,945 ----
X  	} else {
X  		/* no new capitol assignment */
X  		if(ispc(curntn->active)) {
X! 			if(mailopen(country)!=(-1)) {
X  			fprintf(fm,"Message to %s from Conquer\n\n",ntn[country].name);
X  			fprintf(fm,"\tYour Capitol at sector location %d,%d\n",curntn->capx,curntn->capy);
X  			fprintf(fm,"\t was overrun by nation %s.\n\n",ntn[nation].name);
X  			fprintf(fm,"\tNo other land remains.  The destruction\n");
X  			fprintf(fm,"\t of your nation seems imminent.\n");
X! 			mailclose(country);
X! 			}
X  		}
X  	}
X  	/* restore */
X***************
X*** 1375,1381 ****
X  
X  	/* check for 'god' */
X  	if (strcmp("god",name)==0) hold=0;
X! 	if (strcmp("news",name)==0) hold= -2;
X  
X  	/* check for numbers if name too long */
X  	if (hold==NTOTAL) {
X--- 1383,1389 ----
X  
X  	/* check for 'god' */
X  	if (strcmp("god",name)==0) hold=0;
X! 	if (strcmp("news",name)==0) hold= NEWSMAIL;
X  
X  	/* check for numbers if name too long */
X  	if (hold==NTOTAL) {
X***************
X*** 1454,1485 ****
X  }
X  #endif ADMIN
X  
X! void
X  mailopen(to)
X  {
X  	char	line[LINELTH];
X! 	if(mailok == TRUE) mailclose();
X  
X! 	if (to != -2)
X! 		sprintf(line,"%s%d",msgfile,to);
X! 	else
X! 		sprintf(line,"news%d",TURN -1);	/* -1 so it appears in
X! 						   the news now		*/
X! 	if ((fm=fopen(line,"a+"))==NULL) {
X! 		printf("error opening %s",line);
X! 		return;
X  	}
X! 	mailok=TRUE;
X  }
X  
X  void
X! mailclose()
X  {
X! 	if(mailok==FALSE) return;
X  
X! 	fputs("END\n",fm);
X  	fclose(fm);
X! 	mailok=FALSE;
X  }
X  
X  #ifdef ADMIN
X--- 1462,1539 ----
X  }
X  #endif ADMIN
X  
X! /* name of the currently open mail file */
X! char tmp_mail_name[LINELTH];
X! 
X! int
X  mailopen(to)
X  {
X  	char	line[LINELTH];
X! 	if(mailok != DONEMAIL) mailclose(ABORTMAIL);
X  
X! 	if (to != NEWSMAIL) {
X! #ifdef CONQUER
X! 		/* check if the player is currently reading messages */
X! 		sprintf(line,"%s%hd.tmp",msgfile,to);
X! 		if (access(line,00)==0) {
X! 			if (to>0 && to<NTOTAL) {
X! 				sprintf(line,"Nation %s is reading their mail... try again later.", ntn[to].name);
X! 				errormsg(line);
X! 			}
X! 			return(-1);
X! 		}
X! 
X! 		/* otherwise continue; checking for others */
X! 		/* this file name is also used in rmessages() */
X! 		sprintf(tmp_mail_name,"send.%s%hd",msgfile,to);
X! 		if (access(tmp_mail_name,00)==0) {
X! 			if (to>=0 && to<NTOTAL)
X! 			errormsg("Someone is already sending mail to Nation %s... try again later.", ntn[to].name);
X! 			return(-1);
X! 		}
X! #endif /*CONQUER*/
X! #ifdef ADMIN
X! 		sprintf(tmp_mail_name,"%s%hd",msgfile,to);
X! #endif /*ADMIN*/
X! 	} else {
X! 		/* send to a location marked by the current player */
X! 		sprintf(tmp_mail_name,"send.news%d", country);
X  	}
X! 	if ((fm=fopen(tmp_mail_name,"a+"))==NULL) {
X! 		fprintf(stderr,"error opening %s",tmp_mail_name);
X! 		return(-1);
X! 	}
X! 	mailok=to;
X  }
X  
X  void
X! mailclose(to)
X  {
X! 	char line[BIGLTH];
X  
X! 	if(mailok==DONEMAIL) return;
X! 
X! 	if(to >= 0) {
X! 		fputs("END\n",fm);
X! 	}
X  	fclose(fm);
X! 
X! #ifdef CONQUER
X! 	if((to!=ABORTMAIL)&&(to==mailok)) {
X! 		if (to==NEWSMAIL) {
X! 			/* send to the current newspaper */
X! 			sprintf(line,"cat %s >> news%d",tmp_mail_name,TURN-1);
X! 		} else {
X! 			/* send to the player now */
X! 			sprintf(line,"cat %s >> %s%d",tmp_mail_name,msgfile,to);
X! 		}
X! 		system(line);
X! 	}
X! 	if (tmp_mail_name!=NULL) {
X! 		(void) unlink(tmp_mail_name);
X! 	}
X! #endif /*CONQUER*/
X! 	mailok=DONEMAIL;
X  }
X  
X  #ifdef ADMIN
X*** oreports.c	Wed Sep 20 21:41:00 1989
X--- reports.c	Wed Sep 20 21:41:26 1989
X***************
X*** 65,74 ****
X  			return;
X  		}
X  	}
X- 	count2=0;
X  	/*new army screen*/
X  	while(done==FALSE) {
X! 		clear();
X  		armynum=count2;
X  		xpos=BUF_COLS;
X  		ypos=2;
X--- 65,76 ----
X  			return;
X  		}
X  	}
X  	/*new army screen*/
X+ 	clear();
X+ 	count2=0;
X  	while(done==FALSE) {
X! 		move(0,0);
X! 		clrtobot();
X  		armynum=count2;
X  		xpos=BUF_COLS;
X  		ypos=2;
X***************
X*** 194,200 ****
X  					/*spys are given a shut up fee */
X  					mvprintw(LINES-4,0,"Your spy demands %ld talons to remain quiet",
X  					*(u_encost+(P_ATYPE%UTYPE)) * 2);
X! 					mvprintw(LINES-3,0,"Pay him off? (y or n)");
X  					clrtoeol();
X  					refresh();
X  					if(getch()=='y'){
X--- 196,202 ----
X  					/*spys are given a shut up fee */
X  					mvprintw(LINES-4,0,"Your spy demands %ld talons to remain quiet",
X  					*(u_encost+(P_ATYPE%UTYPE)) * 2);
X! 					mvaddstr(LINES-3,0,"Pay him off? (y or n)");
X  					clrtoeol();
X  					refresh();
X  					if(getch()=='y'){
X***************
X*** 208,214 ****
X  					mvprintw(LINES-4,0,"Your mercenaries demand %ld talons to disband",
X  					*(u_encost+(P_ATYPE%UTYPE)) * P_ASOLD);
X  	
X! 					mvprintw(LINES-3,0,"Give them severance pay? (y or n)");
X  					clrtoeol();
X  					refresh();
X  					if(getch()=='y'){
X--- 210,216 ----
X  					mvprintw(LINES-4,0,"Your mercenaries demand %ld talons to disband",
X  					*(u_encost+(P_ATYPE%UTYPE)) * P_ASOLD);
X  	
X! 					mvaddstr(LINES-3,0,"Give them severance pay? (y or n)");
X  					clrtoeol();
X  					refresh();
X  					if(getch()=='y'){
X***************
X*** 497,505 ****
X  		}
X    	}
X  
X  	count2=0;
X  	while(done==FALSE) {
X! 		clear();
X  		ypos=2;
X  		xpos=BUF_COLS;
X  		count=0;
X--- 499,509 ----
X  		}
X    	}
X  
X+ 	clear();
X  	count2=0;
X  	while(done==FALSE) {
X! 		move(0,0);
X! 		clrtobot();
X  		ypos=2;
X  		xpos=BUF_COLS;
X  		count=0;
X***************
X*** 524,530 ****
X  				standout();
X  				mvprintw(ypos,xpos,"%d:",nvynum);
X  				standend();
X! 				mvprintw(ypos+1,xpos,"lt/md/hv");
X  				mvprintw(ypos+2,xpos,"%2hd/%2hd/%2hd",P_NWAR(N_LIGHT),P_NWAR(N_MEDIUM),P_NWAR(N_HEAVY));
X  				mvprintw(ypos+3,xpos,"%2hd/%2hd/%2hd",P_NMER(N_LIGHT),P_NMER(N_MEDIUM),P_NMER(N_HEAVY));
X  				mvprintw(ypos+4,xpos,"%2hd/%2hd/%2hd",P_NGAL(N_LIGHT),P_NGAL(N_MEDIUM),P_NGAL(N_HEAVY));
X--- 528,534 ----
X  				standout();
X  				mvprintw(ypos,xpos,"%d:",nvynum);
X  				standend();
X! 				mvaddstr(ypos+1,xpos,"lt/md/hv");
X  				mvprintw(ypos+2,xpos,"%2hd/%2hd/%2hd",P_NWAR(N_LIGHT),P_NWAR(N_MEDIUM),P_NWAR(N_HEAVY));
X  				mvprintw(ypos+3,xpos,"%2hd/%2hd/%2hd",P_NMER(N_LIGHT),P_NMER(N_MEDIUM),P_NMER(N_HEAVY));
X  				mvprintw(ypos+4,xpos,"%2hd/%2hd/%2hd",P_NGAL(N_LIGHT),P_NGAL(N_MEDIUM),P_NGAL(N_HEAVY));
X*** ocombat.c	Wed Sep 20 21:40:54 1989
X--- combat.c	Wed Sep 20 21:41:26 1989
X***************
X*** 35,40 ****
X--- 35,41 ----
X  int	xspot,yspot;		/*location of battles*/
X  int	anation;		/*nation attacking in this fight*/
X  int	dnation;		/*one nation defending in this fight*/
X+ int	count=0;                /*number of armies or navies in sector*/
X  
X  /************************************************************************/
X  /*	COMBAT()	run all combat on the map			*/
X***************
X*** 49,55 ****
X  	int	initialized=FALSE;	/* TRUE if arrays initialized */
X  	short	armynum,nvynum;
X  	int	valid;
X- 	int	count=0;
X  	struct  s_nation *nptr;
X  	struct  army	 *aptr;
X  
X--- 50,55 ----
X***************
X*** 195,201 ****
X  	int	done;
X  	int	i,j,k;
X  	long	asold=0,dsold=0;	/*a's and d's total soldiers*/
X! 	long	astr=0,dstr=0;		/*a's and d's relative strength*/
X  	long	Aloss,Dloss;    	/*a's and d's total losses*/
X  	int	PAloss,PDloss;		/*percent a and d loss*/
X  	long	loss;
X--- 195,201 ----
X  	int	done;
X  	int	i,j,k;
X  	long	asold=0,dsold=0;	/*a's and d's total soldiers*/
X! 	float astr=0,dstr=0;		/*a's and d's relative strength*/
X  	long	Aloss,Dloss;    	/*a's and d's total losses*/
X  	int	PAloss,PDloss;		/*percent a and d loss*/
X  	long	loss;
X***************
X*** 204,210 ****
X  	short	nvamps=0;		/* number of vampire armies */
X  
X  	/* determine who is attacker & who is on defenders side?*/
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]!=(-1)){
X  		if(owner[j]==anation) side[j]=ATKR;
X  		else if(owner[j]==dnation) side[j]=DFND;
X  		else if(ntn[anation].dstatus[owner[j]]==JIHAD) side[j]=DFND;
X--- 204,210 ----
X  	short	nvamps=0;		/* number of vampire armies */
X  
X  	/* determine who is attacker & who is on defenders side?*/
X! 	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X  		if(owner[j]==anation) side[j]=ATKR;
X  		else if(owner[j]==dnation) side[j]=DFND;
X  		else if(ntn[anation].dstatus[owner[j]]==JIHAD) side[j]=DFND;
X***************
X*** 218,224 ****
X  	/*calculate number of troops and assign statuses */
X  	asold=0;
X  	dsold=0;
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)) {
X  		/* record troops for all units in sector */
X  		troops[i]=ntn[owner[i]].arm[unit[i]].sold;
X  
X--- 218,224 ----
X  	/*calculate number of troops and assign statuses */
X  	asold=0;
X  	dsold=0;
X! 	for(i=0;i<count;i++) if(owner[i]>(-1)) {
X  		/* record troops for all units in sector */
X  		troops[i]=ntn[owner[i]].arm[unit[i]].sold;
X  
X***************
X*** 228,239 ****
X  		&&( ntn[owner[i]].arm[unit[i]].stat < NUMSTATUS )
X  		&&( rand()%100<15 )) {
X  			if( ispc(ntn[owner[i]].active)) {
X! 				mailopen( owner[i] );
X! 				fprintf(fm,"Message to %s from Conquer\n",ntn[owner[i]].name);
X! 				fprintf(fm,"\n  Your %s Army %d Refuses to Fight\n",
X  				  unittype[ntn[owner[i]].arm[unit[i]].unittyp],
X  				  unit[i]);
X! 				mailclose();
X  			}
X  			retreatside = side[i];
X  			fdxyretreat();
X--- 228,240 ----
X  		&&( ntn[owner[i]].arm[unit[i]].stat < NUMSTATUS )
X  		&&( rand()%100<15 )) {
X  			if( ispc(ntn[owner[i]].active)) {
X! 				if (mailopen( owner[i] )!=(-1)) {
X! 				fprintf(fm,"Message to %s from Conquer\n\n",ntn[owner[i]].name);
X! 				fprintf(fm,"  Your %s Army %d Refuses to Fight\n",
X  				  unittype[ntn[owner[i]].arm[unit[i]].unittyp],
X  				  unit[i]);
X! 				mailclose(owner[i]);
X! 				}
X  			}
X  			retreatside = side[i];
X  			fdxyretreat();
X***************
X*** 281,287 ****
X  	else	odds = (asold*100)/dsold;
X  
X  	/* mercenaries/orcs/goblins might run away */
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)) {
X  		if(((( odds > 200 )&&(side[i]==DFND))
X  		||(( odds < 100 )&&(side[i]==ATKR)))
X  		&&((ntn[owner[i]].arm[unit[i]].unittyp == A_MERCENARY)
X--- 282,288 ----
X  	else	odds = (asold*100)/dsold;
X  
X  	/* mercenaries/orcs/goblins might run away */
X! 	for(i=0;i<count;i++) if(owner[i]>(-1)) {
X  		if(((( odds > 200 )&&(side[i]==DFND))
X  		||(( odds < 100 )&&(side[i]==ATKR)))
X  		&&((ntn[owner[i]].arm[unit[i]].unittyp == A_MERCENARY)
X***************
X*** 290,301 ****
X  		&&(ntn[owner[i]].arm[unit[i]].stat < NUMSTATUS)
X  		&&( rand()%100<30 )) {
X  			if( ispc(ntn[owner[i]].active)) {
X! 				mailopen( owner[i] );
X! 				fprintf(fm,"Message to %s from Conquer\n",ntn[owner[i]].name);
X  				fprintf(fm,"  Your %s Army %d Runs Away\n",
X  				  unittype[ntn[owner[i]].arm[unit[i]].unittyp],
X  				  unit[i]);
X! 				mailclose();
X  			}
X  			retreatside = side[i];
X  			if( side[i] == ATKR ) asold-= troops[i];
X--- 291,303 ----
X  		&&(ntn[owner[i]].arm[unit[i]].stat < NUMSTATUS)
X  		&&( rand()%100<30 )) {
X  			if( ispc(ntn[owner[i]].active)) {
X! 				if(mailopen( owner[i] )!=(-1)) {
X! 				fprintf(fm,"Message to %s from Conquer\n\n",ntn[owner[i]].name);
X  				fprintf(fm,"  Your %s Army %d Runs Away\n",
X  				  unittype[ntn[owner[i]].arm[unit[i]].unittyp],
X  				  unit[i]);
X! 				mailclose(owner[i]);
X! 				}
X  			}
X  			retreatside = side[i];
X  			if( side[i] == ATKR ) asold-= troops[i];
X***************
X*** 324,330 ****
X  	/* CALCULATE AVERAGE COMBAT BONUS */
X  	abonus=0;
X  	dbonus=0;
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)) {
X  		if(side[i]==ATKR)
X  			abonus += cbonus(i)*troops[i];
X  		else if(side[i]==DFND && ntn[owner[i]].arm[unit[i]].stat!=RULE)
X--- 326,332 ----
X  	/* CALCULATE AVERAGE COMBAT BONUS */
X  	abonus=0;
X  	dbonus=0;
X! 	for(i=0;i<count;i++) if(owner[i]>(-1)) {
X  		if(side[i]==ATKR)
X  			abonus += cbonus(i)*troops[i];
X  		else if(side[i]==DFND && ntn[owner[i]].arm[unit[i]].stat!=RULE)
X***************
X*** 334,340 ****
X  	/*archer bonus if not in fort vs knights/cavalry*/
X  	j=0;
X  	k=0;
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1))
X  	if(ISCITY(sct[xspot][yspot].designation)){
X  		if((ntn[owner[i]].arm[unit[i]].unittyp == A_CAVALRY)
X  		||(ntn[owner[i]].arm[unit[i]].unittyp == A_KNIGHT))
X--- 336,342 ----
X  	/*archer bonus if not in fort vs knights/cavalry*/
X  	j=0;
X  	k=0;
X! 	for(i=0;i<count;i++) if(owner[i]>(-1))
X  	if(ISCITY(sct[xspot][yspot].designation)){
X  		if((ntn[owner[i]].arm[unit[i]].unittyp == A_CAVALRY)
X  		||(ntn[owner[i]].arm[unit[i]].unittyp == A_KNIGHT))
X***************
X*** 342,348 ****
X  		else if(side[i]==DFND) k+=troops[i];
X  	}
X  
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)) {
X  		if(j>0) abonus += (15 * j * troops[i]) / asold;
X  		if(k>0 && dsold>0) dbonus += (15 * k * troops[i]) / dsold;
X  	}
X--- 344,350 ----
X  		else if(side[i]==DFND) k+=troops[i];
X  	}
X  
X! 	for(i=0;i<count;i++) if(owner[i]>(-1)) {
X  		if(j>0) abonus += (15 * j * troops[i]) / asold;
X  		if(k>0 && dsold>0) dbonus += (15 * k * troops[i]) / dsold;
X  	}
X***************
X*** 351,357 ****
X  	if (dsold>0) dbonus/=dsold;
X  
X  	/*CALCULATED BONUSES TO WHOLE COMBAT*/
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)) {
X  		if(fort_val(&sct[xspot][yspot]) != 0){
X  			/*Catapults add +1%/20 men defending castle (max +10%)*/
X  			if((ntn[owner[i]].arm[unit[i]].unittyp == A_CATAPULT)
X--- 353,359 ----
X  	if (dsold>0) dbonus/=dsold;
X  
X  	/*CALCULATED BONUSES TO WHOLE COMBAT*/
X! 	for(i=0;i<count;i++) if(owner[i]>(-1)) {
X  		if(fort_val(&sct[xspot][yspot]) != 0){
X  			/*Catapults add +1%/20 men defending castle (max +10%)*/
X  			if((ntn[owner[i]].arm[unit[i]].unittyp == A_CATAPULT)
X***************
X*** 472,478 ****
X  	if(PDloss>100) PDloss = 100;
X  
X  	Aloss = Dloss = 0;
X! 	for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)){
X  		if(side[i]==ATKR){
X  			if( ntn[owner[i]].arm[unit[i]].unittyp >= MINLEADER) {
X  				if((rand()%100) < PAloss){ /* kill it */
X--- 474,480 ----
X  	if(PDloss>100) PDloss = 100;
X  
X  	Aloss = Dloss = 0;
X! 	for(i=0;i<count;i++) if(owner[i]>(-1)){
X  		if(side[i]==ATKR){
X  			if( ntn[owner[i]].arm[unit[i]].unittyp >= MINLEADER) {
X  				if((rand()%100) < PAloss){ /* kill it */
X***************
X*** 546,557 ****
X  	fprintf(fnews,"4.\tBattle in %d,%d",xspot,yspot);
X  	k = 25;
X  #endif
X! 	for(j=0;j<MGKNUM;j++) if(UOWNER(j)>(-1)){
X  		done=FALSE;
X  		for(i=0;i<j;i++) if(UOWNER(j)==UOWNER(i)) done=TRUE;
X  		if(done==FALSE) {
X  			loss=NTRL;
X! 			for(i=j;(loss==NTRL||loss==WIMP) && i<MGKNUM;i++)
X  				if(UOWNER(i)==UOWNER(j)) {
X  					if(owner[i]<(-1)) loss=WIMP;
X  					else loss=side[i];
X--- 548,559 ----
X  	fprintf(fnews,"4.\tBattle in %d,%d",xspot,yspot);
X  	k = 25;
X  #endif
X! 	for(j=0;j<count;j++) if(UOWNER(j)>(-1)){
X  		done=FALSE;
X  		for(i=0;i<j;i++) if(UOWNER(j)==UOWNER(i)) done=TRUE;
X  		if(done==FALSE) {
X  			loss=NTRL;
X! 			for(i=j;(loss==NTRL||loss==WIMP) && i<count;i++)
X  				if(UOWNER(i)==UOWNER(j)) {
X  					if(owner[i]<(-1)) loss=WIMP;
X  					else loss=side[i];
X***************
X*** 574,580 ****
X  	}
X  	fprintf(fnews,"\n");
X  	if(nvamps>0){
X! 		for(i=0;i<MGKNUM;i++) if(owner[i]>(-1)){
X  			if((magic(owner[i],VAMPIRE)==TRUE)
X  			&&(ntn[owner[i]].arm[unit[i]].unittyp==A_ZOMBIE)
X  			&&(ntn[owner[i]].arm[unit[i]].sold > 0))
X--- 576,582 ----
X  	}
X  	fprintf(fnews,"\n");
X  	if(nvamps>0){
X! 		for(i=0;i<count;i++) if(owner[i]>(-1)){
X  			if((magic(owner[i],VAMPIRE)==TRUE)
X  			&&(ntn[owner[i]].arm[unit[i]].unittyp==A_ZOMBIE)
X  			&&(ntn[owner[i]].arm[unit[i]].sold > 0))
X***************
X*** 583,589 ****
X  	}
X  
X  	/*who is in the battle; but don't send to scared armies */
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]>(-1)){
X  		done=FALSE;
X  
X  		/*first time your nation appears done=FALSE*/
X--- 585,591 ----
X  	}
X  
X  	/*who is in the battle; but don't send to scared armies */
X! 	for(j=0;j<count;j++) if(owner[j]>(-1)){
X  		done=FALSE;
X  
X  		/*first time your nation appears done=FALSE*/
X***************
X*** 592,600 ****
X  		if((done==FALSE)&&(ispc(ntn[owner[j]].active))) {
X  
X  			loss=NTRL;
X! 			for(i=j;loss==NTRL && i<MGKNUM;i++)
X  				loss=side[i];
X! 			mailopen( owner[j] );
X  
X  			fprintf(fm,"BATTLE SUMMARY for sector %d, %d\n",xspot,yspot);
X  			fprintf(fm,"Battle occured during %s of Year %d\n",PSEASON(TURN),YEAR(TURN));
X--- 594,602 ----
X  		if((done==FALSE)&&(ispc(ntn[owner[j]].active))) {
X  
X  			loss=NTRL;
X! 			for(i=j;loss==NTRL && i<count;i++)
X  				loss=side[i];
X! 			if (mailopen( owner[j] )==(-1)) continue;
X  
X  			fprintf(fm,"BATTLE SUMMARY for sector %d, %d\n",xspot,yspot);
X  			fprintf(fm,"Battle occured during %s of Year %d\n",PSEASON(TURN),YEAR(TURN));
X***************
X*** 606,621 ****
X  			else	fprintf(fm,"You are Neutral\n");
X  
X  			/*detail all participants in battle*/
X! 			for(k=0;k<MGKNUM;k++) if(owner[k]!=(-1)){
X  				fprintf(fm," %s ",ntn[UOWNER(k)].name);
X  				if(owner[k]<(-1))
X  					fprintf(fm,"chickens out: ");
X  				else if(side[k]==DFND
X! 				&& ntn[UOWNER(k)].arm[unit[k]].stat!=RULE)
X  					fprintf(fm,"defending: ");
X  				else if(side[k]==ATKR)
X  					fprintf(fm,"attacking: ");
X! 				else fprintf(fm,"neutral: ");
X  				fprintf(fm,"army %d (%s, men %d, bonus=%d, loss=%d)",
X  					unit[k],
X  					unittype[ntn[UOWNER(k)].arm[unit[k]].unittyp%UTYPE],
X--- 608,629 ----
X  			else	fprintf(fm,"You are Neutral\n");
X  
X  			/*detail all participants in battle*/
X! 			for(k=0;k<count;k++) if(owner[k]!=(-1)){
X  				fprintf(fm," %s ",ntn[UOWNER(k)].name);
X  				if(owner[k]<(-1))
X  					fprintf(fm,"chickens out: ");
X  				else if(side[k]==DFND
X! 				&& ntn[owner[k]].arm[unit[k]].stat!=RULE)
X  					fprintf(fm,"defending: ");
X  				else if(side[k]==ATKR)
X  					fprintf(fm,"attacking: ");
X! 				else if(side[k]==NTRL
X! 				|| (side[k]==DFND
X! 				    && ntn[owner[k]].arm[unit[k]].stat==RULE))
X! 					fprintf(fm,"neutral: ");
X! 				else
X! 					fprintf(fm,"in limbo: ");
X! 			
X  				fprintf(fm,"army %d (%s, men %d, bonus=%d, loss=%d)",
X  					unit[k],
X  					unittype[ntn[UOWNER(k)].arm[unit[k]].unittyp%UTYPE],
X***************
X*** 643,649 ****
X  			if(Dloss<dsold)
X  			fprintf(fm,"Additionally, All defenders retreat to %d %d\n",retreatx,retreaty);
X  			}
X! 			mailclose();
X  		}
X  	}
X  	retreat( -1 );
X--- 651,657 ----
X  			if(Dloss<dsold)
X  			fprintf(fm,"Additionally, All defenders retreat to %d %d\n",retreatx,retreaty);
X  			}
X! 			mailclose(owner[j]);
X  		}
X  	}
X  	retreat( -1 );
X***************
X*** 794,800 ****
X  
X  	if(retreatside == 0) return;
X  
X! 	for(cnum=0;cnum<MGKNUM;cnum++) if(owner[cnum]>(-1)){
X  		if( unitnum != (-1) ) cnum=unitnum;
X  		if((side[cnum]==ATKR)&&(retreatside==ATKR)){
X  			ntn[owner[cnum]].arm[unit[cnum]].xloc = retreatx;
X--- 802,808 ----
X  
X  	if(retreatside == 0) return;
X  
X! 	for(cnum=0;cnum<count;cnum++) if(owner[cnum]>(-1)){
X  		if( unitnum != (-1) ) cnum=unitnum;
X  		if((side[cnum]==ATKR)&&(retreatside==ATKR)){
X  			ntn[owner[cnum]].arm[unit[cnum]].xloc = retreatx;
X***************
X*** 840,846 ****
X  	printf("In Naval Combat....\n");
X  
X  	/* determine who is attacker & who is on defenders side?*/
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]!=(-1)){
X  		if(owner[j]==anation) side[j]=ATKR;
X  		else if(ntn[anation].dstatus[owner[j]]==JIHAD) side[j]=DFND;
X  		else if(ntn[owner[j]].dstatus[anation]==JIHAD) side[j]=DFND;
X--- 848,854 ----
X  	printf("In Naval Combat....\n");
X  
X  	/* determine who is attacker & who is on defenders side?*/
X! 	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X  		if(owner[j]==anation) side[j]=ATKR;
X  		else if(ntn[anation].dstatus[owner[j]]==JIHAD) side[j]=DFND;
X  		else if(ntn[owner[j]].dstatus[anation]==JIHAD) side[j]=DFND;
X***************
X*** 864,870 ****
X        *     MARINE                          1/3
X  	 *     others                          4/3
X  	 */
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]!=(-1)){
X  		curntn= &ntn[owner[j]];
X  		country= owner[j];
X  		wnum[j]=SHIPS(ntn[country].nvy[unit[j]].warships,N_LIGHT)+
X--- 872,878 ----
X        *     MARINE                          1/3
X  	 *     others                          4/3
X  	 */
X! 	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X  		curntn= &ntn[owner[j]];
X  		country= owner[j];
X  		wnum[j]=SHIPS(ntn[country].nvy[unit[j]].warships,N_LIGHT)+
X***************
X*** 1016,1022 ****
X  	if (PDloss>100) PDloss=100;
X  
X  	/* calculate actual losses */
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]!=(-1)){
X  		curntn= &ntn[owner[j]];
X  		country= owner[j];
X  
X--- 1024,1030 ----
X  	if (PDloss>100) PDloss=100;
X  
X  	/* calculate actual losses */
X! 	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X  		curntn= &ntn[owner[j]];
X  		country= owner[j];
X  
X***************
X*** 1228,1234 ****
X  #else
X  	fprintf(fnews,"4.\t%d,%d: Naval Battle",xspot,yspot);
X  #endif
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]!=(-1)){
X  		k=0;
X  		for(i=0;i<j;i++) if(owner[j]==owner[i]) k=1;
X  		if(k==0) {
X--- 1236,1242 ----
X  #else
X  	fprintf(fnews,"4.\t%d,%d: Naval Battle",xspot,yspot);
X  #endif
X! 	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X  		k=0;
X  		for(i=0;i<j;i++) if(owner[j]==owner[i]) k=1;
X  		if(k==0) {
X***************
X*** 1241,1247 ****
X  	fprintf(fnews,"\n");
X  
X  	/*mail results; who is in the battle*/
X! 	for(j=0;j<MGKNUM;j++) if(owner[j]!=(-1)){
X  		done=FALSE;
X  
X  		/*first time your nation appears done=FALSE*/
X--- 1249,1255 ----
X  	fprintf(fnews,"\n");
X  
X  	/*mail results; who is in the battle*/
X! 	for(j=0;j<count;j++) if(owner[j]!=(-1)){
X  		done=FALSE;
X  
X  		/*first time your nation appears done=FALSE*/
X***************
X*** 1248,1254 ****
X  		for(i=0;i<j;i++) if(owner[j]==owner[i]) done=TRUE;
X  
X  		if((done==FALSE)&&(ispc(ntn[owner[j]].active))) {
X! 			mailopen( owner[j] );
X  
X  			fprintf(fm,"NAVAL BATTLE in sector %d %d\n",xspot,yspot);
X  			fprintf(fm,"Battle occured during %s of Year %d\n",
X--- 1256,1262 ----
X  		for(i=0;i<j;i++) if(owner[j]==owner[i]) done=TRUE;
X  
X  		if((done==FALSE)&&(ispc(ntn[owner[j]].active))) {
X! 			if (mailopen( owner[j] )==(-1)) continue;
X  
X  			fprintf(fm,"NAVAL BATTLE in sector %d %d\n",xspot,yspot);
X  			fprintf(fm,"Battle occured during %s of Year %d\n",
X***************
X*** 1261,1267 ****
X  			else	fprintf(fm,"You are on the Neutral Side\n");
X  
X  			/*detail all participants in battle*/
X! 			for(k=0;k<MGKNUM;k++) if(owner[k]!=(-1)){
X  				if(side[k]==DFND)
X  				fprintf(fm," %s is defender with navy ",ntn[owner[k]].name);
X  				else if(side[k]==ATKR)
X--- 1269,1275 ----
X  			else	fprintf(fm,"You are on the Neutral Side\n");
X  
X  			/*detail all participants in battle*/
X! 			for(k=0;k<count;k++) if(owner[k]!=(-1)){
X  				if(side[k]==DFND)
X  				fprintf(fm," %s is defender with navy ",ntn[owner[k]].name);
X  				else if(side[k]==ATKR)
X***************
X*** 1283,1289 ****
X  			show_ships("Defending","sunk",dwsunk,dgsunk,dmsunk);
X  			show_ships("Attacking","captured",awcapt,agcapt,amcapt);
X  			show_ships("Defending","captured",dwcapt,dgcapt,dmcapt);
X! 			mailclose();
X  		}
X  	}
X  	curntn= saventn;
X--- 1291,1297 ----
X  			show_ships("Defending","sunk",dwsunk,dgsunk,dmsunk);
X  			show_ships("Attacking","captured",awcapt,agcapt,amcapt);
X  			show_ships("Defending","captured",dwcapt,dgcapt,dmcapt);
X! 			mailclose(owner[j]);
X  		}
X  	}
X  	curntn= saventn;
X***************
X*** 1302,1308 ****
X  	printf("capture: hdcnt==%d typ==%d spsz==%d to==%d\n",holdcount,
X  		  type,shipsize,to);
X  #endif DEBUG
X! 	for (i=0;holdcount && i<MGKNUM;i++) {
X  		if (owner[i]!=(-1) && side[i]==to) {
X  			curntn= &ntn[owner[i]];
X  			holdcount -= fltwhold(unit[i]);
X--- 1310,1316 ----
X  	printf("capture: hdcnt==%d typ==%d spsz==%d to==%d\n",holdcount,
X  		  type,shipsize,to);
X  #endif DEBUG
X! 	for (i=0;holdcount && i<count;i++) {
X  		if (owner[i]!=(-1) && side[i]==to) {
X  			curntn= &ntn[owner[i]];
X  			holdcount -= fltwhold(unit[i]);
X***************
X*** 1315,1321 ****
X  #ifdef DEBUG
X  	printf("capture 2: holdcount==%d i==%d\n",holdcount,i);
X  #endif DEBUG
X! 	if (i==MGKNUM) {
X  		curntn = saventn;
X  		return;
X  	}
X--- 1323,1329 ----
X  #ifdef DEBUG
X  	printf("capture 2: holdcount==%d i==%d\n",holdcount,i);
X  #endif DEBUG
X! 	if (i==count) {
X  		curntn = saventn;
X  		return;
X  	}
X*** omove.c	Wed Sep 20 21:40:56 1989
SHAR_EOF
echo "End of part 2, continue with part 3"
echo "3" > s2_seq_.tmp
exit 0