billr@saab.CNA.TEK.COM (Bill Randle) (08/07/89)
Submitted-by: Adam Bryant <adb@cs.bu.edu>
Posting-number: Volume 8, Issue 1
Archive-name: conquer4/Patch4a
Patch-To: conquer4: Volume 6, Issue 83-97
[[from the author...
This time it is only three shar files. They unpack into two files:
display.c - replace the current display.c with this.
patchV4.04 - patch file for remainder of files.
Here are some notes about patch #4:
-it fixes the following bugs:
= new nations being unable to fight monsters.
= a number of bugs dealing with the demi-god routines.
= an overflow bug due to mathematical ordering in newlogin.c.
= a miscalculation on npctype definition resulting in a core dump
in some instances.
= npc nations being able to move through neutral territory.
= npc nations being able to disband or group Zombies.
= armies disappearing off of ships. [damn stupid oversite
on that one.]
= XENIX bugs fixed.
= password entry using gets() during curses mode.
-it makes the following additions:
= full dual display mode via the 'd/' command.
= the man.pag was made up to date.
= makeworld is now done through curses.
= map print out routines enhanced and moved to 'conquer'.
= NOSCORE option to limit amount of information displayed on
score lists.
= REMAKE compiler option to allow rebuilds of worlds without
having to delete the data file. This will also work for
demi-gods.
= MORE_MONST option now makes rebirth of monsters a compilation
selection.
-THINGS TO COME NEXT PATCH:
= a set of conquer map manipulation programs:
one for the sun to display the images to the screen. [rjc]
[Would have released this a while ago, but I can't test
it yet, since I have not installed conquer on our suns]
one for PostScript to generate nice looking maps. [MaF]
[Have seen the preliminary output of this and I am impressed,
hopefully it will be totally finished in a few days]
= some bug fixes. [can't be specific, since I haven't
heard the bug reports for this patch yet ;-)]
Once again you can find out a full list of what I was up to
by looking at the patched notes.v4 file.
adam ]]
=================================================================
And here is the first of three shar files:
=================================================================
#!/bin/sh
# shar: Shell Archiver (v1.22)
#
# This is part 1 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
#
# Run the following text with /bin/sh to create:
# patchV4.04
# display.c
#
if test -r s2_seq_.tmp
then echo "Must unpack archives in sequence!"
next=`cat s2_seq_.tmp`; echo "Please unpack part $next next"
exit 1; fi
sed 's/^X//' << 'SHAR_EOF' > patchV4.04 &&
X*** opatchlevel.h Sun Aug 6 20:55:35 1989
X--- patchlevel.h Sun Aug 6 20:55:41 1989
X***************
X*** 1 ****
X! #define PATCHLEVEL 3
X--- 1 ----
X! #define PATCHLEVEL 4
X*** onotes.v4 Sun Aug 6 20:55:35 1989
X--- notes.v4 Sun Aug 6 20:55:41 1989
X***************
X*** 102,114 ****
X 66. rewrote all routines that were called during a newlogin so that print
X statments use the newerror() or newmsg() interface.
X ===4.0 patch number three released => 4.3 ==========================
X
X -------------------------------------------------------------------------
X | 2.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V4 |
X -------------------------------------------------------------------------
X o make land capture only occur during update.
X! o make the create world routine interactive with curses display.
X! o make the newlogin routine interactive with curses display.
X o fix the helpfiles to reflect current changes in game as noted later in this
X file.
X o there is some overflow somewhere, which creates a huge amount of gold
X--- 102,169 ----
X 66. rewrote all routines that were called during a newlogin so that print
X statments use the newerror() or newmsg() interface.
X ===4.0 patch number three released => 4.3 ==========================
X+ 67. fixed a bug reported long ago.. negative treasury and charity.
X+ I get too damn much mail. [I just sent #3 out!!!!]
X+ 68. main.c(798): "%s%s" to "%s%d"... fixes bug in sprintf.
X+ 69. added sprinf(defaultdir,"") to main.c and admin.c.
X+ 70. put test on error messages in place() to make sure it won't call newerror.
X+ 71. moved the '-p' option from admin.c to main.c.
X+ 72. made error messages in main.c go to stderr instead of stdout.
X+ 73. made the '-p' flag display world as seen by nations eyes.
X+ 74. made the designation portion of the display print elevation when NODESIG.
X+ 75. added fix to make sure that demi-god exists. [Richard Caley]
X+ 76. added check to makeworld to make sure given demi-god name exists.
X+ 76. also added a check to forms.c for demi-god name change.
X+ 76. added checks for ORCTAKE definitions to newhelp.c [Jerome Marella]
X+ 77. added a CURRENT directory definition to Makefile. [Kevin Coombes]
X+ 78. fixed bugs in XENIX defines. [Jonathan Bayer]
X+ 79. display.c(301): "+" -> '+'; I thought I fixed this *sigh*. [Richard Caley]
X+ 80. added a REMAKE compiler option to allow destruction of currently running
X+ games. This is usable by demi-god to restart a campaign.
X+ 81. fixed up the man page.
X+ 82. wrote a non-echo string entry routine for curses password entry.
X+ 83. added above routine to newlogin.c, makeworl.c, and forms.c.
X+ 84. removed restriction on changing to NPC after making moves.
X+ This makes sense... since players may move NPC pieces anyway.
X+ 85. changed the makeworld routine to curses interface. This is still
X+ rather rudimentary, and will be worked on prior to Version 5.0.
X+ 86. added NADJLOC; to the two split sections in reports.c:fleetrpt().
X+ 87. corrected misspelling of alignment throughout code.
X+ 88. added check to land_reachp() for neutral status. [Michael D. Smith]
X+ 89. added MORE_MONST compiler option to decide whether or not empty
X+ monster armies should be filled during the game.
X+ 90. fixed misspelling of 'defence' in npc.c and txt4.
X+ 91. fixed overflow of jewels and metal displaying in newlogin.c.
X+ 92. *&$%! fixed a stupid bug with checking if leader is really dead.
X+ 93. added a 'shipchk' to the prep routine. hopefully will fix land taking.
X+ 94. added a redraw after movement if in army highlight mode.
X+ 95. added in new method for displaying anything in 2nd column. [Richard Caley]
X+ 96. tweeked the prompting for the second column display method.
X+ 97. rewrote the section in the help files on the display mode.
X+ 98. fixed major bug with destroying any army in water. [Ben Herman]
X+ Another bug I thought I fixed long ago. *sigh*
X+ 99. newlogin.c(1034): typo caused nations to be too close. [Wes Shreiner]
X+ 100. decrease range of nomad movement to 1 sector from locaton.
X+ 101. removed the shipchk from prep()... didn't do jack anyway.
X+ 102. hacked at the display code some to fix redeclarations and unused vars.
X+ 103. fixed the bug with not being able to take sectors. involved status
X+ of nations not being at WAR with nomads. fixed this by setting
X+ statuses in three places: destroy(), place(), check().
X+ 104. fixed seg fault when entering change() for savages.
X+ 105. removed the printing to fp in change() routine.
X+ 106. changed npctype to detect monsters, otherwise it core dumps.
X+ 107. changed the alignment printing for savages back to what it was.
X+ 108. made sure that NPCs do not group or disband ZOMBIES.
X+ 109. added a NOSCORE compiler option to allow only god to see full score list.
X+ 110. changed the class name NPC to monster.
X
X -------------------------------------------------------------------------
X | 2.0 POSSIBLE SHORT-TERM ENHANCEMENTS/FIXES FOR CONQUER V4 |
X -------------------------------------------------------------------------
X o make land capture only occur during update.
X! o some problems due to two nations capturing same land. should fix by above.
X! o some problems with MINER not providing initial stats on first turn after
X! nation has been added.
X o fix the helpfiles to reflect current changes in game as noted later in this
X file.
X o there is some overflow somewhere, which creates a huge amount of gold
X*** oMakefile Sun Aug 6 20:55:33 1989
X--- Makefile Sun Aug 6 20:55:41 1989
X***************
X*** 3,8 ****
X--- 3,11 ----
X # BY CHANGING THIS FILE, YOU AGREE TO ABIDE BY THE LIMITATIONS STATED IN
X # THE LIMITED USE CONTRACT CONTAINED IN THE FILE "header.h"
X #
X+ # Make sure to set your desired configuration by
X+ # editing the file "header.h".
X+ #
X # This makefile has been modified to allow compilation using
X # a parallelized make program. It has been used successfully
X # on an Encore Multimax parallel computer with both 4 and
X***************
X*** 13,18 ****
X--- 16,23 ----
X # Please report any problems to adb@bucsf.bu.edu
X # or adb@bu-cs.bu.edu
X #
X+ # Conquer news mailing list: conquer-news-request@bu-cs.bu.edu.
X+ #
X MAKE = /bin/make
X CC = /bin/cc
X RM = /bin/rm -f
X***************
X*** 44,53 ****
X # of conquer. [not distributed with conquer V4]
X #GETOPT = getopt.o
X
X! #if the final link does not compile change to the line below
X LIBRARIES = -lcurses -ltermcap
X #LIBRARIES = -lcurses
X
X # DEFAULT is the directory where default nations & help files will be
X # stored. It is also the default directory = where players will play
X # if they do not use the -d option.
X--- 49,68 ----
X # of conquer. [not distributed with conquer V4]
X #GETOPT = getopt.o
X
X! #
X! # libraries for BSD systems:
X LIBRARIES = -lcurses -ltermcap
X+ #
X+ # libraries for SYSV systems:
X #LIBRARIES = -lcurses
X+ #
X+ # libraries for Xenix systems:
X+ #LIBRARIES = -ltermlib -ltcap -lcrypt
X
X+ # CURRENT is this directory. The directory where the source
X+ # and Makefile are located
X+ CURRENT = /usr4/acm/stud/adb/src/conquer
X+
X # DEFAULT is the directory where default nations & help files will be
X # stored. It is also the default directory = where players will play
X # if they do not use the -d option.
X***************
X*** 193,209 ****
X insthelp: helpfile
X @echo Installing helpfiles
X -$(RM) $(DEFAULT)/$(HELPOUT)0
X! -$(LN) $(HELPOUT)0 $(DEFAULT)/$(HELPOUT)0
X -$(RM) $(DEFAULT)/$(HELPOUT)1
X! -$(LN) $(HELPOUT)1 $(DEFAULT)/$(HELPOUT)1
X -$(RM) $(DEFAULT)/$(HELPOUT)2
X! -$(LN) $(HELPOUT)2 $(DEFAULT)/$(HELPOUT)2
X -$(RM) $(DEFAULT)/$(HELPOUT)3
X! -$(LN) $(HELPOUT)3 $(DEFAULT)/$(HELPOUT)3
X -$(RM) $(DEFAULT)/$(HELPOUT)4
X! -$(LN) $(HELPOUT)4 $(DEFAULT)/$(HELPOUT)4
X -$(RM) $(DEFAULT)/$(HELPOUT)5
X! -$(LN) $(HELPOUT)5 $(DEFAULT)/$(HELPOUT)5
X touch insthelp
X
X helpfile: $(HELPOUT)0 $(HELPOUT)1 $(HELPOUT)2 $(HELPOUT)3 $(HELPOUT)4 $(HELPOUT)5
X--- 208,224 ----
X insthelp: helpfile
X @echo Installing helpfiles
X -$(RM) $(DEFAULT)/$(HELPOUT)0
X! -$(LN) $(CURRENT)/$(HELPOUT)0 $(DEFAULT)/$(HELPOUT)0
X -$(RM) $(DEFAULT)/$(HELPOUT)1
X! -$(LN) $(CURRENT)/$(HELPOUT)1 $(DEFAULT)/$(HELPOUT)1
X -$(RM) $(DEFAULT)/$(HELPOUT)2
X! -$(LN) $(CURRENT)/$(HELPOUT)2 $(DEFAULT)/$(HELPOUT)2
X -$(RM) $(DEFAULT)/$(HELPOUT)3
X! -$(LN) $(CURRENT)/$(HELPOUT)3 $(DEFAULT)/$(HELPOUT)3
X -$(RM) $(DEFAULT)/$(HELPOUT)4
X! -$(LN) $(CURRENT)/$(HELPOUT)4 $(DEFAULT)/$(HELPOUT)4
X -$(RM) $(DEFAULT)/$(HELPOUT)5
X! -$(LN) $(CURRENT)/$(HELPOUT)5 $(DEFAULT)/$(HELPOUT)5
X touch insthelp
X
X helpfile: $(HELPOUT)0 $(HELPOUT)1 $(HELPOUT)2 $(HELPOUT)3 $(HELPOUT)4 $(HELPOUT)5
X*** oREADME Sun Aug 6 20:55:33 1989
X--- README Sun Aug 6 20:55:41 1989
X***************
X*** 16,21 ****
X--- 16,26 ----
X useful to me as they are my primary method of deciding what to next add to the
X code. Your interest is appreciated.
X
X+ A mailing list for conquer has been set up to provide a platform for conquer
X+ discussion, and location for conquer test patch releases. The mailing list is
X+ "conquer-news@bu-cs.bu.edu" and addition to or deletions from the mailing
X+ list may be sent to "conquer-news-request@bu-cs.bu.edu".
X+
X Included in this file are the following:
X 1) A Brief Description of Conquer
X 2) Installation (unpacking) Instructions
X*** oheader.h Sun Aug 6 20:55:34 1989
X--- header.h Sun Aug 6 20:55:42 1989
X***************
X*** 68,80 ****
X #define METALPCT 33 /* percent of tradegoods that are metals */
X #define JEWELPCT 33 /* percent of tradegoods that are luxury items */
X #define HIDELOC /* defined if news is not to report sectors */
X-
X #define OGOD /* defined if you wish to enhance god powers. */
X!
X! #define DERVDESG /* allow DERVISH to redesignate in a DESERT/ICE */
X #define MONSTER 45 /* defined if pirates/savages/nomads/lzard exist.
X represents # of sectors of land that need to be
X in world per pirate/savage/nomad nation */
X #define NPC 45 /* defined if NPC nations should exist. The numeric
X represents # of sectors of land that need to be
X in world per non-player character nation */
X--- 68,83 ----
X #define METALPCT 33 /* percent of tradegoods that are metals */
X #define JEWELPCT 33 /* percent of tradegoods that are luxury items */
X #define HIDELOC /* defined if news is not to report sectors */
X #define OGOD /* defined if you wish to enhance god powers. */
X! #define REMAKE /* may make a world even if datafile exists. */
X! /* this allows demi-gods the ability to remake */
X! /* their world. */
X! /* #define NOSCORE /* only show full scores to god while in game */
X! #define DERVDESG /* allow DERVISH to redesignate in DESERT/ICE */
X #define MONSTER 45 /* defined if pirates/savages/nomads/lzard exist.
X represents # of sectors of land that need to be
X in world per pirate/savage/nomad nation */
X+ #define MORE_MONST /* defined if destroyed monsters are replaced */
X #define NPC 45 /* defined if NPC nations should exist. The numeric
X represents # of sectors of land that need to be
X in world per non-player character nation */
X*** odata.h Sun Aug 6 20:55:34 1989
X--- data.h Sun Aug 6 20:55:42 1989
X***************
X*** 158,164 ****
X short turn; /* game turn */
X long m_mil; /* number of mercs available */
X short m_aplus; /* mercenary attack bonus */
X! short m_dplus; /* mercenary defence bonus */
X long w_jewels; /* jewels in world */
X long w_gold; /* gold talons in world */
X long w_food; /* food in world */
X--- 158,164 ----
X short turn; /* game turn */
X long m_mil; /* number of mercs available */
X short m_aplus; /* mercenary attack bonus */
X! short m_dplus; /* mercenary defense bonus */
X long w_jewels; /* jewels in world */
X long w_gold; /* gold talons in world */
X long w_food; /* food in world */
X***************
X*** 218,225 ****
X
X
X /* NATION STRATEGY: a nation's strategy is a part of the ntn[].active
X! * variable which tells if it is a PC or NPC, its allignment, and its
X! * constraints allignments can be good, neutral, or evil.
X * NPC Nations can be Expansionsist (with 0,2,4,6 sectors to expand into)
X * or Isolationist. */
X #define INACTIVE 0
X--- 218,225 ----
X
X
X /* NATION STRATEGY: a nation's strategy is a part of the ntn[].active
X! * variable which tells if it is a PC or NPC, its alignment, and its
X! * constraints alignments can be good, neutral, or evil.
X * NPC Nations can be Expansionsist (with 0,2,4,6 sectors to expand into)
X * or Isolationist. */
X #define INACTIVE 0
X***************
X*** 246,252 ****
X #define NPC_SAVAGE 21
X
X #define ispc(x) (((x)==PC_GOOD)||((x)==PC_EVIL)||((x)==PC_NEUTRAL))
X! #define npctype(x) (ispc(x) ? (x) : (x)/4)
X #define isgood(x) (npctype(x) == 1)
X #define isneutral(x) (npctype(x) == 2)
X #define isevil(x) (npctype(x) == 3)
X--- 246,252 ----
X #define NPC_SAVAGE 21
X
X #define ispc(x) (((x)==PC_GOOD)||((x)==PC_EVIL)||((x)==PC_NEUTRAL))
X! #define npctype(x) (ispc(x) ? (x) : (ismonst(x)?0:(x)/4))
X #define isgood(x) (npctype(x) == 1)
X #define isneutral(x) (npctype(x) == 2)
X #define isevil(x) (npctype(x) == 3)
X***************
X*** 616,622 ****
X extern int unitvalid(),access(),orctake(),fort_val();
X extern int addgships(),addmships(),addwships(),fltships();
X extern int fltghold(),fltwhold(),fltmhold(),flthold(),compass();
X! extern int get_country(),check_lock(),doclass();
X extern unsigned short fltspeed();
X extern void do_pirate(), do_nomad(), do_savage(), do_lizard();
X extern void getjewel(),getmetal(),loadfleet(),removemgk(),exenewmgk();
X--- 616,622 ----
X extern int unitvalid(),access(),orctake(),fort_val();
X extern int addgships(),addmships(),addwships(),fltships();
X extern int fltghold(),fltwhold(),fltmhold(),flthold(),compass();
X! extern int get_country(),check_lock(),doclass(),get_pass();
X extern unsigned short fltspeed();
X extern void do_pirate(), do_nomad(), do_savage(), do_lizard();
X extern void getjewel(),getmetal(),loadfleet(),removemgk(),exenewmgk();
X***************
X*** 629,635 ****
X extern void errormsg(), clear_bottom(), addgroup(),ext_cmd();
X extern void randomevent(), wdisaster(), weather(), deplete();
X extern void verify_ntn(), verify_sct(), verifydata(), prep();
X! extern void newbye(), newreset(), newmsg(), newerror(), newinit();
X extern void destroy(), updmove(), spreadsheet(), mailopen(), mailclose();
X extern void updexecs(), updcapture(), updsectors();
X extern void updmil(), updcomodities(), updleader();
X--- 629,636 ----
X extern void errormsg(), clear_bottom(), addgroup(),ext_cmd();
X extern void randomevent(), wdisaster(), weather(), deplete();
X extern void verify_ntn(), verify_sct(), verifydata(), prep();
X! extern void errorbar(), newbye(), newreset(), newmsg(), newerror();
X! extern void newinit();
X extern void destroy(), updmove(), spreadsheet(), mailopen(), mailclose();
X extern void updexecs(), updcapture(), updsectors();
X extern void updmil(), updcomodities(), updleader();
X***************
X*** 881,887 ****
X extern FILE *fm;
X extern int mailok;
X extern char *seasonstr[];
X! extern char *allignment[];
X extern struct s_sector **sct;
X extern struct s_nation ntn[NTOTAL];
X extern struct s_nation *curntn;
X--- 882,888 ----
X extern FILE *fm;
X extern int mailok;
X extern char *seasonstr[];
X! extern char *alignment[];
X extern struct s_sector **sct;
X extern struct s_nation ntn[NTOTAL];
X extern struct s_nation *curntn;
X*** oadmin.c Sun Aug 6 20:55:33 1989
X--- admin.c Sun Aug 6 20:55:42 1989
X***************
X*** 38,43 ****
X--- 38,44 ----
X /* nation id of owner*/
X short country=0;
X struct s_nation *curntn;
X+ extern char datadir[];
X
X FILE *fexe, *fopen();
X
X***************
X*** 54,67 ****
X long time();
X /* mflag = makeworld, a=add player, x=execute, p=print */
X /* rflag = make world from read in files */
X! int mflag, aflag, xflag, pflag, rflag;
X char string[FILELTH];
X extern char *optarg;
X char defaultdir[BIGLTH],cq_opts[BIGLTH];
X! struct passwd *getpwnam();
X
X! mflag = aflag = xflag = pflag = rflag = 0;
X srand((unsigned) time((long *) 0));
X strcpy(cq_opts,"");
X name = string;
X *name = 0;
X--- 55,69 ----
X long time();
X /* mflag = makeworld, a=add player, x=execute, p=print */
X /* rflag = make world from read in files */
X! int mflag, aflag, xflag, rflag;
X char string[FILELTH];
X extern char *optarg;
X char defaultdir[BIGLTH],cq_opts[BIGLTH];
X! struct passwd *getpwnam(), *pwent;
X
X! mflag = aflag = xflag = rflag = 0;
X srand((unsigned) time((long *) 0));
X+ strcpy(datadir,"");
X strcpy(cq_opts,"");
X name = string;
X *name = 0;
X***************
X*** 102,110 ****
X if (i<l) {
X /* grab the data directory */
X for (j=0; j<l-i && cq_opts[i+j]!=',';j++) {
X! defaultdir[j] = cq_opts[i+j];
X }
X! defaultdir[j]='\0';
X i += j-1;
X }
X break;
X--- 104,112 ----
X if (i<l) {
X /* grab the data directory */
X for (j=0; j<l-i && cq_opts[i+j]!=',';j++) {
X! datadir[j] = cq_opts[i+j];
X }
X! datadir[j]='\0';
X i += j-1;
X }
X break;
X***************
X*** 123,135 ****
X }
X }
X
X- /* set the default data directory */
X- if (defaultdir[0] == '\0') {
X- strcpy(defaultdir, DEFAULTDIR);
X- }
X-
X /* process the command line arguments */
X! while((i=getopt(argc,argv,"maxpr:d:"))!=EOF) switch(i){
X /* process the command line arguments */
X case 'm': /* make a new world*/
X mflag++;
X--- 125,132 ----
X }
X }
X
X /* process the command line arguments */
X! while((i=getopt(argc,argv,"maxr:d:"))!=EOF) switch(i){
X /* process the command line arguments */
X case 'm': /* make a new world*/
X mflag++;
X***************
X*** 140,148 ****
X case 'x': /* execute program*/
X xflag++;
X break;
X- case 'p': /* print the map*/
X- pflag++;
X- break;
X case 'r': /* read map file */
X rflag++;
X if(strlen(optarg) > NAMELTH){
X--- 137,142 ----
X***************
X*** 152,166 ****
X strcpy(scenario, optarg);
X break;
X case 'd':
X! strcpy(defaultdir, optarg);
X break;
X case '?': /* print out command line arguments */
X! printf("Command line format: %s [-maxp -dDIR -rSCENARIO]\n",argv[0]);
X printf("\t-m make a world\n");
X printf("\t-a add new player\n");
X printf("\t-x execute program\n");
X printf("\t-d DIR to use play different game\n");
X- printf("\t-p print a map\n");
X /* printf("\t-r SCENARIO read map while making a new world\n\t\t\tuses SCENARIO.ele, SCENARIO.veg, & SCENARIO.nat\n"); */
X exit(SUCCESS);
X };
X--- 146,159 ----
X strcpy(scenario, optarg);
X break;
X case 'd':
X! strcpy(datadir, optarg);
X break;
X case '?': /* print out command line arguments */
X! printf("Command line format: %s [-max -dDIR -rSCENARIO]\n",argv[0]);
X printf("\t-m make a world\n");
X printf("\t-a add new player\n");
X printf("\t-x execute program\n");
X printf("\t-d DIR to use play different game\n");
X /* printf("\t-r SCENARIO read map while making a new world\n\t\t\tuses SCENARIO.ele, SCENARIO.veg, & SCENARIO.nat\n"); */
X exit(SUCCESS);
X };
X***************
X*** 170,178 ****
X (void) setuid (geteuid ()) ;
X
X /* set proper defaultdir */
X! if (defaultdir[0] != '/') {
X! strcpy(cq_opts, defaultdir);
X! sprintf(defaultdir, "%s/%s", DEFAULTDIR, cq_opts);
X }
X
X /* now that we have parsed the args, we can got to the
X--- 163,177 ----
X (void) setuid (geteuid ()) ;
X
X /* set proper defaultdir */
X! if (datadir[0] != '/') {
X! if (strlen(datadir) > 0) {
X! sprintf(defaultdir, "%s/%s", DEFAULTDIR, datadir);
X! } else {
X! strcpy(defaultdir,DEFAULTDIR);
X! strcpy(datadir,"[default]");
X! }
X! } else {
X! strcpy(defaultdir,datadir);
X }
X
X /* now that we have parsed the args, we can got to the
X***************
X*** 183,199 ****
X exit(FAIL);
X }
X if((mflag)||(rflag)) {
X if(realuser!=(getpwnam(LOGIN)->pw_uid)) {
X printf("Sorry -- you can not create a world\n");
X! printf("you need to be logged in as %s",LOGIN);
X! if (strcmp(LOGIN, ntn[0].leader)!=0) {
X! printf(" or %s",ntn[0].leader);
X! }
X! printf("\n");
X }
X sprintf(string,"%sup",isonfile);
X unlink(string);
X- makeworld(rflag);
X exit(SUCCESS);
X }
X
X--- 182,244 ----
X exit(FAIL);
X }
X if((mflag)||(rflag)) {
X+ #ifdef REMAKE
X+ /* check if datafile currently exists*/
X+ if(access(datafile,00) == 0) {
X+ /* read in the data*/
X+ readdata();
X+ verifydata( __FILE__, __LINE__ );
X+
X+ /* verify ability to remake the world */
X+ if ((realuser != (getpwnam(LOGIN))->pw_uid ) &&
X+ ((pwent=getpwnam(ntn[0].leader)) == NULL ||
X+ realuser != pwent->pw_uid )) {
X+ printf("Sorry -- you can not create a world\n");
X+ printf("you need to be logged in as %s",LOGIN);
X+ if (strcmp(LOGIN, ntn[0].leader)!=0) {
X+ printf(" or %s",ntn[0].leader);
X+ }
X+ printf(".\n");
X+ exit(FAIL);
X+ }
X+ printf("************* WARNING!!!! *******************\n\n");
X+ printf(" There is already a game in progress.\n\n");
X+ printf("*********************************************\n\n");
X+ printf("Do you wish to destroy the current game? ");
X+ scanf("%s",string);
X+ if (strcmp(string,"yes")!=0 && strcmp(string,"y")!=0) {
X+ printf("Okay... the world is left intact\n");
X+ exit(FAIL);
X+ }
X+ printf("Are you absolutely certain? ");
X+ scanf("%s",string);
X+ if (strcmp(string,"yes")!=0 && strcmp(string,"y")!=0) {
X+ printf("Okay... the world is left intact\n");
X+ exit(FAIL);
X+ }
X+ printf("The re-destruction of the world has begun...\n");
X+ sleep(1);
X+ }
X+ #else
X+ /* check for god permissions */
X if(realuser!=(getpwnam(LOGIN)->pw_uid)) {
X printf("Sorry -- you can not create a world\n");
X! printf("you need to be logged in as %s.\n",LOGIN);
X! exit(FAIL);
X }
X+
X+ /* check if datafile already exists*/
X+ if(access(datafile,00) == 0) {
X+ printf("ABORTING: File %s exists\n",datafile);
X+ printf("\tthis means that a game is in progress. To proceed, you must remove \n");
X+ printf("\tthe existing data file. This will, of course, destroy that game.\n\n");
X+ exit(FAIL);
X+ }
X+ #endif /* REMAKE */
X+
X+ makeworld(rflag);
X sprintf(string,"%sup",isonfile);
X unlink(string);
X exit(SUCCESS);
X }
X
X***************
X*** 245,252 ****
X }
X
X #ifdef OGOD
X! if((realuser!=(getpwnam(LOGIN)->pw_uid))&&
X! (realuser!=(getpwnam(ntn[0].leader)->pw_uid))) {
X printf("Sorry -- you can not administrate conquer\n");
X printf("you need to be logged in as %s",LOGIN);
X if (strcmp(LOGIN, ntn[0].leader)!=0) {
X--- 290,298 ----
X }
X
X #ifdef OGOD
X! if ((realuser != (getpwnam(LOGIN))->pw_uid ) &&
X! ((pwent=getpwnam(ntn[0].leader)) == NULL ||
X! realuser != pwent->pw_uid )) {
X printf("Sorry -- you can not administrate conquer\n");
X printf("you need to be logged in as %s",LOGIN);
X if (strcmp(LOGIN, ntn[0].leader)!=0) {
X***************
X*** 257,285 ****
X }
X #endif OGOD
X
X! if (pflag) { /* print a map of the game */
X! fprintf(stderr,"\nFor convenience, this output is to stderr,\n");
X! fprintf(stderr,"while the maps will be sent to stdout.\n\n");
X! fprintf(stderr,"\tThe valid options are,\n");
X! fprintf(stderr,"\t\t1) altitudes\n\t\t2) vegetations\n");
X! fprintf(stderr,"\t\t3) nations\n");
X! fprintf(stderr,"\t\t4) designations\n\n");
X! fprintf(stderr,"\tWhat type of map? ");
X! scanf("%hd", &dismode);
X! fprintf(stderr,"\n");
X! if(dismode==1) printele();
X! else if(dismode==2) printveg();
X! else if(dismode==3) pr_ntns();
X! else if(dismode==4) pr_desg();
X! else {
X! fprintf(stderr,"must be 1-4\n");
X! exit(FAIL);
X! }
X! exit(SUCCESS);
X! } else if (xflag) { /* update the game */
X #ifndef OGOD
X! if((realuser!=(getpwnam(LOGIN)->pw_uid))&&
X! (realuser!=(getpwnam(ntn[0].leader)->pw_uid))) {
X printf("sorry -- your uid is invalid for updating\n");
X printf("you need to be logged in as %s",LOGIN);
X if (strcmp(LOGIN, ntn[0].leader)!=0) {
X--- 303,313 ----
X }
X #endif OGOD
X
X! if (xflag) { /* update the game */
X #ifndef OGOD
X! if ((realuser != (getpwnam(LOGIN))->pw_uid ) &&
X! ((pwent=getpwnam(ntn[0].leader)) == NULL ||
X! realuser != pwent->pw_uid )) {
X printf("sorry -- your uid is invalid for updating\n");
X printf("you need to be logged in as %s",LOGIN);
X if (strcmp(LOGIN, ntn[0].leader)!=0) {
X***************
X*** 318,328 ****
X printf("error: must specify an option\n");
X
X /* print out command line arguments */
X! printf("Command line format: %s [-maxp -dDIR]\n",argv[0]);
X printf("\t-a add new player\n");
X printf("\t-d DIR to use play different game\n");
X printf("\t-m make a world\n");
X- printf("\t-p print a map\n");
X printf("\t-x execute program\n");
X exit(SUCCESS);
X }
X--- 346,355 ----
X printf("error: must specify an option\n");
X
X /* print out command line arguments */
X! printf("Command line format: %s [-max -dDIR]\n",argv[0]);
X printf("\t-a add new player\n");
X printf("\t-d DIR to use play different game\n");
X printf("\t-m make a world\n");
X printf("\t-x execute program\n");
X exit(SUCCESS);
X }
X***************
X*** 378,385 ****
X WORLDMIL+=curntn->tmil;
X }
X if (WORLDGOLD==0) WORLDGOLD=1;
X! printf("calculating new national attributes: sum of scores=%ld of mil=%ld\n",WORLDSCORE,WORLDMIL);
X!
X /* count the number of sectors */
X for(country=1;country<NTOTAL;country++) {
X if(!isntn(ntn[country].active)) continue;
X--- 405,411 ----
X WORLDMIL+=curntn->tmil;
X }
X if (WORLDGOLD==0) WORLDGOLD=1;
X!
X /* count the number of sectors */
X for(country=1;country<NTOTAL;country++) {
X if(!isntn(ntn[country].active)) continue;
X*** omakeworl.c Sun Aug 6 20:55:34 1989
X--- makeworl.c Sun Aug 6 20:55:42 1989
X***************
X*** 15,20 ****
X--- 15,21 ----
X /*DEFINE TEMPORARY VARIABLES FROM MAKEFILE*/
X #include <ctype.h>
X #include <stdio.h>
X+ #include <pwd.h>
X #include "header.h"
X #include "data.h"
X
X***************
X*** 24,29 ****
X--- 25,31 ----
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
X***************
X*** 41,146 ****
X }
X
X void
X makeworld(rflag)
X int rflag; /* TRUE if you wish to read in a map from mapfiles */
X {
X char passwd[PASSLTH+1],*getpass();
X! char newstring[BIGLTH];
X FILE *fopen();
X
X! /*abort if datafile currently exists*/
X! if(access(datafile,00) == 0) {
X! printf("ABORTING: File %s exists\n",datafile);
X! printf("\tthis means that a game is in progress. To proceed, you must remove \n");
X! printf("\tthe existing data file. This will, of course, destroy that game.\n\n");
X! exit(FAIL);
X! }
X! printf("\n************************** WELCOME TO CONQUER **************************");
X! printf("\n*\tThe world will now be created... *");
X! printf("\n*\t *");
X! printf("\n*\tYour super user login will be 'god'. *");
X! printf("\n*\t *");
X! printf("\n*\tNon player countries will be read from the file 'nations' *");
X! printf("\n*\tand will have the same password as god (which you are about to *");
X! printf("\n*\tenter). Add player nations with <conqrun -a>. Have fun!!! *");
X! printf("\n*\t *");
X! printf("\n*\tRemember to check the world out before playing to make sure *");
X! printf("\n*\tno nations are in bad positions (surrounded by water... ) *");
X! printf("\n************************************************************************\n\n");
X
X! printf("First, we must zero extraneous files from prior games\n");
X! printf("\tignore any errors this causes\n");
X sprintf(newstring,"rm -f %s* %s* %s* %s* %s %s 2> /dev/null",
X exefile, msgfile, newsfile, isonfile, tradefile, timefile);
X- printf("\t%s\n",newstring);
X system(newstring);
X! printf("OK This has been done, Now to set up a new world\n\n");
X
X! while(TRUE) { /* password routine */
X! strncpy(passwd,getpass("please enter new conquer super user password (remember this!):"),PASSLTH);
X! strncpy(ntn[0].passwd,getpass("please reenter conquer password:"),PASSLTH);
X! if((strlen(passwd)<2)
X! ||(strncmp(ntn[0].passwd,passwd,PASSLTH)!=0)){
X! beep();
X! printf("\ninvalid super user password\n");
X! } else break;
X! }
X
X strncpy(ntn[0].passwd,crypt(passwd,SALT),PASSLTH);
X!
X /* finally ask for the secondary administrator */
X! printf("\nYou may now designate an alternate ruler for this world.");
X while(TRUE) {
X! printf("\nWhat demi-god shall rule this world? ");
X! gets( newstring );
X if (strlen(newstring)==0) {
X! printf("\nGod blesses this world with his presense!\n");
X (void) strcpy(ntn[0].leader,LOGIN);
X break;
X } else if (strlen(newstring) <= LEADERLTH) {
X! /* HOW DO YOU VERIFY THAT IT IS AN ACTUAL USER? */
X! printf("\nThe demi-god %s may administrate this new world.\n",newstring);
X! (void) strncpy(ntn[0].leader,newstring,LEADERLTH);
X! break;
X }
X- printf("\nName too long.");
X }
X!
X while(TRUE) {
X! printf("\nplease enter the size of the world\n");
X!
X! printf("values should be divisible by 8 & greater than 23\n");
X! printf("Enter number of X sectors: ");
X! gets( passwd );
X! world.mapx = atoi( passwd );
X if(((world.mapx % 8) != 0 ) || (world.mapx<24)){
X! printf("ERROR: Invalid value entered\n");
X continue;
X }
X! printf("Enter number of Y sectors: ");
X! gets( passwd );
X! world.mapy = atoi( passwd );
X if(((world.mapy % 8) != 0 ) || (world.mapy<24)){
X! printf("ERROR: Invalid value entered\n");
X continue;
X }
X break;
X }
X
X getspace(); /* malloc space for this world */
X
X /* get amount of water to have in the world */
X while(TRUE) {
X! printf("\nEnter percent water to have in world (0-100): ");
X! gets( passwd );
X! pwater = (-1);
X! pwater = atoi( passwd );
X if((pwater<0) || (pwater>100 )){
X! printf("ERROR: Invalid value entered\n");
X continue;
X }
X break;
X }
X
X if( rflag==FALSE ) createworld();
X else readmap(); /* read map in from mapfiles */
X--- 43,209 ----
X }
X
X void
X+ zeroworld()
X+ {
X+ int i,armynum,nvynum;
X+
X+ /* initialize all countries */
X+ for (i = 0; i < NTOTAL; i++) {
X+ curntn = &ntn[i];
X+ for (armynum=0; armynum < MAXARM; armynum++) {
X+ P_ASOLD = (long)0;
X+ P_AXLOC = P_AYLOC = P_ATYPE = P_AMOVE = (unsigned char)0;
X+ P_ASTAT = DEFEND;
X+ }
X+ for (nvynum=0; nvynum < MAXNAVY; nvynum++) {
X+ P_NWSHP = P_NMSHP = P_NGSHP = (unsigned short)0;
X+ P_NCREW = P_NPEOP = P_NARMY = (unsigned char)0;
X+ P_NXLOC = P_NYLOC = P_NMOVE = (unsigned char)0;
X+ }
X+ curntn->active = INACTIVE;
X+ curntn->repro = (char)0;
X+ curntn->jewels = curntn->tgold = curntn->metals = 0L;
X+ curntn->powers = curntn->tciv = curntn->tmil = curntn->score = 0L;
X+ curntn->race = TUNKNOWN;
X+ curntn->maxmove = 0;
X+ curntn->class = curntn->aplus = curntn->dplus = (short)0;
X+ curntn->inflation = curntn->tsctrs = curntn->tships = (short)0;
X+ }
X+ }
X+
X+ void
X makeworld(rflag)
X int rflag; /* TRUE if you wish to read in a map from mapfiles */
X {
X char passwd[PASSLTH+1],*getpass();
X! char newstring[BIGLTH],tempc[BIGLTH];
X FILE *fopen();
X+ struct passwd *getpwnam();
X+ int i,valid;
X
X! /* conquer makeworld information */
X! newinit();
X! sprintf(newstring, "Datadir: %s", datadir);
X! errorbar("World Generator", newstring);
X
X! mvaddstr(0,COLS/2-9,"WELCOME TO CONQUER");
X! mvaddstr(2,5,"Genesis begins... Your super user login will be 'god'.");
X! mvaddstr(3,0,"Non-player countries will be read in from the file 'nations',");
X! mvaddstr(4,0,"and will have the same password as god, which you will soon set.");
X! mvaddstr(5,0," To add players after building: conqrun -a");
X! if (strcmp(datadir,"[default]")!=0)
X! printw(" -d %s", datadir);
X! addch('.');
X!
X! newmsg("..Zero out extraneous files from prior games");
X! /* flush out beginning input */
X! while(getch()!='\n') ;
X sprintf(newstring,"rm -f %s* %s* %s* %s* %s %s 2> /dev/null",
X exefile, msgfile, newsfile, isonfile, tradefile, timefile);
X system(newstring);
X! newerror("....Initialize the nation structures");
X! zeroworld();
X! newerror("Initialization complete: And there was light....");
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! if (i < 4) {
X! newerror("Password Too Short");
X! continue;
X! } else if (i > PASSLTH) {
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
X+ if((i<4)||(i>PASSLTH)||(strncmp(passwd,newstring,PASSLTH)!=0)){
X+ newerror("Invalid Password Match");
X+ } else valid=TRUE;
X+ }
X strncpy(ntn[0].passwd,crypt(passwd,SALT),PASSLTH);
X!
X /* finally ask for the secondary administrator */
X! mvaddstr(7,0,"You may now designate an alternate ruler for this world.");
X while(TRUE) {
X! mvaddstr(8,0,"What demi-god shall rule this world? ");
X! clrtoeol();
X! refresh();
X! get_nname( newstring );
X if (strlen(newstring)==0) {
X! newerror("God blesses this world with his presense!");
X (void) strcpy(ntn[0].leader,LOGIN);
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! newerror(tempc);
X! (void) strncpy(ntn[0].leader,newstring,LEADERLTH);
X! mvprintw(7,0,"Demi-God: %s",ntn[0].leader);
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! newerror("That Name is Too long.");
X }
X }
X! mvaddstr(8,0,"Please Enter the Size of the World. [Divisible by 8 and > 23]");
X! clrtoeol();
X while(TRUE) {
X! mvaddstr(9,0,"Enter number of X sectors: ");
X! clrtoeol();
X! refresh();
X! world.mapx = get_number();
X if(((world.mapx % 8) != 0 ) || (world.mapx<24)){
X! newerror("Invalid X Value Entered");
X continue;
X }
X! break;
X! }
X! while (TRUE) {
X! mvaddstr(10,0,"Enter number of Y sectors: ");
X! clrtoeol();
X! refresh();
X! world.mapy = get_number();
X if(((world.mapy % 8) != 0 ) || (world.mapy<24)){
X! newerror("Invalid Y Value Entered");
X continue;
X }
X break;
X }
X+ mvprintw(8,0,"Map Size: %dx%d", (int)world.mapx, (int)world.mapy);
X+ clrtoeol();
X+ move(10,0);
X+ clrtoeol();
X
X getspace(); /* malloc space for this world */
X
X /* get amount of water to have in the world */
X while(TRUE) {
X! mvaddstr(9,0,"Enter percent water to have in world (0-100): ");
X! clrtoeol();
X! refresh();
X! pwater = get_number();
X if((pwater<0) || (pwater>100 )){
X! newerror("Invalid Percentage Entered");
X continue;
X }
X break;
X }
X+ mvprintw(9,0,"Percentage Water: %d", pwater);
X+ clrtoeol();
X+ refresh();
X
X if( rflag==FALSE ) createworld();
X else readmap(); /* read map in from mapfiles */
X***************
X*** 156,163 ****
X fprintf(fm,"5\tGLOBAL ANNOUNCEMENTS\n");
X fclose(fm);
X } else {
X! fprintf(stderr,"error opening news file <%s>\n",newstring);
X }
X }
X
X void
X--- 219,228 ----
X fprintf(fm,"5\tGLOBAL ANNOUNCEMENTS\n");
X fclose(fm);
X } else {
X! sprintf(tempc,"error opening news file <%s>\n",newstring);
X! newerror(tempc);
X }
X+ newreset();
X }
X
X void
X***************
X*** 181,192 ****
X area_map = (char **) m2alloc(MAPX,MAPY,sizeof(char));
X type = (char **) m2alloc(MAPX,MAPY,sizeof(char));
X
X! printf("\n\ncreating world\n");
X! printf("\tin the beginning, the world was a set of bits ordered in\n");
X! printf("\ta random way. Then the conquer game administrator (hereafter\n");
X! printf("\tknown as god) decreed 'conqrun -m'!!!\n");
X! printf("\nday 1... and the variables were initialized\n\n");
X /*initialize variables */
X avvalue = (((float) (100-pwater)/25.0)); /*Average water tvalue of sectors*/
X for(i=0;i<MAXX;i++) for(j=0;j<MAXY;j++)
X tplace[i][j] = area_map[i][j] = 0;
X--- 246,266 ----
X area_map = (char **) m2alloc(MAPX,MAPY,sizeof(char));
X type = (char **) m2alloc(MAPX,MAPY,sizeof(char));
X
X! mvaddstr(11,0,"Creating world");
X! mvaddstr(12,5,"In the beginning, the world was a set of bits ordered in");
X! mvaddstr(13,0,"a random way. Then the conquer game administrator (hereafter");
X! mvaddstr(14,0,"known as god) decreed 'conqrun -m'!!!");
X!
X /*initialize variables */
X+ newerror("Day 1... And the variables were initialized.");
X+ move(11,0);
X+ clrtoeol();
X+ move(12,0);
X+ clrtoeol();
X+ move(13,0);
X+ clrtoeol();
X+ move(14,0);
X+ clrtoeol();
X avvalue = (((float) (100-pwater)/25.0)); /*Average water tvalue of sectors*/
X for(i=0;i<MAXX;i++) for(j=0;j<MAXY;j++)
X tplace[i][j] = area_map[i][j] = 0;
X***************
X*** 332,338 ****
X else type[X*8+i][Y*8+j]=HALF;
X break;
X default:
X! fprintf(stderr,"ERROR\n");
X abrt();
X }
X }
X--- 406,413 ----
X else type[X*8+i][Y*8+j]=HALF;
X break;
X default:
X! newerror("Uh oh!!! The world has gone wacky.");
X! newreset();
X abrt();
X }
X }
X***************
X*** 350,357 ****
X chance=0;
X for(X=0;X<MAPX;X++) for(Y=0;Y<MAPY;Y++)
X if(type[X][Y] == WATER) chance++;
X- printf("day 2... and god decreed that water should have %d / %d sectors\n",chance,NUMSECTS);
X
X /*Newly added code to smooth the world out*/
X for(X=1;X<MAPX-1;X++) for(Y=1;Y<MAPY-1;Y++) {
X chance = 0;
X--- 425,435 ----
X chance=0;
X for(X=0;X<MAPX;X++) for(Y=0;Y<MAPY;Y++)
X if(type[X][Y] == WATER) chance++;
X
X+ mvprintw(10,0,"Water: %d / %d sectors",chance,NUMSECTS);
X+ clrtoeol();
X+ newerror("Day 2... God added water to the world");
X+
X /*Newly added code to smooth the world out*/
X for(X=1;X<MAPX-1;X++) for(Y=1;Y<MAPY-1;Y++) {
X chance = 0;
X***************
X*** 364,371 ****
X chance=0;
X for(X=0;X<MAPX;X++) for(Y=0;Y<MAPY;Y++)
X if(type[X][Y] == WATER) chance++;
X- printf("\tbut god was not pleased and smoothed the oceans to %d / %d sectors\n\n",chance,NUMSECTS);
X
X /*Adjust world given sectors as land or sea, place vegetation,
X designation, and altitude */
X
X--- 442,452 ----
X chance=0;
X for(X=0;X<MAPX;X++) for(Y=0;Y<MAPY;Y++)
X if(type[X][Y] == WATER) chance++;
X
X+ mvprintw(10,0,"Water: %d / %d sectors",chance,NUMSECTS);
X+ clrtoeol();
X+ newerror("But God was not pleased... and smoothed the oceans.");
X+
X /*Adjust world given sectors as land or sea, place vegetation,
X designation, and altitude */
X
X***************
X*** 377,383 ****
X avvalue = PMOUNT * (100-pwater);
X avvalue /= 10000;
X nmountains = NUMSECTS * avvalue;
X! printf("day 3... god created %ld mountains and hills\n",nmountains);
X
X /* heuristic says that 5 is cutoff number to stop placing ranges */
X /* and 1 third of mountains are placed as random hills */
X--- 458,466 ----
X avvalue = PMOUNT * (100-pwater);
X avvalue /= 10000;
X nmountains = NUMSECTS * avvalue;
X!
X! mvprintw(11,0,"Hills and Mountains: %d",nmountains);
X! newerror("Day 3... God created hills and mountains");
X
X /* heuristic says that 5 is cutoff number to stop placing ranges */
X /* and 1 third of mountains are placed as random hills */
X***************
X*** 568,573 ****
X--- 651,657 ----
X int valid;
X int nmountains;
X struct s_sector *sptr;
X+ char newstring[BIGLTH];
X
X TURN=1;
X
X***************
X*** 574,580 ****
X nmountains = 10 * (END_NORMAL+1);
X for(i=0;i<=END_NORMAL;i++) nmountains -= ( *(tg_value+i) - '0');
X
X! printf("\nday 4... and god placed the worlds raw materials\n");
X for(y=0;y<MAPY;y++) for(x=0;x<MAPX;x++) {
X
X sptr = &sct[x][y];
X--- 658,664 ----
X nmountains = 10 * (END_NORMAL+1);
X for(i=0;i<=END_NORMAL;i++) nmountains -= ( *(tg_value+i) - '0');
X
X! newerror("Day 4... God placed the world's raw materials");
X for(y=0;y<MAPY;y++) for(x=0;x<MAPX;x++) {
X
X sptr = &sct[x][y];
X***************
X*** 628,651 ****
X sptr->tradegood = i;
X }
X if(sptr->tradegood == TG_none)
X! printf("??? DEBUG -tradegood==NONE\n");
X }
X }
X
X! printf("\nday 5... and god decreed that world would be populated\n");
X! printf("\tby all manner of creatures; big ones; little one; fat ones;\n");
X! printf("\tskinny ones; orange ones; turquois ones; bright blue ones\n");
X! printf("\tWAIT!!! god has suddenly realized that smurfs were taking things\n");
X! printf("\ttoo far and stopped creating new ones to place everybody on the map...\n");
X populate();
X MERCMEN = ST_MMEN;
X MERCATT = ST_MATT;
X MERCDEF = ST_MDEF;
X! printf("\nday 6... and god, who believed in a two day weekend, took off to\n\tthe local pub to celebrate...\n\n");
X! printf("day 7... and god rested (to get rid of that stupid hangover)\n");
X! printf("\tand thought about logging in to see what the world looks like\n");
X! printf("\tand about telling players to add themselves to the game\n");
X! printf("\twith the 'conqrun -a' command.\n");
X }
X
X /*fill: subroutine to fill in a square edges with land or sea*/
X--- 712,752 ----
X sptr->tradegood = i;
X }
X if(sptr->tradegood == TG_none)
X! newerror("??? DEBUG -tradegood==NONE");
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! newerror("Day 5... God decreed that world would be populated");
X! move(14,0);
X! clrtoeol();
X! move(15,0);
X! clrtoeol();
X! move(16,0);
X! clrtoeol();
X populate();
X MERCMEN = ST_MMEN;
X MERCATT = ST_MATT;
X MERCDEF = ST_MDEF;
X! newerror("Day 6... God, believing in long weekends, went and got smashed");
X! newerror("Day 7... God rested (to get rid of that stupid hangover)");
X! sprintf(newstring," ...Log in via 'conquer -n god");
X! if (strcmp(datadir,"[default]")!=0) {
X! strcat(newstring," -d ");
X! strcat(newstring,datadir);
X! }
X! strcat(newstring,"'");
X! newerror(newstring);
X! sprintf(newstring," ...Players may be added via 'conqrun -a");
X! if (strcmp(datadir,"[default]")!=0) {
X! strcat(newstring," -d ");
X! strcat(newstring,datadir);
X! }
X! strcat(newstring,"'");
X! newerror(newstring);
X }
X
X /*fill: subroutine to fill in a square edges with land or sea*/
X***************
X*** 722,728 ****
X void
X populate()
X {
X! int i=0,x=0,y=0,j=0,xloc,yloc;
X int nvynum=0,armynum=0,points,shipsize,temp,cnum;
X short short1,short2; /*temporary short variables */
X short class;
X--- 823,829 ----
X void
X populate()
X {
X! int i=0,x=0,y=0,j=0,xloc,yloc,xpos,ypos;
X int nvynum=0,armynum=0,points,shipsize,temp,cnum;
X short short1,short2; /*temporary short variables */
X short class;
X***************
X*** 747,753 ****
X for( country=1; country<NTOTAL; country++ ) {
X curntn = &ntn[country];
X if( isactive( curntn->active )) {
X! printf("THIS SHOULDNT HAPPEN\n");
X continue;
X }
X strcpy(curntn->passwd,ntn[0].passwd);
X--- 848,854 ----
X for( country=1; country<NTOTAL; country++ ) {
X curntn = &ntn[country];
X if( isactive( curntn->active )) {
X! newerror("THIS SHOULDNT HAPPEN");
X continue;
X }
X strcpy(curntn->passwd,ntn[0].passwd);
X***************
X*** 819,826 ****
X } else if(nnomads < MAXARM ) nnomads++;
X break;
X }
X! printf("placing %d lizards, %d pirates, %d savages, and %d nomads\n",
X nlizards,npirates,nbarbarians,nnomads);
X
X while((nlizards+npirates+nbarbarians+nnomads > 0 )&&(loopcnt++ <5000)) {
X if( nlizards>0 ) {
X--- 920,929 ----
X } else if(nnomads < MAXARM ) nnomads++;
X break;
X }
X! mvprintw(13,0,"Placing %d lizards, %d pirates, %d savages, and %d nomads",
X nlizards,npirates,nbarbarians,nnomads);
X+ clrtoeol();
X+ refresh();
X
X while((nlizards+npirates+nbarbarians+nnomads > 0 )&&(loopcnt++ <5000)) {
X if( nlizards>0 ) {
X***************
X*** 987,1026 ****
X }
X }
X
X! printf("all random population and monsters placed\n");
X #endif MONSTER
X
X for (i=0;i<MAXHELP;i++) {
X! sprintf(fname,"%s/%s%d",DEFAULTDIR,helpfile,i);
X! if ((fp=fopen(fname,"r"))==NULL) {
X! printf("\tcannot find helpfile <%s>\n",fname);
X! printf("\tplease move it to %s\n",DEFAULTDIR);
X }
X- }
X
X #ifdef NPC
X! printf("\nDo you want NPC nations in this campaign? (y or n)");
X! while( ((i=getchar()) != 'y')&&(i != 'n') ) ;
X! if( i!='y' ) return;
X if((fp=fopen(npcsfile,"r"))==NULL) {
X! printf("error on read of %s file\n",npcsfile);
X! printf("Do you wish to use default NPC nations file (y or n)?");
X while( ((i=getchar()) != 'y')&&(i != 'n') ) ;
X if( i=='y'){
X sprintf(line,"%s/%s",DEFAULTDIR,npcsfile);
X if ((fp=fopen(line,"r"))==NULL) {
X! printf("\nsorry; error on read of %s file\n",line);
X return;
X! } else printf("\nOK; default nations used\n");
X } else {
X! printf("\nOK; no NPC nations used\n");
X return;
X }
X }
X- printf("reading npc nation data from file: %s\n",npcsfile);
X- printf("and adding 1 nation per %d land sectors\n",NPC);
X
X cnum=1;
X while(fgets(line,LINELTH,fp)!=NULL) {
X /*read and parse a new line*/
X if(line[0]!='#') {
X--- 1090,1138 ----
X }
X }
X
X! newerror("... All random population and monsters placed");
X #endif MONSTER
X
X for (i=0;i<MAXHELP;i++) {
X! sprintf(fname,"%s/%s%d",DEFAULTDIR,helpfile,i);
X! if ((fp=fopen(fname,"r"))==NULL) {
X! char tempc[BIGLTH];
X! sprintf(tempc,"cannot find helpfile <%s/%s>.",DEFAULTDIR,fname);
X! newerror(tempc);
X! }
X }
X
X #ifdef NPC
X! mvaddstr(14,0,"Do you want NPC nations in this campaign? (y or n)");
X! clrtoeol();
X! refresh();
X! while( ((i=getch()) != 'y')&&(i != 'n') ) ;
X! if( i!='y' ) {
X! newerror("OK; no NPC nations used");
X! return;
X! }
X if((fp=fopen(npcsfile,"r"))==NULL) {
X! mvaddstr(14,0,"Do you wish to use default NPC nations file (y or n)?");
X! clrtoeol();
X! refresh();
X while( ((i=getchar()) != 'y')&&(i != 'n') ) ;
X if( i=='y'){
X sprintf(line,"%s/%s",DEFAULTDIR,npcsfile);
X if ((fp=fopen(line,"r"))==NULL) {
X! newerror("Cannot read nation file... no NPCs added");
X return;
X! } else newerror("OK; default nations used");
X } else {
X! newerror("OK; no NPC nations used");
X return;
X }
X }
X
X cnum=1;
X+ mvprintw(14,0,"ADDING NATIONS:");
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***************
X*** 1034,1049 ****
X
X country=cnum;
X curntn = &ntn[country];
X if( cnum > MAPX*MAPY/NPC*(100-pwater)/100 ) {
X! printf("world too small to add npc nation %d %s\n",cnum,curntn->name);
X continue;
X }
X if( isactive(ntn[cnum].active) ) {
X! printf("Too few nations permitted in world to add npc nation %d %s\n",cnum,curntn->name);
X continue;
X }
X- curntn->class = (short)class;
X- printf("adding npc nation %s (%s)\n",curntn->name,*(Class+curntn->class));
X curntn->maxmove = short1;
X curntn->repro = short2;
X if( allign == 'G' )
X--- 1146,1170 ----
X
X country=cnum;
X curntn = &ntn[country];
X+ curntn->class = (short)class;
X+ sprintf(line," %s (%s)",curntn->name,*(Class+curntn->class));
X+ mvaddstr(ypos,xpos,line);
X+ xpos += strlen(line);
X+ if (xpos > COLS-20) {
X+ xpos = 5;
X+ ypos++;
X+ }
X+ refresh();
X if( cnum > MAPX*MAPY/NPC*(100-pwater)/100 ) {
X! sprintf(line,"World too small to add npc nation %d %s",cnum,curntn->name);
X! newerror(line);
X continue;
X }
X if( isactive(ntn[cnum].active) ) {
X! sprintf(line,"Not enough available nations to add npc nation %d %s",cnum,curntn->name);
X! newerror(line);
X continue;
X }
X curntn->maxmove = short1;
X curntn->repro = short2;
X if( allign == 'G' )
X***************
X*** 1061,1067 ****
X else if( allign == 'i' )
X curntn->active = ISOLATIONIST;
X else {
X! printf("invalid nation allignment (%c) line is:\n\t%s\n",allign,line);
X abrt();
X }
X strcpy(curntn->passwd,ntn[0].passwd);
X--- 1182,1190 ----
X else if( allign == 'i' )
X curntn->active = ISOLATIONIST;
X else {
X! sprintf(line,"invalid nation alignment (%c)");
X! newerror(line);
X! newreset();
X abrt();
X }
X strcpy(curntn->passwd,ntn[0].passwd);
X***************
X*** 1069,1076 ****
X points -= doclass( class, FALSE );
X points -= startcost();
X if(points < 10 ) {
X! printf("ERROR IN NATIONS FILE IN NATION %s\n",ntn[cnum].name);
X! printf("nation doesnt have enough points left for 10000 civilians\n");
X abrt();
X }
X curntn->tciv = 1000L * points;
X--- 1192,1199 ----
X points -= doclass( class, FALSE );
X points -= startcost();
X if(points < 10 ) {
X! newerror("ERROR: nation doesn't have enough points left for 10000 civilians");
X! newreset();
X abrt();
X }
X curntn->tciv = 1000L * points;
X***************
X*** 1100,1105 ****
X }
X }
X att_base(); /* get nation attributes */
X! printf("all npc nations placed\n");
X #endif NPC
X }
X--- 1223,1228 ----
X }
X }
X att_base(); /* get nation attributes */
X! newerror("All NPC nations placed");
X #endif NPC
X }
X*** oforms.c Sun Aug 6 20:55:34 1989
X--- forms.c Sun Aug 6 20:55:43 1989
X***************
X*** 13,18 ****
X--- 13,19 ----
X /* screen subroutines */
X
X #include <ctype.h>
X+ #include <pwd.h>
X #include "header.h"
X #include "data.h"
X
X***************
X*** 62,72 ****
X--- 63,83 ----
X mvaddstr(ypos+4,0,"class:");
X mvaddstr(ypos+5,0,"alignment:");
X mvaddstr(ypos+6,0,"score:");
X+ #ifdef NOSCORE
X+ mvaddstr(ypos+7,0,"npc nation:");
X+ if (country==0) {
X+ mvaddstr(ypos+8,0,"talons:");
X+ mvaddstr(ypos+9,0,"military:");
X+ mvaddstr(ypos+10,0,"civilians:");
X+ mvaddstr(ypos+11,0,"sectors:");
X+ }
X+ #else
X mvaddstr(ypos+7,0,"talons:");
X mvaddstr(ypos+8,0,"military:");
X mvaddstr(ypos+9,0,"civilians:");
X mvaddstr(ypos+10,0,"sectors:");
X mvaddstr(ypos+11,0,"npc nation:");
X+ #endif /* NOSCORE */
X }
X
X /* display nation information */
X***************
X*** 79,86 ****
X if(ntn[nationid].race==*(races+i)[0])
X mvprintw(ypos+3,xpos,"%s",*(races+i));
X mvprintw(ypos+4,xpos,"%s",*(Class+ntn[nationid].class));
X! mvprintw(ypos+5,xpos,"%s",allignment[npctype(ntn[nationid].active)]);
X mvprintw(ypos+6,xpos,"%ld",ntn[nationid].score);
X mvprintw(ypos+7,xpos,"%ld",ntn[nationid].tgold);
X mvprintw(ypos+8,xpos,"%ld",ntn[nationid].tmil);
X mvprintw(ypos+9,xpos,"%ld",ntn[nationid].tciv);
X--- 90,108 ----
X if(ntn[nationid].race==*(races+i)[0])
X mvprintw(ypos+3,xpos,"%s",*(races+i));
X mvprintw(ypos+4,xpos,"%s",*(Class+ntn[nationid].class));
X! mvprintw(ypos+5,xpos,"%s",alignment[npctype(ntn[nationid].active)]);
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);
SHAR_EOF
echo "End of part 1, continue with part 2"
echo "2" > s2_seq_.tmp
exit 0