[comp.sources.games.bugs] Conquer Version 4.0: Official Patch #1

adb@bu-cs.BU.EDU (Adam Bryant) (07/02/89)

Okay... here is the first patch.  Look in notes.v4 for
a list of what it fixes.  Please apply it to the original
distribution source.  [For those who gave me addresses: I
am sending a test message today.... let me know if you
do not receive it by monday.]

adam
p.s. - How do I get this file archived under comp.sources.games
anyway?  I forgot the moderators address.... *sigh*
----------
*** opatchlevel.h
--- patchlevel.h
**************
*** 1
! #define PATCHLEVEL	0
--- 1 -----
! #define PATCHLEVEL	1
*** onotes.v4
--- notes.v4
**************
*** 1,7
  ------------------------------------------------------------------------------
  | THIS FILE CONTAINS RELEASE NOTES FOR CONQUER V4.0 			     |
! | It is broken into 3 sections.  Section 1 reflects changes from v3.5 to v4. |
! | Section 2 reflects bugs in v4.0.  Section 3 reflects. Future ideas.        |
  ------------------------------------------------------------------------------
  
  -------------------------------------------------------------------------
--- 1,7 -----
  ------------------------------------------------------------------------------
  | THIS FILE CONTAINS RELEASE NOTES FOR CONQUER V4.0 			     |
! | It is broken into 3 sections.  Section 3 reflects changes from v3.5 to v4. |
! | Section 1 reflects bugs in v4.0.  Section 2 reflects. Future ideas.        |
  ------------------------------------------------------------------------------
  -------------------------------------------------------------------------
  | == Bugs Fixed From Conquer Version 4.0 ============================== |
**************
*** 3,8
  | It is broken into 3 sections.  Section 1 reflects changes from v3.5 to v4. |
  | Section 2 reflects bugs in v4.0.  Section 3 reflects. Future ideas.        |
  ------------------------------------------------------------------------------
  
  -------------------------------------------------------------------------
  | 1.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V4		|
--- 3,23 -----
  | It is broken into 3 sections.  Section 3 reflects changes from v3.5 to v4. |
  | Section 1 reflects bugs in v4.0.  Section 2 reflects. Future ideas.        |
  ------------------------------------------------------------------------------
+ -------------------------------------------------------------------------
+ | == Bugs Fixed From Conquer Version 4.0 ============================== |
+ -------------------------------------------------------------------------
+   1. increased newstring[] array from 40 to 100 in makeworl.c.
+   2. corrected a mispelling of irrigation.
+   3. line 830 of makeworl.c, added a y=(rand()%20); statement.
+   4. corrected some bugs in newlogin() routine.  Fixed orc repro buying.
+   5. made the -d flag be a subdirectory of DEFAULTDIR if not beginning
+ 	with a '/'.
+   6. fixed overruns of NTOTAL throughout the game.
+   7. new function to decrease size of a test statement in extcmds.c.
+   8. changed newlogin routine for detection of available countries.
+   9. merged do_lizard() and updlizard().  [used name do_lizard()].
+  10. fixed bug with getchar querys in makeworl.c.
+  11. fixed bug with y < MAPX mistype in randeven.c.
  
  -------------------------------------------------------------------------
  | 1.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V4		|
*** oMakefile
--- Makefile
*** oREADME
--- README
*** oheader.h
--- header.h
*** odata.h
--- data.h
**************
*** 179,188
  
  struct s_sector
  {
! 	char	designation;		/* designation of sector	*/
! 	char	altitude;		/* sector altitude		*/
! 	char	vegetation;		/* sector vegetation		*/
! 	char	owner;			/* nation id of owner		*/
  	long	people;			/* civilians in sector		*/
  	short	i_people;		/* initial civilians in sector	*/
  	unsigned char	jewels;		/* jewel production ability	*/
--- 179,188 -----
  
  struct s_sector
  {
! 	unsigned char	designation;	/* designation of sector	*/
! 	unsigned char	altitude;	/* sector altitude		*/
! 	unsigned char	vegetation;	/* sector vegetation		*/
! 	unsigned char	owner;		/* nation id of owner		*/
  	long	people;			/* civilians in sector		*/
  	short	i_people;		/* initial civilians in sector	*/
  	unsigned char	jewels;		/* jewel production ability	*/
**************
*** 200,208
  	unsigned short warships;
  	unsigned short merchant;
  	unsigned short galleys;
! 	char xloc;
! 	char yloc;
! 	char smove;			/* movement ability of ship */
  	unsigned char crew;		/* crew on ship */
  	unsigned char people;		/* people carried */
  	unsigned char commodity;	/* future commodities */
--- 200,208 -----
  	unsigned short warships;
  	unsigned short merchant;
  	unsigned short galleys;
! 	unsigned char xloc;
! 	unsigned char yloc;
! 	unsigned char smove;		/* movement ability of ship */
  	unsigned char crew;		/* crew on ship */
  	unsigned char people;		/* people carried */
  	unsigned char commodity;	/* future commodities */
**************
*** 206,212
  	unsigned char crew;		/* crew on ship */
  	unsigned char people;		/* people carried */
  	unsigned char commodity;	/* future commodities */
! 	char armynum;			/* army carried */
  };
  
  
--- 206,212 -----
  	unsigned char crew;		/* crew on ship */
  	unsigned char people;		/* people carried */
  	unsigned char commodity;	/* future commodities */
! 	unsigned char armynum;		/* army carried */
  };
  
  
**************
*** 342,350
  struct army
  {
  	unsigned char unittyp;
! 	char xloc;
! 	char yloc;
! 	char smove;
  	long sold;
  	char stat;
  };
--- 342,350 -----
  struct army
  {
  	unsigned char unittyp;
! 	unsigned char xloc;
! 	unsigned char yloc;
! 	unsigned char smove;
  	long sold;
  	unsigned char stat;
  };
**************
*** 346,352
  	char yloc;
  	char smove;
  	long sold;
! 	char stat;
  };
  
  struct	s_nation		/* player nation stats	*/
--- 346,352 -----
  	unsigned char yloc;
  	unsigned char smove;
  	long sold;
! 	unsigned char stat;
  };
  
  struct	s_nation		/* player nation stats	*/
**************
*** 357,366
  	char	race;		/* national race (integer--see header.h)*/
  	char	location;	/* location variable (gfr)	*/
  	char	mark;		/* unique mark for nation	*/
! 	char	capx;		/* Capitol x coordinate		*/
! 	char	capy;		/* Capitol y coordinate		*/
! 	char	active;		/* nation type and strategy	*/
! 	char	maxmove;	/* maximum movement of soldiers */
  	char	repro;		/* reproduction rate of nation	*/
  	long	score;		/* score			*/
  	long	tgold;		/* gold in treasury		*/
--- 357,366 -----
  	char	race;		/* national race (integer--see header.h)*/
  	char	location;	/* location variable (gfr)	*/
  	char	mark;		/* unique mark for nation	*/
