home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume6
/
conquer4
/
patch1
/
patches01
Wrap
Text File
|
1989-07-06
|
45KB
|
1,531 lines
*** 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.