! 	unsigned char	capx;	/* Capitol x coordinate		*/
! 	unsigned char	capy;	/* Capitol y coordinate		*/
! 	unsigned char	active;	/* nation type and strategy	*/
! 	unsigned char	maxmove;/* maximum movement of soldiers */
  	char	repro;		/* reproduction rate of nation	*/
  	long	score;		/* score			*/
  	long	tgold;		/* gold in treasury		*/
**************
*** 384,400
  	unsigned char	tax_rate;	/* taxrate populace	*/
  	unsigned char	prestige;	/* nations prestige	*/
  	unsigned char	popularity;	/* governments popularity	*/
! 	unsigned char	power;			/* nation power	*/
! 	unsigned char	communications;		/* leader communication	*/
! 	unsigned char	wealth;			/* per capita income	*/
! 	unsigned char	eatrate;		/* food eaten / 10 people*/
! 	unsigned char	spoilrate;		/* food spoilage rate	*/
! 	unsigned char	knowledge;		/* general knowledge	*/
! 	unsigned char	farm_ability;		/* farming ability	*/
! 	unsigned char	mine_ability;		/* mine ability		*/
! 	unsigned char	poverty;		/* % poor people	*/
! 	unsigned char	terror;			/* peoples terror of you*/
! 	unsigned char	reputation;		/* reputation of nation	*/
  };
  #define	P_NTNCOM	((((float) curntn->communications)/ 50.0 ))
  #define	P_EATRATE	((((float) curntn->eatrate) / 25.0 ))
--- 384,400 -----
  	unsigned char	tax_rate;	/* taxrate populace	*/
  	unsigned char	prestige;	/* nations prestige	*/
  	unsigned char	popularity;	/* governments popularity	*/
! 	unsigned char	power;		/* nation power		*/
! 	unsigned char	communications;	/* leader communication	*/
! 	unsigned char	wealth;		/* per capita income	*/
! 	unsigned char	eatrate;	/* food eaten / 10 people*/
! 	unsigned char	spoilrate;	/* food spoilage rate	*/
! 	unsigned char	knowledge;	/* general knowledge	*/
! 	unsigned char	farm_ability;	/* farming ability	*/
! 	unsigned char	mine_ability;	/* mine ability		*/
! 	unsigned char	poverty;	/* % poor people	*/
! 	unsigned char	terror;		/* peoples terror of you*/
! 	unsigned char	reputation;	/* reputation of nation	*/
  };
  #define	P_NTNCOM	((((float) curntn->communications)/ 50.0 ))
  #define	P_EATRATE	((((float) curntn->eatrate) / 25.0 ))
**************
*** 623,629
  extern void	randomevent(), wdisaster(), weather(), deplete();
  extern void	verify_ntn(), verify_sct(), verifydata(), prep();
  extern void	destroy(), updmove(), spreadsheet(), mailopen(), mailclose();
! extern void	updexecs(), updlizards(), updcapture(), updsectors();
  extern void	updmil(), updcomodities(), updleader();
  extern void	nationrun(), n_atpeace(), n_trespass(), n_people();
  extern void	n_toofar(), n_unowned(), pceattr(), checkout();
--- 623,629 -----
  extern void	randomevent(), wdisaster(), weather(), deplete();
  extern void	verify_ntn(), verify_sct(), verifydata(), prep();
  extern void	destroy(), updmove(), spreadsheet(), mailopen(), mailclose();
! extern void	updexecs(), updcapture(), updsectors();
  extern void	updmil(), updcomodities(), updleader();
  extern void	nationrun(), n_atpeace(), n_trespass(), n_people();
  extern void	n_toofar(), n_unowned(), pceattr(), checkout();
**************
*** 935,941
  #define GODJEWL		3000L		/* " */
  #define GODPRICE	25000L
  
! #ifdef 0
  /* THE FOLLOWING DEFINES ARE NOT IMPLEMENTED YET		*/
  /* THEY DEFINE THE ATTRIBUTES OF A (TO BE IMPLEMENTED) REGION	*/
  
--- 935,941 -----
  #define GODJEWL		3000L		/* " */
  #define GODPRICE	25000L
  
! #ifdef XYZ
  /* THE FOLLOWING DEFINES ARE NOT IMPLEMENTED YET		*/
  /* THEY DEFINE THE ATTRIBUTES OF A (TO BE IMPLEMENTED) REGION	*/
  
*** oadmin.c
--- admin.c
**************
*** 90,96
  		strcpy(scenario, optarg);
  		break;
  	case 'd':
! 		strcpy(defaultdir, optarg);
  		break;
  	case '?': /*  print out command line arguments */
  		printf("Command line format: %s [-maxp -dDIR -rSCENARIO]\n",argv[0]);
--- 90,100 -----
  		strcpy(scenario, optarg);
  		break;
  	case 'd':
! 		if(optarg[0]!='/') {
! 			sprintf(defaultdir, "%s/%s", DEFAULTDIR, optarg);
! 		} else {
! 			strcpy(defaultdir, optarg);
! 		}
  		break;
  	case '?': /*  print out command line arguments */
  		printf("Command line format: %s [-maxp -dDIR -rSCENARIO]\n",argv[0]);
**************
*** 122,128
  		exit(FAIL);
  	}
  	if((mflag)||(rflag)) {
- 		makeworld(rflag);
  		sprintf(string,"%sup",isonfile);
  		unlink(string);
  		exit(SUCCESS);
--- 126,131 -----
  		exit(FAIL);
  	}
  	if((mflag)||(rflag)) {
  		sprintf(string,"%sup",isonfile);
  		unlink(string);
  		makeworld(rflag);
**************
*** 125,130
  		makeworld(rflag);
  		sprintf(string,"%sup",isonfile);
  		unlink(string);
  		exit(SUCCESS);
  	}
  
--- 128,134 -----
  	if((mflag)||(rflag)) {
  		sprintf(string,"%sup",isonfile);
  		unlink(string);
+ 		makeworld(rflag);
  		exit(SUCCESS);
  	}
  
**************
*** 162,168
  		/* prevent more than one addition */
  		sprintf(string,"%sadd",isonfile);
  		if(check_lock(string,TRUE)==TRUE) {
! 			printf("Some else is adding\n");
  			printf("Please try again later.\n");
  			exit(FAIL);
  		}
--- 166,172 -----
  		/* prevent more than one addition */
  		sprintf(string,"%sadd",isonfile);
  		if(check_lock(string,TRUE)==TRUE) {
! 			printf("Someone else is adding\n");
  			printf("Please try again later.\n");
  			exit(FAIL);
  		}
*** oextcmds.c
--- extcmds.c
**************
*** 84,89
  	refresh();
  }
  
  void
  combinearmies(armynum,army2)
  int armynum, army2;
--- 84,114 -----
  	refresh();
  }
  
+ /* returns TRUE if uncombinable FALSE if combinable */
+ int
+ nocomb_stat(astat)
+ 	unsigned char astat;
+ {
+ 	int hold;
+ 
+ 	switch(astat) {
+ #ifdef TRADE
+ 	case TRADED:
+ #endif TRADE
+ 	case FLIGHT:
+ 	case MAGATT:
+ 	case MAGDEF:
+ 	case SCOUT:
+ 	case ONBOARD:
+ 		hold = TRUE;
+ 		break;
+ 	default:
+ 		hold = FALSE;
+ 		break;
+ 	}
+ 	return(hold);
+ }
+ 
  void
  combinearmies(armynum,army2)
  int armynum, army2;
**************
*** 88,93
  combinearmies(armynum,army2)
  int armynum, army2;
  {
  	if (armynum < 0 || armynum >= MAXARM ||
  		army2 < 0 || army2 >= MAXARM ||
  		armynum == army2 ||
--- 113,120 -----
  combinearmies(armynum,army2)
  int armynum, army2;
  {
+ 	int nocomb_stat();
+ 
  	if (armynum < 0 || armynum >= MAXARM ||
  		army2 < 0 || army2 >= MAXARM ||
  		armynum == army2 ||
**************
*** 91,110
  	if (armynum < 0 || armynum >= MAXARM ||
  		army2 < 0 || army2 >= MAXARM ||
  		armynum == army2 ||
! #ifdef TRADE
! 		P_ASTAT == TRADED ||
! 		curntn->arm[army2].stat == TRADED ||
! #endif TRADE
! 		P_ASTAT == FLIGHT ||
! 		curntn->arm[army2].stat == FLIGHT ||
! 		P_ASTAT == MAGATT ||
! 		curntn->arm[army2].stat == MAGATT ||
! 		P_ASTAT == MAGDEF ||
! 		curntn->arm[army2].stat == MAGDEF ||
! 		P_ASTAT == SCOUT ||
! 		curntn->arm[army2].stat == SCOUT ||
! 		P_ASTAT == ONBOARD ||
! 		curntn->arm[army2].stat == ONBOARD ||
  		curntn->arm[army2].stat == SIEGE ||    /* may not jump out  */
  		curntn->arm[army2].stat == SORTIE ||   /* of these statuses */
  		P_ATYPE >= MINLEADER ||
--- 118,125 -----
  	if (armynum < 0 || armynum >= MAXARM ||
  		army2 < 0 || army2 >= MAXARM ||
  		armynum == army2 ||
! 		(nocomb_stat(P_ASTAT) == TRUE) ||
! 		(nocomb_stat(curntn->arm[army2].stat) == TRUE) ||
  		curntn->arm[army2].stat == SIEGE ||    /* may not jump out  */
  		curntn->arm[army2].stat == SORTIE ||   /* of these statuses */
  		P_ATYPE >= MINLEADER ||
**************
*** 221,227
  	}
  	P_ASTAT = new_stat;
  	AADJSTAT;
! 	if( P_AMOVE>0 ) P_AMOVE--;
  	AADJMOV;
  }
  
--- 236,242 -----
  	}
  	P_ASTAT = new_stat;
  	AADJSTAT;
! 	if( P_AMOVE != 0 ) P_AMOVE--;
  	AADJMOV;
  }
  
*** omakeworl.c
--- makeworl.c
**************
*** 45,51
  int	rflag;		/* TRUE if you wish to read in a map from mapfiles */
  {
  	char passwd[PASSLTH+1],*getpass();
! 	char newstring[40];
  	FILE *fopen();
  
  	/*abort if datafile currently exists*/
--- 45,51 -----
  int	rflag;		/* TRUE if you wish to read in a map from mapfiles */
  {
  	char passwd[PASSLTH+1],*getpass();
! 	char newstring[100];
  	FILE *fopen();
  
  	/*abort if datafile currently exists*/
**************
*** 711,717
  	short	npirates=0,nbarbarians=0,nnomads=0,nlizards=0;
  
  	FILE *fp, *fopen();
- 	int done=FALSE;
  	char line[80],allign;
  	char fname[80];
  
--- 711,716 -----
  	short	npirates=0,nbarbarians=0,nnomads=0,nlizards=0;
  
  	FILE *fp, *fopen();
  	char line[80],allign;
  	char fname[80];
  
**************
*** 739,746
  		curntn->mark='-';
  	}
  
! 	for( country=1; country<NTOTAL; country++ ) {
! 		for(i=country+1;i<NTOTAL;i++) {
  			ntn[country].dstatus[i]=UNMET;
  			ntn[i].dstatus[country]=UNMET;
  		}
--- 738,745 -----
  		curntn->mark='-';
  	}
  
! 	for( country=0; country<NTOTAL; country++ ) {
! 		for(i=country;i<NTOTAL;i++) {
  			ntn[country].dstatus[i]=UNMET;
  			ntn[i].dstatus[country]=UNMET;
  		}
**************
*** 828,833
  		if((rand()%2==0)&&(curntn->active!=NPC_LIZARD)){
  			if(rand()%2==0) {
  				x=(rand()%20);
  			} else {
  				x=(MAPX-(rand()%20)-1);
  				y=(MAPY-(rand()%20)-1);
--- 827,833 -----
  		if((rand()%2==0)&&(curntn->active!=NPC_LIZARD)){
  			if(rand()%2==0) {
  				x=(rand()%20);
+ 				y=(rand()%20);
  			} else {
  				x=(MAPX-(rand()%20)-1);
  				y=(MAPY-(rand()%20)-1);
**************
*** 949,955
  		if( ntn[country].active != NPC_BARBARIAN ) continue;
  		curntn = &ntn[country];
  		armynum=barbarmy;
! 		if( country!=NTOTAL ) while(armynum<MAXARM) {
  			x = rand()%MAPX;
  			y = rand()%MAPY;
  			if (is_habitable(x,y)&&sct[x][y].owner==0) {
--- 949,955 -----
  		if( ntn[country].active != NPC_BARBARIAN ) continue;
  		curntn = &ntn[country];
  		armynum=barbarmy;
! 		while(armynum<MAXARM) {
  			x = rand()%MAPX;
  			y = rand()%MAPY;
  			if (is_habitable(x,y)&&sct[x][y].owner==0) {
**************
*** 979,986
  	}
  
  #ifdef NPC
! 	printf("\nDo you want NPC nations in this campaign?");
! 	if( getchar()!='y' ) return;
  	if((fp=fopen(npcsfile,"r"))==NULL) {
  		printf("error on read of %s file\n",npcsfile);
  		printf("Do you wish to use default NPC nations file (y or n)?");
--- 979,987 -----
  	}
  
  #ifdef NPC
! 	printf("\nDo you want NPC nations in this campaign? (y or n)");
! 	while( ((i=getchar()) != 'y')&&(i != 'n') ) ;
! 	if( i!='y' ) return;
  	if((fp=fopen(npcsfile,"r"))==NULL) {
  		printf("error on read of %s file\n",npcsfile);
  		printf("Do you wish to use default NPC nations file (y or n)?");
**************
*** 984,995
  	if((fp=fopen(npcsfile,"r"))==NULL) {
  		printf("error on read of %s file\n",npcsfile);
  		printf("Do you wish to use default NPC nations file (y or n)?");
! 		if(getchar()=='y'){
! 		sprintf(line,"%s/%s",DEFAULTDIR,npcsfile);
! 		if ((fp=fopen(line,"r"))==NULL) {
! 			printf("\nsorry; error on read of %s file\n",line);
! 			return;
! 		} else printf("\nOK; default nations used\n");
  		} else {
  			printf("\nOK; no NPC nations used\n");
  			return;
--- 985,997 -----
  	if((fp=fopen(npcsfile,"r"))==NULL) {
  		printf("error on read of %s file\n",npcsfile);
  		printf("Do you wish to use default NPC nations file (y or n)?");
! 		while( ((i=getchar()) != 'y')&&(i != 'n') ) ;
! 		if( i=='y'){
! 			sprintf(line,"%s/%s",DEFAULTDIR,npcsfile);
! 			if ((fp=fopen(line,"r"))==NULL) {
! 				printf("\nsorry; error on read of %s file\n",line);
! 				return;
! 			} else printf("\nOK; default nations used\n");
  		} else {
  			printf("\nOK; no NPC nations used\n");
  			return;
**************
*** 1072,1078
  			curntn->tfood= curntn->tciv * 3;
  			curntn->metals=10000L;
  			curntn->jewels=10000L;
! 			cnum++;
  			place(xloc,yloc);
  			att_setup(country);	/* nation attributes */
  		}
--- 1074,1080 -----
  			curntn->tfood= curntn->tciv * 3;
  			curntn->metals=10000L;
  			curntn->jewels=10000L;
! 			if (cnum < NTOTAL) cnum++;
  			place(xloc,yloc);
  			att_setup(country);	/* nation attributes */
  		}
*** osort.c
--- sort.c
**************
*** 25,32
   *      as it comes in.
   *
   * Initial Revision:		(adb@bucsf.bu.edu)
!  *	Tuesday March 21th, 1989 - Began the program at 23:26 EST
!  *      Wednesday March 22nd, 1989 - Finished the initial version 11:29 EST
   */
  
  #include <stdio.h>
--- 25,32 -----
   *      as it comes in.
   *
   * Initial Revision:		(adb@bucsf.bu.edu)
!  *     Tuesday March 21th, 1989 - Began the program at 23:26 EST
!  *     Wednesday March 22nd, 1989 - Finished the initial version 11:29 EST
   */
  
  #include <stdio.h>
**************
*** 30,36
   */
  
  #include <stdio.h>
- #include "header.h"
  #ifndef HPUX
  #include <sysexits.h>
  #endif HPUX
--- 30,35 -----
   */
  
  #include <stdio.h>
  #ifndef HPUX
  #include <sysexits.h>
  #endif HPUX
**************
*** 181,187
  
  	}
  
!      /* ==== end of main processing loop ==== */
  
  	/* close input file if not stdin */
  	if (infile!=stdin) {
--- 180,186 -----
  
  	}
  
! 	/* ==== end of main processing loop ==== */
  
  	/* close input file if not stdin */
  	if (infile!=stdin) {
**************
*** 317,320
  	temp->next = nptr;
  	return(temp);
  }
- 
--- 316,318 -----
  	temp->next = nptr;
  	return(temp);
  }
*** orandeven.c
--- randeven.c
**************
*** 70,76
  findnew()
  {
  	int newntn=0,nationis;
! 	for ( nationis=NTOTAL; nationis >= 1; nationis--)
  		if(ntn[nationis].active == INACTIVE) newntn=nationis;
  	if (newntn == 0) return (0);
  	strcpy(ntn[newntn].leader,"rebel");
--- 70,76 -----
  findnew()
  {
  	int newntn=0,nationis;
! 	for ( nationis=NTOTAL-1; nationis >= 1; nationis--)
  		if(ntn[nationis].active == INACTIVE) newntn=nationis;
  	if (newntn == 0) return (0);
  	strcpy(ntn[newntn].leader,"rebel");
**************
*** 1089,1095
  *rand_sector()
  {
  	int count=0;
! 	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPX;ypos++)
  		if(sct[xpos][ypos].owner == country) count++;
  	count = rand()%count;
  	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPX;ypos++){
--- 1089,1095 -----
  *rand_sector()
  {
  	int count=0;
! 	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPY;ypos++)
  		if(sct[xpos][ypos].owner == country) count++;
  	count = rand()%count;
  	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPY;ypos++){
**************
*** 1092,1098
  	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPX;ypos++)
  		if(sct[xpos][ypos].owner == country) count++;
  	count = rand()%count;
! 	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPX;ypos++){
  		if(sct[xpos][ypos].owner == country) count--;
  		if(count==0) return(&sct[xpos][ypos]);
  	}
--- 1092,1098 -----
  	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPY;ypos++)
  		if(sct[xpos][ypos].owner == country) count++;
  	count = rand()%count;
! 	for(xpos=0;xpos<MAPX;xpos++) for(ypos=0;ypos<MAPY;ypos++){
  		if(sct[xpos][ypos].owner == country) count--;
  		if(count==0) return(&sct[xpos][ypos]);
  	}
**************
*** 1096,1101
  		if(sct[xpos][ypos].owner == country) count--;
  		if(count==0) return(&sct[xpos][ypos]);
  	}
  	abrt();
  	return(NULL);	/* stop lint from complaining */
  }
--- 1096,1102 -----
  		if(sct[xpos][ypos].owner == country) count--;
  		if(count==0) return(&sct[xpos][ypos]);
  	}
+ 	fprintf(stderr,"could find no location for country %d\n",country);
  	abrt();
  	return(NULL);	/* stop lint from complaining */
  }
*** ocexecute.c
--- cexecute.c
**************
*** 210,216
  			/* if not own it, and if people there, problem */
  			if((sct[x][y].owner!=country)
  			&&( country!=0)
! 			&&( sct[x][y].owner>0 )
  			&&( sct[x][y].people>0 )
  			&&( magic(country,SLAVER)==FALSE )
  			&&( ntn[sct[x][y].owner].race!=curntn->race)){
--- 210,216 -----
  			/* if not own it, and if people there, problem */
  			if((sct[x][y].owner!=country)
  			&&( country!=0)
! 			&&( sct[x][y].owner!=0 )
  			&&( sct[x][y].people>0 )
  			&&( magic(country,SLAVER)==FALSE )
  			&&( ntn[sct[x][y].owner].race != curntn->race)){
**************
*** 213,219
  			&&( sct[x][y].owner>0 )
  			&&( sct[x][y].people>0 )
  			&&( magic(country,SLAVER)==FALSE )
! 			&&( ntn[sct[x][y].owner].race!=curntn->race)){
  				sct[ntn[sct[x][y].owner].capx][ntn[sct[x][y].owner].capy].people+= sct[x][y].people;
  				sct[x][y].people=0;
  				fprintf(stderr,"ERROR: <%s> taking sector %d %d but civilians exist of other race - puting them in their capitol\n",curntn->name,x,y);
--- 213,219 -----
  			&&( sct[x][y].owner!=0 )
  			&&( sct[x][y].people>0 )
  			&&( magic(country,SLAVER)==FALSE )
! 			&&( ntn[sct[x][y].owner].race != curntn->race)){
  				sct[ntn[sct[x][y].owner].capx][ntn[sct[x][y].owner].capy].people+= sct[x][y].people;
  				sct[x][y].people=0;
  				fprintf(stderr,"ERROR: <%s> taking sector %d %d but civilians exist of other race - puting them in their capitol\n",curntn->name,x,y);
*** oforms.c
--- forms.c
**************
*** 275,281
  			mvaddstr(j++,0,"6) WAR");
  			mvprintw(j++,0,"7) JIHAD (%d talons to break):",BREAKJIHAD);
  			j++;
! 			for( i=1; i<=NTOTAL; i++ )
  				if((isntnorp(ntn[i].active)) && (ntn[nation].dstatus[i]==TREATY))
  				mvprintw(j++,10,"%s has treaty with %s",ntn[nation].name,ntn[i].name);
  
--- 275,281 -----
  			mvaddstr(j++,0,"6) WAR");
  			mvprintw(j++,0,"7) JIHAD (%d talons to break):",BREAKJIHAD);
  			j++;
! 			for( i=1; i<NTOTAL; i++ )
  				if((isntnorp(ntn[i].active)) && (ntn[nation].dstatus[i]==TREATY))
  				mvprintw(j++,10,"%s has treaty with %s",ntn[nation].name,ntn[i].name);
  
**************
*** 315,321
  			&&(ntn[nation].dstatus[country]<WAR)) {
  				ntn[nation].dstatus[country]=WAR;
  				EADJDIP(nation,country);
! 				for( i=1; i<=NTOTAL; i++ )
  				if(ntn[i].dstatus[nation]==TREATY){
  					ntn[i].dstatus[country]=WAR;
  					EADJDIP(i,country);
--- 315,321 -----
  			&&(ntn[nation].dstatus[country]<WAR)) {
  				ntn[nation].dstatus[country]=WAR;
  				EADJDIP(nation,country);
! 				for( i=1; i<NTOTAL; i++ )
  				if(ntn[i].dstatus[nation]==TREATY){
  					ntn[i].dstatus[country]=WAR;
  					EADJDIP(i,country);
**************
*** 657,663
  				}
  				destroy(country);
  				fclose(fnews);
! 				sprintf(command,"%s/%s",DEFAULTDIR, sortname);
  				sprintf(command,"%s %s %s", command, filename, filename);
  				system(command);
  			}
--- 657,663 -----
  				}
  				destroy(country);
  				fclose(fnews);
! 				sprintf(command,"%s/%s", EXEDIR, sortname);
  				sprintf(command,"%s %s %s", command, filename, filename);
  				system(command);
  			}
*** omisc.c
--- misc.c
**************
*** 757,763
  int country;
  {
  	struct s_nation *saventn=curntn;
! 	int i,j,x,y,armynum,nation;
  
  	x = ntn[country].capx;
  	y = ntn[country].capy;
--- 757,763 -----
  int country;
  {
  	struct s_nation *saventn=curntn;
! 	int i,j,x,y,armynum;
  
  	x = ntn[country].capx;
  	y = ntn[country].capy;
**************
*** 940,945
  
  	nptr = &ntn[country];
  	if( ismonst(nptr->active) ) return;
  	fprintf(fnews,"1.\tNation %s was destroyed ",nptr->name);
  	if(country!=sct[nptr->capx][nptr->capy].owner){
  		fprintf(fnews,"(their capitol is now owned by %s)\n",ntn[sct[nptr->capx][nptr->capy].owner].name);
--- 940,946 -----
  
  	nptr = &ntn[country];
  	if( ismonst(nptr->active) ) return;
+ 	if( !isactive(nptr->active) ) return;
  	fprintf(fnews,"1.\tNation %s was destroyed ",nptr->name);
  	if(country!=sct[nptr->capx][nptr->capy].owner){
  		fprintf(fnews,"(their capitol is now owned by %s)\n",ntn[sct[nptr->capx][nptr->capy].owner].name);
*** omove.c
--- move.c
**************
*** 385,391
  				} else if(total>0) {
  					/* remove proportion of starting move */
  					P_AMOVE-= total * curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE))/(10*(groupmen+othermen));
! 					if( P_AMOVE<0 || P_AMOVE>100 )
  						P_AMOVE=0;
  					AADJMOV;
  					if( P_AMOVE==0 )
--- 385,391 -----
  				} else if(total>0) {
  					/* remove proportion of starting move */
  					P_AMOVE-= total * curntn->maxmove * *(unitmove+(P_ATYPE%UTYPE))/(10*(groupmen+othermen));
! 					if( P_AMOVE>150 )
  						P_AMOVE=0;
  					AADJMOV;
  					if( P_AMOVE==0 )
**************
*** 475,480
  		&&(P_ASOLD>0)){
  			if((groupmen>=TAKESECTOR)&&(SOWN==0 )){
  				mvaddstr(LINES-2,0,"Taking Unowned Sector");
  				refresh();
  				sleep(2);
  				SOWN=country;
--- 475,481 -----
  		&&(P_ASOLD>0)){
  			if((groupmen>=TAKESECTOR)&&(SOWN==0 )){
  				mvaddstr(LINES-2,0,"Taking Unowned Sector");
+ 				clrtoeol();
  				refresh();
  				sleep(2);
  				SOWN=country;
*** oupdate.c
--- update.c
**************
*** 39,47
  	check();
  
  #ifdef MONSTER
- 	for( country=1;country<NTOTAL;country++)
- 		if( ntn[country].active == NPC_LIZARD )
- 			updlizards();	/* run lizard nations */
  	check();
  	monster();	/* update monster nations */
  	check();
--- 39,44 -----
  	check();
  
  #ifdef MONSTER
  	check();
  	monster();	/* update monster nations */
  	check();
**************
*** 670,676
  }
  
  /****************************************************************/
! /*	UPDLIZARDS() 						*/
  /* update lizards	 					*/
  /****************************************************************/
  void
--- 667,673 -----
  }
  
  /****************************************************************/
! /*	DO_LIZARD() 						*/
  /* update lizards	 					*/
  /****************************************************************/
  void
**************
*** 674,680
  /* update lizards	 					*/
  /****************************************************************/
  void
! updlizards()
  {
  	register int i, j;
  	int armynum;
--- 671,677 -----
  /* update lizards	 					*/
  /****************************************************************/
  void
! do_lizard()
  {
  	register int i, j;
  	int armynum;
**************
*** 679,685
  	register int i, j;
  	int armynum;
  
! 	printf("updating lizard (nation %d)\n ",country);
  	curntn = &ntn[country];
  	for(armynum=0;armynum<MAXARM;armynum++)
  	if((P_ASOLD>0)) {
--- 676,682 -----
  	register int i, j;
  	int armynum;
  
! 	printf("updating lizard (nation %d)\n",country);
  	curntn = &ntn[country];
  	for(armynum=0;armynum<MAXARM;armynum++)
  	if((P_ASOLD>0)) {
**************
*** 684,689
  	for(armynum=0;armynum<MAXARM;armynum++)
  	if((P_ASOLD>0)) {
  		P_AMOVE =20;	/* just in case god wants to move them */
  		if(armynum%2==0) {
  			if(P_ASTAT!=SIEGED) P_ASTAT=GARRISON;
  		} else {
--- 681,688 -----
  	for(armynum=0;armynum<MAXARM;armynum++)
  	if((P_ASOLD>0)) {
  		P_AMOVE =20;	/* just in case god wants to move them */
+ 		P_ASOLD*=102;	/* increase population */
+ 		P_ASOLD/=100;
  		if(armynum%2==0) {
  			if(P_ASTAT!=SIEGED) P_ASTAT=GARRISON;
  		} else {
*** odata.c
--- data.c
**************
*** 271,277
  "rice", "wheat", "dairy", "peas", "bread", "cereal",
  "pottery", "salt", "timber", "granite", "pine", "oak", "nails",
  "papyrus","math","library","drama","paper","literature","law","philosophy",
! "irregation", "oxen", "plows",
  "stones",
  "herbs", "medicine",
  "torture", "prison",
--- 271,277 -----
  "rice", "wheat", "dairy", "peas", "bread", "cereal",
  "pottery", "salt", "timber", "granite", "pine", "oak", "nails",
  "papyrus","math","library","drama","paper","literature","law","philosophy",
! "irrigation", "oxen", "plows",
  "stones",
  "herbs", "medicine",
  "torture", "prison",
*** omagic.c
--- magic.c
**************
*** 600,606
  		mvaddstr((*count)++,0,"  What orc nation:");
  		refresh();
  		i=get_country();
! 		if(i<=0 || i>NTOTAL || !isntn(ntn[i].active) )
  			mvaddstr((*count)++,0,"  Invalid Nation");
  		else if((curntn->dstatus[i]<HOSTILE)
  		&&(curntn->dstatus[i]!=UNMET)
--- 600,606 -----
  		mvaddstr((*count)++,0,"  What orc nation:");
  		refresh();
  		i=get_country();
! 		if(i<=0 || i>=NTOTAL || !isntn(ntn[i].active) )
  			mvaddstr((*count)++,0,"  Invalid Nation");
  		else if((curntn->dstatus[i]<HOSTILE)
  		&&(curntn->dstatus[i]!=UNMET)
*** onewlogin.c
--- newlogin.c
**************
*** 126,132
  	register i;
  
  	printf("\nPreparing to add player\n");
- 	printf("break at any time to abort\n");
  
  	while(more==TRUE) {
  		points=MAXPTS;
--- 126,131 -----
  	register i;
  
  	printf("\nPreparing to add player\n");
  
  	while(more==TRUE) {
  		points=MAXPTS;
**************
*** 130,135
  
  	while(more==TRUE) {
  		points=MAXPTS;
  		/*find valid nation number type*/
  		for(i=1;i<NTOTAL;i++)
  			if(ntn[i].active==INACTIVE) {
--- 129,135 -----
  
  	while(more==TRUE) {
  		points=MAXPTS;
+ 		country=0;
  		/*find valid nation number type*/
  		for(i=1;i<NTOTAL;i++)
  			if(ntn[i].active==INACTIVE) {
**************
*** 139,145
  			}
  		printf("first valid nation id is %d\n",country);
  
! 		if(i==NTOTAL) {
  			beep();
  			printf("error, cant add new nation\n");
  			return;
--- 139,145 -----
  			}
  		printf("first valid nation id is %d\n",country);
  
! 		if(country==0) {
  			beep();
  			printf("error, cant add new nation\n");
  			return;
**************
*** 389,395
  				printf("how many points to spend on population:");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points >= temp) {
  					points -= temp;
  					curntn->tciv+=temp*NLPOP;
  				}
--- 389,397 -----
  				printf("how many points to spend on population:");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points <= 0) {
! 					printf("Purchase aborted...");
! 				} if(points >= temp) {
  					points -= temp;
  					curntn->tciv+=temp*NLPOP;
  				}
**************
*** 401,408
  				printf("how many points to spend on added gold talons:");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points>=temp)
! 				{
  					points-=temp;
  					curntn->tgold+=temp*NLGOLD;
  				}
--- 403,411 -----
  				printf("how many points to spend on added gold talons:");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points<=0) {
! 					printf("Purchase aborted....");
! 				} else if(points>=temp) {
  					points-=temp;
  					curntn->tgold+=temp*NLGOLD;
  				}
**************
*** 429,435
  				printf("how many points to spend?");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points >= temp) {
  					points -= temp;
  					curntn->tmil+=temp*NLSOLD;
  				}
--- 432,440 -----
  				printf("how many points to spend?");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if (points <= 0) {
! 					printf("Purchase aborted...");
! 				} else if(points >= temp) {
  					points -= temp;
  					curntn->tmil+=temp*NLSOLD;
  				}
**************
*** 445,451
  				printf("how many points do you wish to spend?");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points >= temp) {
  					points -= temp;
  					if(curntn->race == ORC )
  					curntn->aplus+=temp*NLATTACK/2;
--- 450,458 -----
  				printf("how many points do you wish to spend?");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points <= 0) {
! 					printf("Purchase aborted...");
! 				} else if(points >= temp) {
  					points -= temp;
  					if(curntn->race == ORC )
  					curntn->aplus+=temp*NLATTACK/2;
**************
*** 468,474
  				printf("how many points do you wish to spend?");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points >= temp) {
  					points -= temp;
  					if(curntn->race == ORC )
  					curntn->dplus+=temp*NLDEFENCE/2;
--- 475,483 -----
  				printf("how many points do you wish to spend?");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(points <= 0) {
! 					printf("Purchase aborted...");
! 				} else if(points >= temp) {
  					points -= temp;
  					if(curntn->race == ORC )
  					curntn->dplus+=temp*NLDEFENCE/2;
**************
*** 492,498
  					printf("you have the maximum rate");
  					break;
  				}
! 				printf("how many percentage points to add?:");
  				scanf("%d",&temp);
  				putchar('\n');
  				if((points >= (temp*NLREPCOST))
--- 501,507 -----
  					printf("you have the maximum rate");
  					break;
  				}
! 				printf("how many purchasing points to spend?:");
  				scanf("%d",&temp);
  				putchar('\n');
  				if(temp < points) {
**************
*** 495,506
  				printf("how many percentage points to add?:");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if((points >= (temp*NLREPCOST))
! 				||((curntn->race==ORC)
! 					&&(points >= (temp*NLREPCOST/2)))) {
! 					if((curntn->race!=ORC)
! 					&&(curntn->repro+NLREPRO*temp>10)){
! 					printf("that exceeds the 10%% limit");
  					}
  					else if((curntn->race==ORC)
  					&&(curntn->repro>14-NLREPRO_ORC*temp)){
--- 504,532 -----
  				printf("how many purchasing points to spend?:");
  				scanf("%d",&temp);
  				putchar('\n');
! 				if(temp < points) {
! 					printf("You don't have enough points left");
! 				} else if (temp < 0) {
! 					printf("Negative, huh?  Who you trying to kid?");
! 				} else if (temp%NLREPCOST != 0) {
! 					printf("You must spend in multiples of %d",NLREPCOST);
! 				} else {
! 					if(curntn->race != ORC) {
! 						temp = temp/NLREPCOST*NLREPRO;
! 						if(curntn->repro+temp > 10) {
! 							printf("That exceeds the 10% limit");
! 						} else {
! 							points -= (temp*NLREPCOST/NLREPRO);
! 							curntn->repro += temp;
! 						}
! 					} else {
! 						temp = temp/NLREPCOST*NLREPRO_ORC;
! 						if(curntn->repro+temp > 14) {
! 							printf("That exceeds the 14% limit");
! 						} else {
! 							points -= (temp*NLREPCOST/NLREPRO_ORC);
! 							curntn->repro += temp;
! 						}
  					}
  				}
  				break;
**************
*** 502,519
  					&&(curntn->repro+NLREPRO*temp>10)){
  					printf("that exceeds the 10%% limit");
  					}
- 					else if((curntn->race==ORC)
- 					&&(curntn->repro>14-NLREPRO_ORC*temp)){
- 					printf("that exceeds the 14%% limit");
- 					}
- 					else {
- 					if(curntn->race==ORC)
- 						points -= (temp*NLREPCOST/2);
- 					else	points -= temp*NLREPCOST;
- 					if(curntn->race==ORC)
- 						curntn->repro+=NLREPRO_ORC*temp;
- 					else	curntn->repro+=NLREPRO*temp;
- 					}
  				}
  				else printf("You dont have enough points left");
  				break;
--- 528,533 -----
  							curntn->repro += temp;
  						}
  					}
  				}
  				break;
  			case 8:
**************
*** 515,521
  					else	curntn->repro+=NLREPRO*temp;
  					}
  				}
- 				else printf("You dont have enough points left");
  				break;
  			case 8:
  				if(curntn->race == ORC ) {
--- 529,534 -----
  						}
  					}
  				}
  				break;
  			case 8:
  				if(curntn->race == ORC ) {
*** odisplay.c
--- display.c
**************
*** 315,322
  	switch(hilmode){
  	case HI_MOVE:	/* your armies w/ move left */
  		for(armynum=0;armynum<MAXARM;armynum++)
! 			if(( P_ASOLD>0 )
! 			&&( P_AMOVE>0 )
  			&&( P_AXLOC==(x+xoffset ))
  			&&( P_AYLOC==(y+yoffset ))) break;
  		if(armynum<MAXARM) standout();
--- 315,322 -----
  	switch(hilmode){
  	case HI_MOVE:	/* your armies w/ move left */
  		for(armynum=0;armynum<MAXARM;armynum++)
! 			if(( P_ASOLD != 0 )
! 			&&( P_AMOVE != 0 )
  			&&( P_AXLOC==(x+xoffset ))
  			&&( P_AYLOC==(y+yoffset ))) break;
  		if(armynum<MAXARM) standout();
**************
*** 323,329
  		break;
  	case HI_YARM:	/* your armies */
  		for(armynum=0;armynum<MAXARM;armynum++)
! 			if(( P_ASOLD>0)
  			&&( P_AXLOC==x+xoffset)
  			&&( P_AYLOC==y+yoffset)) break;
  		if(armynum<MAXARM) standout();
--- 323,329 -----
  		break;
  	case HI_YARM:	/* your armies */
  		for(armynum=0;armynum<MAXARM;armynum++)
! 			if(( P_ASOLD != 0)
  			&&( P_AXLOC==x+xoffset)
  			&&( P_AYLOC==y+yoffset)) break;
  		if(armynum<MAXARM) standout();
*** omain.c
--- main.c
**************
*** 68,74
  #endif SYSMAIL
  	int sflag=FALSE;
  
! 	char defaultdir[256];
  	struct passwd *getpwnam();
  	owneruid=getuid();
  	strcpy(defaultdir, DEFAULTDIR);
--- 68,74 -----
  #endif SYSMAIL
  	int sflag=FALSE;
  
! 	char defaultdir[256],tmppass[PASSLTH+1];
  	struct passwd *getpwnam();
  	owneruid=getuid();
  	strcpy(defaultdir, DEFAULTDIR);
**************
*** 94,100
  		putchar('\n');
  		exit(SUCCESS);
  	case 'd':
! 		strcpy(defaultdir, optarg);
  		break;
  	case 'n':
  		strcpy(name, optarg);
--- 94,104 -----
  		putchar('\n');
  		exit(SUCCESS);
  	case 'd':
! 		if(optarg[0]!='/') {
! 			sprintf(defaultdir, "%s/%s", DEFAULTDIR, optarg);
! 		} else {
! 			strcpy(defaultdir, optarg);
! 		}
  		break;
  	case 'n':
  		strcpy(name, optarg);
**************
*** 191,197
  	curntn = &ntn[country];
  
  	/*get encrypted password*/
! 	strncpy(passwd,crypt(getpass("\nwhat is your nation's password:"),SALT),PASSLTH);
  	if((strncmp(passwd,curntn->passwd,PASSLTH)!=0)
  	&&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
  		strncpy(passwd,crypt(getpass("\nerror: reenter your nation's password:"),SALT),PASSLTH);
--- 195,202 -----
  	curntn = &ntn[country];
  
  	/*get encrypted password*/
! 	strncpy(tmppass,getpass("\nwhat is your nation's password:"),PASSLTH);
! 	strncpy(passwd,crypt(tmppass,SALT),PASSLTH);
  	if((strncmp(passwd,curntn->passwd,PASSLTH)!=0)
  	&&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
  		strncpy(tmppass,getpass("\nerror: reenter your nation's password:"),PASSLTH);
**************
*** 194,200
  	strncpy(passwd,crypt(getpass("\nwhat is your nation's password:"),SALT),PASSLTH);
  	if((strncmp(passwd,curntn->passwd,PASSLTH)!=0)
  	&&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
! 		strncpy(passwd,crypt(getpass("\nerror: reenter your nation's password:"),SALT),PASSLTH);
  		if((strncmp(passwd,curntn->passwd,PASSLTH)!=0)
  		&&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
  			printf("\nsorry:");
--- 199,206 -----
  	strncpy(passwd,crypt(tmppass,SALT),PASSLTH);
  	if((strncmp(passwd,curntn->passwd,PASSLTH)!=0)
  	&&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
! 		strncpy(tmppass,getpass("\nerror: reenter your nation's password:"),PASSLTH);
! 		strncpy(passwd,crypt(tmppass,SALT),PASSLTH);
  		if((strncmp(passwd,curntn->passwd,PASSLTH)!=0)
  		&&(strncmp(passwd,ntn[0].passwd,PASSLTH)!=0)) {
  			printf("\nsorry:");
**************
*** 1013,1022
  	mvaddstr(10,19, "Copyright (c) 1988 by Edward M Barlow");
  	mvaddstr(11,18,"Written Edward M Barlow and Adam Bryant");
  	mvaddstr(12,26,"All Rights Reserved");
! 	mvaddstr(LINES-7,21,"This version is for personal use only");
! 	mvaddstr(LINES-5,12,"It is expressly forbidden port this software to any form of");
! 	mvaddstr(LINES-4,12,"Personal Computer or to redistribute this software without");
! 	mvaddstr(LINES-3,18,"the permission of Edward Barlow or Adam Bryant");
  	mvprintw(LINES-1, 60, "PRESS ANY KEY");
  	refresh();
  }
--- 1019,1028 -----
  	mvaddstr(10,19, "Copyright (c) 1988 by Edward M Barlow");
  	mvaddstr(11,18,"Written Edward M Barlow and Adam Bryant");
  	mvaddstr(12,26,"All Rights Reserved");
! 	mvaddstr(LINES-7,19,"This version is for personal use only");
! 	mvaddstr(LINES-5,8,"It is expressly forbidden port this software to any form of");
! 	mvaddstr(LINES-4,8,"Personal Computer or to redistribute this software without");
! 	mvaddstr(LINES-3,14,"the permission of Edward Barlow or Adam Bryant");
  	mvprintw(LINES-1, 60, "PRESS ANY KEY");
  	refresh();
  }
*** onpc.c
--- npc.c
**************
*** 89,95
  		if( curntn->active==NPC_NOMAD ) do_nomad();
  		else if( curntn->active==NPC_PIRATE ) do_pirate();
  		else if( curntn->active==NPC_BARBARIAN ) do_barbarian();
! 		else if( curntn->active==NPC_LIZARD ) do_lizard();
  	}
  }
  
--- 89,95 -----
  		if( curntn->active==NPC_NOMAD ) do_nomad();
  		else if( curntn->active==NPC_PIRATE ) do_pirate();
  		else if( curntn->active==NPC_BARBARIAN ) do_barbarian();
! 		else if( curntn->active==NPC_LIZARD ) do_lizard(); /* update.c */
  	}
  }
  
**************
*** 101,107
  	int	x, y;
  
  	/*move nomads */
! 	printf("updating nomad nation %d\n",country);
  	for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0){
  		P_ASTAT=ATTACK;
  		P_AMOVE=(curntn->maxmove * *(unitmove+P_ATYPE%UTYPE))/10;
--- 101,107 -----
  	int	x, y;
  
  	/*move nomads */
! 	printf("updating nomad (nation %d)\n",country);
  	for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0){
  		P_ASTAT=ATTACK;
  		P_AMOVE=(curntn->maxmove * *(unitmove+P_ATYPE%UTYPE))/10;
**************
*** 159,165
  	short armynum;
  	int x, y;
  
! 	printf("updating barbarian nation %d\n",country);
  	for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0){
  		P_ASTAT=ATTACK;
  		if(P_ATYPE<MINLEADER) {
--- 159,165 -----
  	short armynum;
  	int x, y;
  
! 	printf("updating barbarian (nation %d)\n",country);
  	for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0){
  		P_ASTAT=ATTACK;
  		if(P_ATYPE<MINLEADER) {
**************
*** 206,223
  }
  
  void
- do_lizard()
- {
- 	short armynum;
- 
- 	printf("updating lizard nation %d\n",country);
- 	for(armynum=0;armynum<MAXARM;armynum++) if(P_ASOLD>0){
- 		P_ASOLD*=102;
- 		P_ASOLD/=100;
- 	}
- }
- 
- void
  do_pirate()
  {
  	short nvynum,shipsize;
--- 206,211 -----
  }
  
  void
  do_pirate()
  {
  	short nvynum,shipsize;
**************
*** 223,229
  	short nvynum,shipsize;
  	int x, y, campx, campy;
  
! 	printf("updating pirate nation %d\n",country);
  
  	/* if pirate fleet within 3 attack if outnumber any fleets */
  	/* automatically find their base first */
--- 211,217 -----
  	short nvynum,shipsize;
  	int x, y, campx, campy;
  
! 	printf("updating pirate (nation %d)\n",country);
  
  	/* if pirate fleet within 3 attack if outnumber any fleets */
  	/* automatically find their base first */
*** otxt0
--- txt0
**************
*** 46,52
  and resources (civilians, troops, metal, gold...).  Play involves building,
  moving, and controlling armies and navies, diplomacy with other players,
  and adjusting economic activity, which is primarily geared to the production
! of gold for your treasury.  Metals are needed, however to build ships & armies,
  and food is needed to prevent revolts and keep people alive.
  
  Command line format: conquer [-hs -nNAT -dDIR]
--- 46,52 -----
  and resources (civilians, troops, metal, gold...).  Play involves building,
  moving, and controlling armies and navies, diplomacy with other players,
  and adjusting economic activity, which is primarily geared to the production
! of gold for your treasury.  Also, metals are needed to build ships & armies,
  and food is needed to prevent revolts and keep people alive.
  
  Command line format: conquer [-hs -nNAT -dDIR]
*** otxt1
--- txt1
**************
*** 55,61
  Orc nations are very special in Conquer.  The only thing an orc is good at is 
  making other orcs.  They are slow, poor at combat, & bad in special abilities.
  They can get reproduction of up to 14% per year (the normal limit is 10%) & 
! can start with a large number of people as initial reproduction costs are less 
  than normal.  Orcs are led by monsters (they start with MINOR MONSTER power),
  and are always evil (the only good orc is a dead orc...).  They are so nasty,
  EVERYBODY they meet start out hostile (50%) or at war (50%) with them.
--- 55,61 -----
  Orc nations are very special in Conquer.  The only thing an orc is good at is 
  making other orcs.  They are slow, poor at combat, & bad in special abilities.
  They can get reproduction of up to 14% per year (the normal limit is 10%) & 
! can start with a large number of people as initial reproduction costs are less
  than normal.  Orcs are led by monsters (they start with MINOR MONSTER power),
  and are always evil (the only good orc is a dead orc...).  They are so nasty,
  EVERYBODY they meet start out hostile (50%) or at war (50%) with them.

-- 
    Adam Bryant                     ||  ARPANET: adb@bu-it.bu.edu
    40 Chester Street  Apt. 9       ||  BITNET: adb@buenga
    Allston, MA  02134              ||  UUCP: ..!harvard!bu-cs!bucsf!adb
    (617) 353-9249                  ||  CSNET: adb%bucsf@bu-it