Import of Empire 4.2.12

This commit is contained in:
Markus Armbruster 2003-08-23 12:23:04 +00:00
commit d8b7fdfae1
817 changed files with 126589 additions and 0 deletions

691
doc/CHANGES Normal file
View file

@ -0,0 +1,691 @@
This file contains a list of patches/upgrades made to the server for a specific
version. It also contains the name of the author of that particular code. It
may not be complete.
*version 2.0 beta 1 release 1*
Fixed age.c so reserves degrade normally instead of growing! - Chad Zabel
Fixed arch.c - replaced wrapp with what was supposed to be there - Ken Huisman
Patched bug in atta.c - a temporary patch that could be done better
( and will be later ) - Ken H.
patched bug in lib/commands/mail.c - Dave Pare
added patches to make code compile under linux - Ken H. based on linux chain 3
patches by someone else whose name I forget. Note at this time the code
*compiles* under linux, but there are still bugs - the server seems to
stop taking socket connections or something after someone logs out of the
game.
fixed a null pointer bug in lib/subs/bigmap.c - Chad Zabel
*version 2.0 beta 1 release 2*
Patch for exec bug - Chad Zabel
*version 2.0 beta 1 release 3*
Patch for zepplin bug - Jim Ortlieb
Added unixware(svr4.2) specific stuff to arch.c - Doug Hay
Changes to h/lwp.h and lib/lwp/lwp.c for thread stack checker - Doug Hay
*version 2.0 beta 1 release 4*
Modified fairland.c to 1.6.2 and made it so translate_continents is only
called when BLITZ is defined - Ken Huisman, Ken Stevens
Modifications to lwp.h and arch.c to fix linux threads - Scott Ferguson
*version 2.0 beta 1 release 5*
Changed version number to 2.0.0 - Ken Huisman
fixed unterminated path bug in lib/common/path.c - Scott Ferguson
fixed first part of bug described in wish list item c6 ( false resupply ) -
Scott Ferguson
fixed part of bug described in wish list item t3 ( you have 666 new telegrams
bug ) - the bug that tells you you have 1 new telex after just reading it is
not fixed - Scott Ferguson
*version 2.0 beta 1 release 6*
Three letter abbreviations for all ships in ship.c - Chad Zabel
the following by Kevin Klemmick:
/lib/commands/rea.c // fixed telegram's problem reading '%'
/lib/commands/mail.c // ditto for mail and wmail
/lib/subs/aircombat.c // New air code and bug fixes
/lib/subs/mission.c // New air code and bug fixes
/lib/subs/pr.c // new prnf function an bug fixes
/lib/subs/paths.c // fixes the getpath() bug.
added NEWPAF and HIDDEN to options.h ( commented out for now until
testing is complete ) - Ken H.
*version 2.0 beta 1 release 7*
Fix for fix for exec bug ( lib/player/player.c ) - Chad Zabel
fixed minor bug in aircombat.c ( missing quote on line 613 ) - Ken H.
*version 2.0 beta 1 release 8*
lib/commands/mfir.c Bugfix... in quiet_bigdef, added in a check
for forts >60%. They were getting cheated out of their bonus in the return
fire process. - Chad Zabel
AIX Port: files
lib/lwp/{GNUmakefile,arch.c,lwp.c,lwpint.h} and
make/Systems/aix modified
- All changes are surrounded by #ifdef AIX32.
- one change to lwp.c that will apply to everyone one error
message changed so it says underflow instead of overflow in the stack
checking code.
- Bill Canning
*version 2.0 beta 1 release 9*
You can now specify how many mil to board a ship with (wishlist item a1) so
you don't strand your ship. This is implemented as another parameter
in the board command. Documentation for board updated too! - Chad Zabel
- Addition of the HIDDEN and NEWPAF Mods (Major addition). - Kevin Klemmick
*version 2.0 beta 1 release 10*
lib/player/player.c compilation under linux was broken by previous patches
this is fixed now - Ken H.
*version 2.0 beta 1 release 11*
fixed compilation under sunos (lib/lwp/lwp.c had a couple odd '\' characters
in it that caused the sun compiler to complain) - Ken H.
*version 2.0 beta 1 release 12*
added 3 character abbreviations for land unit names - Chad Zabel
fixed bug in "show sect build" command - Ken Huisman
added check in neweff command to see if sector is stopped - Chad Zabel
added test for war declaration before abm launch - Chad Zabel
*version 2.0 beta 1 release 13*
added thread debugging stuff - Dave Pare
changes to autonav code - Chad Zabel
fixes for minor bug in land unit names - Chad Zabel
fix for build.t in docs - Chad Zabel
simple fix for spy command - Chad Zabel
fix for telegrams - Julian Onions
fixup of makefile in util - Julian Onions
*version 2.0 beta 1 release 14*
fix bugs in lwp - Julian Onions
fix bug in edit that caused server crash - Julian Onions
fix bugs in attack command that allowed free resource creation - Chad Zabel
fix bug that made countries in sanctuary lose money - Chad Zabel
*version 2.0 beta 1 release 15*
io bug fixes and misc code changes - Dave Pare
removal of sanctuary print statements to reduce logfile sizes - Ken Huisman
DEC Alpha port - Dave Pare and Ken Stevens
*version 2.0 beta 1 release 16*
made compiling/configuring easier (see READ_THIS_FIRST) - Ken Stevens
fix bug in info.c that caused crash - Janjaap van Velthooven
fix for land units - Chad Zabel
*version 2.0 beta 1 release 17*
major improvements/cleanup of info pages and related files - Ken Stevens
changes to compile scripts - Ken Stevens
*version 2.0 beta 1 release 18*
fixed missile sub abbreviation in ship file - Ken Stevens
added "are you sure" in build command to prevent accidents - Ken Stevens
fixed production simulation report showing "e" sectors producing - Ken Stevens
fixed LandUnits subject not being listed in "info". - Ken Stevens
fixed so unload only works in your sector or ally's sector - Ken Stevens
fixed error in sweep when sector efficiency is printed - Ken Stevens
fixed telegrams reporting bombing damage - Ken Stevens
fixed cede so you can only cede to allies - Ken Stevens
fixed coastwatch to show ship names - Ken Stevens
build command gives informative error message if you are building
in the wrong type of sector or the sector is < 60% eff. - Ken Stevens
build command does not prompt for tech level if not given on command
line - assumes current tech level - Ken Stevens
tech for aegis cruisers was increased - Ken Stevens
payoff command lists how many sectors ship has travelled - Ken Stevens
fixed bug that allowed planes to bomb from an airport <60% efficient - Ken Stevens
fairland now adds two visitor countries in its newcap script - Ken Stevens
fixed bug that crashes the server when 'power' is first done in game
without doing a 'power new' first - Ken Stevens
test command no longer aborts if you don't have enough of an item in a sector,
it still performs the test but gives a warning - Ken Stevens
you now get a telegram when someone loads something onto your ship - Ken Stevens
fixed documentation on happiness - Ken Stevens
you now get the country name when a country becomes hostile, not just the
country number - Ken Stevens
fixed so start land unit is if1 instead of if2 - Ken Stevens
*version 2.0 beta 2 release 1*
Build command has last two arguments switched ( tech and number - documentation
updated as well ) - Ken Stevens
Added new info page summarizing whats new in Empire2 - Ken Stevens
/info/Subjects/TOP.t now includes LandUnits subject - Ken Stevens
info/Subjects/Server.t refers to the Empire2 info page now - Ken Stevens
Bug in happiness and education calculation on zero population fixed
- Ken Stevens
Aircombat aborted wasn't being printed properly - fixed - Ken Stevens
Plane types sorted to be consistant with ships and units - Ken Stevens
Wish list item m2! fixed - missiles on interdiction missions on subs
won't fire - missiles are now allowed to be on ships with "miss" capability
- the missile code and the load code now agree as to what kinds of planes
can be on what kinds of units - Ken Stevens
Comments added to ship.c explaining why M_XLIGHT, M_UNIT and M_MSL no
longer need to be set there ( they are automatically set in global_init()
- Ken Stevens
fixed wishlist item s16! - subs on interdiction missions no longer fire
on other subs, when they don't have sub-torp ability. - Ken Stevens
fixed division by zero error in lib/subs/supply.c ( occurs when a cargo
ship supplies itself to increase its efficiency in a harbour) - Ken Stevens
cosmetic change to lib/commands/load.c - Ken Stevens
Fixed wishlist item p9! ( non-VTOL missiles won't fly missions unless they
are in a 60% airport) - fixed by making all missiles VTOL by definition.
- Ken Stevens
lmine command now allows you to specify more shells than the unit has,
and the unit will automatically resupply until all the mines specified are
laid ( wishlist item l1?) - Ken Stevens
The problem with land mines becoming sea mines is now fixed entirely
(wishlist item c2!) - Ken Stevens
0% banks, etc. no longer resist shell fire better than a 0% other sector type.
( wishlist item c3!) - Ken Stevens
fixed printing problem in sweep command - Ken Stevens
fixed telegrams using the word "Oamage" instead of damage when reporting
bombing damage. - Ken Stevens
lib/global/init.c - cosmetic change - Ken Stevens
added wall and shutdown commands and corrected syntax on some deity
commands - Ken Stevens
added pr_wall() which is like pr_flash() except that it prints to
all connected players. - Ken Stevens
added shutdown comand to shutdown server with warnings to connected
players - Ken Stevens
fixed reference to "info syntax" - Ken Stevens
added toggle command, which allows players to set their "inform" flag, which,
when set, causes the server to send a line to the client the
instant the player receives a telegram - Ken Stevens
flash command now checks for valid country number - Ken Stevens
Added support for an empire configuration file so that the server can
be reconfigured without recompiling (documentation on this included in
README directory) - Julian Onions
fix for standard empire client so it doesn't drop characters on long
scripts - Dave Pare
Changed flash command so that you only get flashes from your alllies if
you have toggled your flash flag on - using 'toggle flash' to
toggle your flash command on and off and documentation changed - Ken Stevens
designate command now warns you if you are spending >50% of your money
designating forts, and will ask you "are you sure?" if you are going
to go broke from it - Ken Stevens
A temporary input buffer needed a size increase in buil.c - Ken Stevens
Wish list item c5! - fixes it so you are told how much it will cost when
you are designating sectors, or converting civs to slaves, and it warns
you if you are going to go broke from it. The server will also not let you
build, harden, or upgrade anything you cannot afford - Ken Stevens
fixed -h parameter on server ( caused crash ) - Ken Huisman
new commands added for use during navigation and unit marching - 'M' for
drawing a map and 'B' for drawing a bmap - Ken Stevens
*version 2.0 beta 2 release 2*
Deleted some files no longer necessary.
- deity "map" fixed - wasn't showing sector designations.
- deity "shutdown" fixed - didn't work.
- player "board" fixed - was loosing all mil on ships.
- Now when you "kill" emp_server (from your unix shell), it will send
the flash message "Server shutting down..." to all players logged on,
it will "abort" any command they were in the middle of with the message
"Shutdown aborted command" (like the way update aborts commands),
it will terminate the players connection (like the way idle
connections are terminated) and it will close all the database files.
In other words, "kill" fromoutside the server now does the same thing
as the deity "shutdown" command does from inside the server.
- New player command "strength" calculates sector defense strength
(including bonuses from reacting units but excluding air/fort/arty support).
I think this command will help newbies set up a defense better.
- If you've already compiled once, and you're just working on stuff in
the server, then you can now type "compile quick" which will skip
dependall, util, and client (and compile in about a quarter the time).
The above were all done by Ken Stevens ( I think ) on b2r1b
- added "toggle beep" so that you can now play Empire without beeping
every time you fire if you so choose (handy for those emergency
updates in the department computer room).
- "configure" now asks you where you keep your "gnumake".
- Fixed a couple of bugs in the configure script
- "toggle" flags moved from player to natstr so they're saved
- fixed malloc() pointer mismatches to make cc happy
- ported "shutdown" to Sun4
- Julian Onions ported his econfig code to Sun4
The above are from b2r1c
The following are fixed ( as of b2r1d ):
- The infamous "scuttle" bug. Now the owner of units is always set
to zero as soon as the unit is created. (By "created" I am referring
to when you build 1 plane and ef_extend() creates 49 more -- the owner
of all 50 is now initialized to zero.)
- A C_INFORM packet was being sent to the client when an announcement was
made. Oopsie on my part. Now fixed.
- "fortifying" a unit no longer clears the unit's mission.
- New script "keepitup" is a modified isempireup except that you don't
have to put any info about the game in the file itself, so if
you're like me and you have more than one game running, you now only
need to keep one script around.
b2r1e patch moved files from util into old/util
b2r1f contained the following:
This patch was submitted by Julian Onions.
- General option handling, + BLITZ option changes
throughout. There is one new file lib/global/options.c which has the
option definitions in.
- The following options are now dynamically switchable
NOFOOD, BLITZ, EASY_BRIDGES, RES_POP, NEW_WORK,
NEW_STARVE, NO_PLAGUE, NEWPOWER ALL_BLEED, DRNUKE
SUPER_BARS, NUKEFAILDETONATE, PINPOINTMISSILE
- also fix up a stupid test in laun.c, and some reworking of the
SHIPNAME (plus a bug fix for Sub launched SHIPNAMES).
b2r1g fixed a bug in b2r1f.
b2r1h moved a file from old/util back to util
b2r1i contained the following:
This patch was submitted by Julian Onions.
- The following options are now dynamically switchable
FUEL, ORBIT, NEUTRON
- The new file README/README.config describes how to use the new "econfig"
runtime configuration stuff..
- Now when you type "version", you will also get the patchlevel of
the code.
b2r1j contained the following:
This patch was submitted by Kevin Morgan.
- xdist and ydist are now in player coordinates (wish list item i2)
- emp_client now calls termio until all bytes have been copied into
the socket (wish list item x19).
b2r1k contained the following:
This patch was submitted by Sasha Mikheev.
- This patch ports lwp threads to Linux.
b2r1l contained the following:
This patch was submitted by Julian Onions.
- Options NOMOBCOST and GRAB_THINGS are now runtime configurable.
b2r1m contained the following from Ken Stevens:
WARNING: Although I have heavily tested the code, I'm sure that it still has
a significant number of bugs.
This patch contains the following changes:
- fixed a bug in configure which was not making compile a csh script which
resulted in grep not working.
- shipdamage() now always multiplied by 63/m_armor. I made the
appropriate changes to all places that call shipdamage(). Also,
shipdamage() will now tell the player exactly how much their ship
was damaged.
- a new function mpr(cnum, format, args) will pr() to cnum if they
are player and send them a telegram otherwise.
- sail, autonav, and nav now all call the same functions. Thus mine
damage and interdiction damage are now calculated using exactly the
same formulas. This makes heavy use of mpr().
- navigation now has two more lcommands. "i" will list the ships you're
navigating, and "f" will change the flagship.
- Now you can type commands like this:
nav 72 jlsruMluBursh
That is, you can mix directions with other navigation commands.
- Interdiction of navigating ships now works as follows:
1. Forts interdict.
2. If there are any ships left, land arty interdiction fires.
3. If there are any ships left, ships on interdiction fire.
4. If there are any ships left, interdiction missiles fire one at a time.
5. If there are any ships left, interdicting planes pinbomb.
- I'm sure that I've made some changes which have slipped my mind
b2r1n contained the following from Ken Stevens:
WARNING: Although I have tested most of the new code, I'm sure that it
still has a significant number of bugs.
This patch contains the following changes:
- I went through all of the Empire info pages and updated them to
match the current code. I completely rewrote large portions of the
following info pages: "move", "bomb", "launch", "navigate", and
"Plane-types".
- Fixed a bug in the "configure" script which was resulting in a pile
of "kw_read" erros in the logfile.
- Changed the logfile output to make it much easier to read. Note:
this will break current logfile parsers. I'll rewrite any that people need.
- It is now possible to specify start-tech/happ/research/edu in
econfig (Thanks Julian!). I'm using this in my blitz to start
countries at tech 100.
- When things are damaged by interdiction, the sector they were
moving into will suffer collateral damage.
- Surface missiles can now be put on interdiction mission. To
distinguish them from anti-ship missiles, the latter have been given
"marine" capability.
- Planes and missiles can now hold at most one nuclear warhead.
- Nuclear warheads on planes and missiles will now detonate when that
plane or missile flies an interdiction mission.
- I have removed the "n" option from the "bomb" command. If you want
to nuke something, just arm the plane with a nuke and bomb "s". This
simplification makes the above change consistant with "bomb".
- When you launch a satellite, then any country AT_WAR with you will
try to intercept it with a-sats. This uses exactly the same code as
abm defense - two missiles are fired. Also, if a satellite is
positioned over a sector which is not owned by your ally, then they
will get a telegram informing of the positioning.
- missiles on missions will stop launching once 100 damage has been
done (in the case of surface interdiction) or all the ship s have been
sunk (in the case of ship interdiction).
- deliver now costs the same as distribute (4x cheaper).
- there is now only one function called to determine whether a plane/missile
hits its target and how much damage is done (this includes abms and
asats). Thus the chance of a plane hitting its target is now the same
whether the plane was flying a mission or flown by hand. The only
exception to this is pinbombing land units where interdicting planes
have a 100% chance of hitting unlike pinbombers flown by hand which
have a chance of missing. I plan to fix this later.
- many functions were rewritten to use mpr() instead of pr(). mpr()
checks to see if the person is interactive, and if they are calls
pr(), and otherwise calls wu(). All PR() functions should really
be changed to mpr() but I'm too lazy to do it. Also, I'm sure that I
missed a few pr()'s and so the server may still occassionally try to
pr() to a player not logged on.
- I used lint to remove alot of unused variables, declare some
functions void, and fix unsigned char comparisons with zero.
b2r1o contained the following from Ken Stevens:
WARNING: Although I have tested most of the new code, I'm sure that it
still has a significant number of bugs.
This patch contains the following changes:
- Added "Friendly" relations--you can nav/load/unload in friendly harbours.
See info Empire2 or info relations.
- Changed the order of relations so now you can write code like
if (rel < FRIENDLY) ... or ... if (rel >= HOSTILE)
- Cap sacking now makes the news.
- Fixed a bug in sub interdiction (bug introduced by me in r1n).
- Fixed a bug in supply code (introduced by Julian in r1f).
- Moved relation-change stuff out of decl.c and into subs/rej.c setrel().
So now, no matter how a country becomes hostile, both parties will
get a tele and it will make the news. Also, much of this code was
simplified using the new heuristic that bad rel is always < good rel.
- Changed spy output. New headers are:
sect type own oldown eff civ mil shl gun pet food bars units planes
- Changed all relevant info pages.
- Completely rewrote info relations.
*version 2.0 beta 2 release 3*
CC is now configurable - Ken Stevens
"scuttle", "scrap", "mission", and "fuel" commands now let you put "l"
instead of having to type "la" like before - Ken Stevens
BIG_CITY option added - Ken Stevens
fixed bugs in "demob", "navi", and setrel() - Ken Stevens
fixed bug in flash command - Ken Stevens
removed spurious \B from pr statement in torp.c - Julian Onions
fixed missing issneak variable for SLOW_WAR case in atta.c and
assa.c - Julian Onions
rej.c not using correct variable for SLOW_WAR option, fixed - Julian Onions
parameters added to fairland.c as follows:
-o -- don't allocate ore (default is to allocate as before)
-q -- non chatty mode - little if any output
-a -- use the '*' mark to mark contents (AIRPORT_MARKER)
-i -- allow islands to crash and merge
-s <file> -- alternate script file (default newcap_script)
- Julian Onions
maketgame script added - used to make a temporary test game
use as
maketgame -d /tmp/data 5 100
to make a temporary game in /tmp/data with 5 countries and 100 sectors each.
- Julian Onions
fix to make compile script call bin/pconfig instead of util/pconfig
- Craig Leres
*version 2.0 beta 2 release 4*
forts must be 5% efficient to fire or provide support( effic. level settable in
options.h - default is 5%) - Ken Huisman
fixes for the BIG_CITY option - Ken Stevens
another fix for compile.in - Ken Stevens
added skywatch command - Ken Stevens
fixed bug in "conv" command - Ken Stevens
fixed error message in "launch" - Ken Stevens
now you get a telegram if an enemy sat moves over your sector at the update
- Ken Stevens
attack command partially rewritten to clean up several problems - Chad Zabel
launch command now checks to see if a ship was sunk by a ship-ship
missile and tells the attacker - Chad Zabel
new missile/anti-missile code - Chad Zabel
configure script chokes if you are logged in more than once - Craig Leres
fix for compiling with gcc 2.6.0 under sunos 4.1.4 regarding the
sprintf() prototype in misc.h.in - Craig Leres
got rid of two lines of code that didnt do anything in sail.c - Craig Leres
fixed several other compiler warnings - Craig Leres
server checks for invalid values of s_p_etu - Craig Leres
some variables did not get initialized in lwp.c (fixed)
- Janjaap van Velthooven
fixed and heavily modified deliver command - Ken Stevens
*version 2.0 beta 2 release 5*
fixed spelling error in desi.c - Ken Huisman
new command "players" which lists all players currently logged on with idle
time and last command - Ken Stevens
several plane damage bugs fixed - Ken Stevens
Interdiction damage now same as it would be interactively (ie. through
shelling or bombing or whatever ) - Ken Stevens
march command rewritten with a smoother interface - Ken Stevens
fixed bug in attack command that crashed the server - Ken Stevens
code changed so if your action caused a bridge to fall you see a message
on the screen instead of getting a telegram - Ken Stevens
man pages for the empire executables now available in the man
directory - Ken Stevens
fixed a server crashing bug in fuel command - Ken Stevens
'c' sector is now called a "city" when BIG_CITY option used - Ken Stevens
nuke subs now come at the same tech as nuke warheads - Ken Stevens
deities no longer ever run out of BTUs - Ken Stevens
*version 2.0 beta 2 release 6*
Max range of anti-ship missiles reduced - Ken Stevens
fixed it so you dont have to logout and log back in to re-enable commands
when you come out of bankruptcy - Ken Stevens
new skywatch command added for finding sats - Ken Stevens
you can no longer fortify land units that are on ships - Ken Stevens
missile range in launch vs. interdiction has been reconciled - Ken Stevens
'tend' syntax now same as 'load', and you can now tend land units which
have 'assault' capability - Ken Stevens
fix for bug in realm command - Ken Stevens
fixed a sector damage bug introduced in 2b2r4 - Ken Stevens
fixed bug in show n b - Ken Stevens
fixed typo in Interdiction.t - Ken Stevens
fixed bug in telegram that caused server crash in certain instances - Ken Stevens
commodity damage routines reconciled to ensure that people damage is always
factored by the global variable people_damage. - Ken Stevens
fixed news items that were mis-reporting - Ken Stevens
fixed bug in missile-ship interdiction - Ken Stevens
added support in emp_client for C_FLASH and C_INFORM messages - Ken Stevens
fixed major bug in takeover() - Ken Stevens
fixed an incorrect message which would get printed when nukes were
dropped from bombers. - Ken Stevens
pinbombing output changed slightly - Ken Stevens
fixed bug in "land" - Ken Stevens
fixed bug in "power" - Ken Stevens
news cleaned up a bit - Ken Stevens
new info page on clients added - Ken Stevens
fixed several typos - Ken Stevens
new map code - Chad Zabel
fixes bug in BIG_CITY code when redesignated - Ken Stevens
fixes bug in redesignating of warehouses when sector has large amount of an
item - Ken Stevens
fixed bug in new empire client - Ken Stevens
improved 'play' command - Ken Stevens
*version 2.0 beta 2 release 7*
people with toggle inform on are now told at login if they have telegrams
- Ken Stevens
fixed bug in client - Ken Stevens
fixed scheduled update scheme (updates were not firing) - Ken Stevens
fixed negative avail bug - Ken Stevens
mail and wmail commands removed from server due to bugs - Ken Stevens
configure by default does not overwrite the hours file now - Ken Stevens
"build b 2,2 j" now permitted - Ken Stevens
fixed rounding error resulting in negative avail - Ken Stevens
fixed several typos in the docs - Ken Stevens
fixed sub-detect chance for asw planes - Ken Stevens
prevent players from rejecting stuff from the deity - Ken Stevens
removed missingmissiles option ( not used ) - Ken Stevens
removed reference to now standard SHIPSAM option - Ken Stevens
added "Balance of Power" page at the bottom of the news - Ken Stevens
re-introduced "pray" command - Ken Stevens
added collateral damage from missiles hitting units - Ken Stevens
fixed bug in attack - Ken Stevens
fixed bug in budget command - Ken Stevens
fixed command cutoff command - Ken Stevens
fixed bug in retr command - Ken Stevens
"realm x" now gives error - Ken Stevens
mfir and torp were not telling the attacker if the ship got sunk - Ken Stevens
planes on carriers which were >80% eff were being reduced to 80% eff, fixed.
- Ken Stevens
*version 2.0 beta 2 release 8*
fixed bug in pinbombing and interdiction - Ken Stevens
server crashed when trying to get friendly nations to interdict - Ken Stevens
bombers were being launched as interdiction missiles ( oops!) - Ken Stevens
server crashing bug in flash - Ken Stevens
*version 2.0 beta 2 release 9*
got rid of annoying "destroying done" message - Ken Stevens
compile.in changed - by default dont overwrite econfig - Ken Stevens
new global configurable variable assault_penalty = 0.50 - Ken Stevens
fixed commodity damage - Ken Stevens
added global string var used by attsub.c - Ken Stevens
added new option INTERDICT_ATT - Ken Stevens
cities are now navigatable if BIG_CITY is on - Ken Stevens
fixed server crash on friendly overfly - Ken Stevens
changed march and lndsub to use attsub routines - Ken Stevens
no longer get kicked out of navi prompt of you bump into something - Ken Stevens
doubled ship pinbomb damage - Ken Stevens
get warned if your message is truncated in flash - Ken Stevens
fixed bug in strength command - Ken Stevens
*version 2.0 beta 2 release 10*
new starvation command checks for starving ships and units as well - Ken Stevens
fixed a bug causing land units to starve - Ken Stevens
added new [ynYNq?] syntax to attack - Ken Stevens
fixed a bug that resulted in stranded units - Ken Stevens
caps are called cities if BIG_CITY is on - Ken Stevens
new power command allows syntax "power c 3/6/14" - Ken Stevens
fixed bug in news report - Ken Stevens
fixed spelling errors in info pages - Ken Stevens
can now type sector number at marc and navi prompt to move unit there - Ken
Stevens
changed output format of budget - Ken Stevens
can load and unload in 2% cities - Ken Stevens
fixed bug that caused blitzes to starve if food was on - Ken Stevens
fixed bug in plane maps - Ken Stevens
changed YN to mean units in same army - Ken Stevens
added "Attack aborted" message - Ken Stevens
fixed bugs in plnsub.c, bomb.c budg.c - Ken Stevens
fixed ship sunk bug in mfir.c - Ken Stevens
added "Assault aborted" message - Ken Stevens
fixed ship sunk bug in torp.c - Ken Stevens
you can now unload to up to 9999 in a sector - Ken Stevens
fixed bug in news - Ken Stevens
removed BETTERABM option - Ken Stevens
shutdown now asks you before automatically disabling updates - Ken Stevens
fixed lots of nuclear detonation related bugs - Ken Stevens
fixed supply bug - Chad Zabel
fixed bug so nukes now dissapear when you use them - Ken Stevens
harbour police bug fix - Chad Zabel
land units no longer see planes on ships with look command - Ken Stevens
fixes for autonav - Chad Zabel
fixed bug that crashed server - Ken Stevens
fixed paradrop bug - Ken Stevens
ship damage improved - Ken Stevens
made land unit abbreviations 4 chars long - Chad Zabel
shortened the tele time tolerance from 60 sec. to 5 sec. - Ken Stevens
rewrote atta/assa/para/boar - see Attack.t for details - Ken Stevens
fixed bug in strength command - Ken Stevens
*version 2.0 beta 2 release 11*
fixed bug in strength command - Ken Stevens
documented all the new attack stuff - Ken Stevens
new arm command lets you specify groundburst or airburst at arming time - Ken
Stevens
fixed bug in cede command - Ken Stevens
lowered damage land mines do to units - Ken Stevens
consolidated commodity landmine damage code - Ken Stevens
fixed minor bug in flash - Ken Stevens
new documentation - Ken Stevens
fixed bug in ship damage - Ken Stevens
mi1's were interdicting commodities - fixed - Ken Stevens
added to pre_write a check for 0 civ => oldown = own - Ken Stevens
fixed minor bug in attack sub file - Ken Stevens
fixed major bug in lmine - Ken Stevens
changed repo output format to give more information - Ken Stevens
fixed bug in setsect (deity command ) - Ken Stevens
fixed ship and land unit starve routines - Ken Stevens
new code replaces the old missdef code - Ken Stevens
fixed bug in land unit starve code - Ken Stevens
new deity command "swap" swaps two sectors - Ken Stevens
fixed board estimate bug - Ken Stevens
fixed bug in repo command - Ken Stevens
updated more documentation - Ken Stevens
updated keepitup script - Ken Stevens
3 letter abbreviations for asats - Ken Stevens
harbors now get warehouse packing bonus - Ken Stevens
you can now type "decl h *" to declare hostile with everyone - Ken Stevens
deities no longer start out at war with everyone - Ken Stevens
coun command disabled (doesnt work right anyways) - Ken Stevens
re-fixed news bug in torp - Ken Stevens
made non-deity version of players command with limited info - so players
can see if deity is on - Ken Stevens
changed name of swap command to swapsector - Ken Stevens
more documentation - Ken Stevens
increased stack space and got rid of "idle connection terminated" message
that would appear sometimes when you logged in - Ken Stevens
fixed server crashing bug in decl command - Ken Stevens
fixed a bug in repo command - Ken Stevens
fixed bug in that you were becoming the oldown of conquered sectors
immediately - Ken Stevens
implemented prship() prland() and prplane() functions to simplify
the SHIPNAMES stuff - Ken Stevens
moved prbuf() to xy.c - Ken Stevens
players now being told where missile is being launched from - Ken Stevens
chance of missile exploding on launch pad reduced to
5% * (1 - tech factor). - Ken Stevens
fixed crash in missiles - Ken Stevens
changed "geosynchronous" to "geostationary" - Ken Stevens
fixed crash in torp command - Ken Stevens
fixed a bug in nuke damage - Ken Stevens
fixed a bug in getpath() - Ken Stevens
fixed up the newbie intro info pages - Ken Stevens
fixed bug in strength command using offense rather than defense strength - Ken
Stevens
improved launch output - Ken Stevens
improved the way players interact with nukes - Ken Stevens
gave update priority over shutdown - Ken Stevens
fixed thread stacksize causing crash - Ken Stevens
Planes will no only abort once they are less than 80% - Ken Stevens
fixed bug causing scuttled object not to be printed - Ken Stevens
fixed memory leak in atta/boar/assa commands - Ken Stevens
removed the "warning: this isn't a warehouse" message in dist - Ken Stevens
engineers with 0 mob can no longer hit a mine when trying to sweep - Ken Stevens
changed "115% damage" to "115 damage" and added info on how to
convert in "info Damage" - Ken Stevens
changed shoot syntax to make it like move - Ken Stevens
fixed bug in interdicting nukes - Ken Stevens
added safety check for negative nukes - Ken Stevens
75% sat now only sees 75% of sectors ( rest are blank ) - always the same
25% are blank - Ken Stevens
if you are over tech 290, you cannot build planes that are < tech 150
- Ken Stevens
fixed a bug preventing you from assaulting your own sectors - Ken Stevens
no more multiple telegram updates - Ken Stevens
cede 2,0 "sector" now works ( before only "sect" would) - Ken Stevens
removed a couple noisy output lines in dist - Ken Stevens
fixed bug in "test" command - Ken Stevens
changed load and tend syntax to be same as move ( see info Move ) and
rewrote lload, load, unload, and lunload, improving prompts, etc
- Ken Stevens
planes wich are less than 40% cannot fly - Ken Stevens
improved the output of "report" - Ken Stevens
fixed bug in budget - Ken Stevens
fixed bug in "players" command - Ken Stevens
if an attacker aborts an attack, the victim now gets a telegram - Ken Stevens
extended toggle syntax so you can now type "toggle inform on" - Ken Stevens
show output changed - Ken Stevens
engineers stop working once a sector reaches 100% - Ken Stevens
you are no longer asked if you'd like to "nuclear" bomb ( see info arm )
- Ken Stevens
cleaned up scripts and deity docs - Ken Stevens
2b2r11 became empire 2.3.0
further changes documented in CHANGES2.3

335
doc/CHANGES2.3 Normal file
View file

@ -0,0 +1,335 @@
Unless otherwise specified, the changes in this file were made by Ken Stevens
emp2.3.0.a.tar
- port to IRIX - Janjaap van Velthooven
- added "info Hidden"
- added "doc/econfig"
emp2.3.0.b.tar
- fixed abm news message
- reduced sam ranges to 2/3/4
- fixed MAJOR bug in unload
- arty now have to be 20% to fire
- widened range in "player" command
- fixed bug in "fuel"
- fixed "starv l"
- updated info pages
emp2.3.1.a.tar
- harbours weren't getting packing bonus when importing on dist.
emp2.3.2.a.sh
- removed a bunch of *.orig files
emp2.3.2.b.tar
- added #include <unistd.h> to util/*.c for Linux compatability
emp2.3.2.c.tar
- removed -g flag for linux because it made fairland crash on getopt()
emp2.3.3.a.tar
- fixed MAJOR bug in load
- cleaned up some old global variables that weren't used any more
- config.status no longer creates econfig (compile does it now)
- gave _exit() an argument for Linux
emp2.3.4.a.tar
- fixed server crashing bug in pinbomb
emp2.3.4.b.sh
- cleaned out GNUdepend files for Linux
emp2.3.4.c.tar
- changed configure script to ask for IP address
- made authorization check strict. NOTE: this will make it harder to install.
- added this file
emp2.3.4.d.tar
- fixed a MAJOR bug in attack that was taking too much mobility.
emp2.3.4.e.tar
- fixed a but that was dividing by # of civs rather than multiplying
by them for mountain caps. OOPS. This bug has been in the code for years!
- changed the output of the "player" command.
- fixed a minor bug in "load"
- changed "return fire does 190% damage" to "return fire does 190 damage"
- changed "power" so now you can specify country names in "power -c"
- added "info BTU"
emp2.3.4.f.tar
- info pages are now separated into "Basic" and "Expert" level pages.
"Basic" level pages have a * beside them on the Subjects info pages.
- reduced "flapping" of "players" random output.
- now include self in repo * output.
emp2.3.4.g.tar
- a couple more IRIX patches - Janjaap van Velthooven
- bugfix for upgrade command - Janjaap van Velthooven
- extended syntax for one way orders - Julian Onions
- fixed a bug that would crash the server if an abm blew up on the launch pad
- fixed "was sunk at" message.
- you are now told if you abandon a sector by marching out of it.
- if you give someone back their cap by marching/moving/exploring out
of it, it gets changed into an agribusiness.
emp2.3.4.h.tar
- fixed a server crashing bug in mfir
- telegrams to yourself no longer show up in the news
- fixed a server crashing bug in show
emp2.3.4.i.tar
WARNING: I am not sure how portable this code is...
- added hostname to struct player
- all hostaddr validation now also checks against hostname
- changed "player" command output to show time used and user@hostname
emp2.3.4.j.tar
- fixed a bug introduced in emp2.3.4.i.tar
emp2.3.4.k.tar
- players can now see which of their allies are logged on using the
"players" command.
- fixed a server crashing bug in "players".
- you are now allowed to scrap in friendly harbours
- ask for double confirmation for scrapping trade ships (and tell
people to use "scuttle" instead).
- fixed documentation for scuttle/scrap
- you are no longer allowed to attack with supply, aa, arty, or
security units.
- the procedure for determining tech, research, edu, and happiness are
now explained in precice detail in the info pages.
emp2.3.5.a.tar
- applied 3 patches from someone (sorry I forget who) they had to do
with POSIX compatability
- fixed a MAJOR bug in ltend
- fixed a bug in "starva" which was stealing food from harbours
- fixed a server crashing bug which occurred when you hit return at an
attack prompt.
- added a new command "echo" at Kevin Morgan's request
- fixed a few minor formatting errors
- fixed an output warning which you got when you aborted assaulting
your own sector
emp2.3.5.b.tar
- fixed a bug which gave land units positive mobility if they went
below -127 (e.g. marching into a mountain)
- fixed a bug which required nuc missiles to have shells to launch
- fixed a bug which was preventing choppers from landing on ships
- fixed an error which prevented the server from compiling with
the ORBIT option off.
- fixed a bug which would throw the server into an infinite loop if
two ships followed each other.
- fixed a typo in scra.c that someone else's smart compiler caught.
emp2.3.5.c.tar
- cut sector damage in half (except for nukes)
- fixed "WARNING: sector ownership changed" integrity check message
- fixed "not in supplied harbour" message in "fuel" command
- fixed "lost x% to starvation" message in production report
- boarding mil no longer pack a lunch
- The following changes were made to the sonar command:
- will only work from ships at sea
- will only detect ships at sea
- will now detect the shoreline
- will only detect things if there is a straight line of water
between the detector and the detected (no longer works around corners)
- now displays a map and changes your bmap
- for ships with tech > 310, shows mines on the map with an X and
puts the X on your bmap
- fixed minor bug in input routine of "fire" command
emp2.3.5.d.tar
- Never again will you see in the news:
TheBorg execution squads gun down helpless TheBorg civilians
- If you lay, sweep, or hit a sea mine, then an 'X' will automatically
be put on your bmap
- All ships (including subs) in harbors are now visible via the "lookout"
command by all ships (including subs) in adjacent sectors
- Fixed a bug in sonar which was hiding subs beneath 'X's
emp2.3.5.e.tar
- Fixed a server crashing bug in supply routines (supply units were
drawing petrol from themselves in infinite recursion)
- Fixed a server crashing bug in attack code (bad return value)
- Fixed a server crashing bug in "declare" command (null pointer)
- Fixed a server crashing bug in "fire" command (use of freed
memory) - Yannick Tremblay
- Fixed bug in "edit ship" which wasn't displaying ship properly
- Engineers assaulting from landing ships were being charged too
much mob (bug fixed)
- User defined plane ranges were not being used by the mission code
(bug fixed)
emp2.3.5.f.tar
- Fixed a number fo bugs related to shelling - Yannick Tremblay
- Fixed a MAJOR ship damage bug
- The budget command has been changed so that now you may choose not to
pay maintenance costs. Also, "mil" on ships/planes/units has been
moved from the maintenance costs for those items to the "Military" section
of the budget.
- If you can not afford to maintain your ships/planes/units or you
choose not to maintain them using the "budget" command, then they will
loose ETU/5 % efficiency at the update.
- If you are broke at the point of the update when it comes time to
build something, then that thing will not be built.
- Broke countries are now allowed to use all commands except for:
arm assault attack board bomb build convert disarm drop enlist explore
fire fly grind harden launch lmine mine paradrop recon satellite scrap
shoot sweep torpedo treaty upgrade work
- Broke countries are now allowed to use these commands:
demobilize lload llookout load lookout lradar lrange lretreat ltend
lunload march mission morale mquota navigate order qorder radar range
retreat sail sonar sorder spy supply tend transport unload unsail
emp2.3.5.g.tar
- Fixed a server crashing bug in budget command
- increased sea mine hitchance from mines/(mines+50) to mines/(mines+40)
- increased sector damage from 50 * dam / (dam + 50) to
100 * dam / (dam + 100).
- fixed a bug which was preventing engineers from tearing down 100% sectors
- added new <brief?> argument to sonar output which suppresses map
- reduced land mine damage from 10 + random(20) to 6 + random(10)
emp2.3.5.h.tar
- Fixed server crashing bug in "morale" command.
- Engineers no longer "raise" eff from 100 to 92, they "lower" it.
- Engineers working are now only charged mobility for work they do
- Ships fueling themselves now loose petrol/oil
- Now, when a sector is abandoned or revolts, the takeover() function
is called to stop production, wipe distribution levels, etc...
- Engineers are now charged 1 mobility point per land mine laid
- Added number of land mines in the sector to the "strength" output
- Fixed lots of typos
emp2.3.5.i.tar
- Fixed a bug in "bomb" which was preventing light bombers on acc's
from being able to take off.
- Artillery no longer consume petrol or food when they fire (they
only consume shells).
- increased land mine damage from 6 + random(10) to 10 + random(10)
- if land units are accompanied by engineers, then their chance of
hitting a land mine is divided by 3. E.g. if there
are 25 mines in the sector, then a land unit has a 33%
chance of hitting a land mine. If it is accompanied by an
engineer, then that chance drops to 11%.
- If an engineer sweeps a land mine that it cannot carry, it drops
it as a shell into the sector.
- Engineers now sweep a number of times equal to 2 times the number
of shells they can carry.
- The chance of an engineer finding a land mine in a sector is now
50% time the "att" value of the unit:
# of sweeps chance of finding a mine
old system 5 66%
eng1 130 6 60%
eng2 165 8 75%
meng 260 8 90%
- The "visibility" of a sub to an ASW plane has been increased from
vis to 10 + vis * 5. This should dramatically improve the chances
of ASW planes locating and hitting subs.
emp2.3.5.j.tar
- changed visibility of subs from 10 + vis * 5 to vis * 4 in the
asw hitchance calculation.
- when subs on interdiction miss, both parties are now informed
(in the old system, neither party was informed)
- you are no longer allowed to hit subs with missiles (oops!)
emp2.3.6a.tar
- Forts will now only automatically interdict ships that the country
would be able to see using the "coastwatch" command. Ships out of
visual range will not be interdicted by forts. Note that
ship/ship, unit/ship, plane/ship interdiction was not changed,
and also the "fire" command was not changed. _only_ fort/ship
interdiction was changed.
- If a NEUTRAL (or worse) ship sails within your coastwatch range,
then you will receive a telegram like this:
TheBorg lc2 light cruiser 2 (#666) sighted at -9,-1
This telegram is sent before any interdiction is done.
- When an ASW plane flies an interdiction mission to hit subs, it will
now also report on any subs it happens to see along the way (in
the same way it would if it were flown using the "sonar" command).
emp2.3.6b.tar
- now when you march or navi, any new sector designations
automatically appear on your nav map and get added to your bmap (you
no longer need to do a "look" to find out their designation. Note
that subs will only see sea, harbors, and bridges and will have to
"look" (and risk detection) to see anything more.
- you can now filter your satellite output to list, for example, only
banks owned by country #7 which are over 60% efficient. The selectors
available are exactly the same as those used by the "census", "ship",
and "land" commands. See "info satellite" for more details.
- added two new toggle flags (default on):
- if "toggle coastwatch" is on, then you will receive a telegram every
time a neutral ship moves within your coastwatch range.
- if "toggle sonar" is on, then you will receive a telegram every
time one of your sonar cabale ships detects a sonar ping.
- now a 20% engineer only does 20% of the "work" that a 100% eng does.
- fixed a bug which was counting ghost units in "spy" output.
- fixed a bug which was including sats as planes in "spy" output.
- fixed a bug which was giving rebels ownershiip of sats over the sector
emp2.3.6c.tar
I have made asw interdiction more extensive and subs more sneaky.
Here is the new system:
- ASW planes will now fly out to track any non-FRIENDLY (including
NEUTRAL) sub movement.
- However there is a chance that the plane won't even leave the ground
and notice any sub movement at all. The chance of detection is
identchance = (1 - (1 - hitchance)^2).
- ASW planes will no longer detect subs they fly over while flying an
interdiction mission.
- Once the planes have arrived at the sector where the sub movement
was detected, then identchance is checked again. If success, then
the plane is able to identify the owner of the sub. If the owner
is neutral, then the player gets the message:
np1 naval plane 1 #2 tracks TheBorg subs at 2,-6
If the plane is unable to identify the owner of the sub, then the
player gets the message:
np1 naval plane 1 #2 detects sub movement in -3,-3
If the ship was identified as HOSTILE or AT_WAR, then the plane will
drop depth charges.
- If depth-charges miss, then the ship owner will get
the message:
RUMBLE... your sub in 24,0 hears a depth-charge explode nearby
- torp and fire will now only tell the victim that a "sub" torped
them, or that return fire damaged a "sub" (rather than giving out
detailed information about the sub number, type, and owner...)
- max sonar range has been reduced to 7 and sonar output no longer
prints blank lines.
- sonar has been changed in the following way:
detection = (source "spy" value) + (target "vis" value)
If the detection value is less than 8, then sonar will just print
Sonar detects sub #12
If the detection value is above 7, then sonar will report the type of sub.
Only if the detection value is above 9 will the owner of
the sub be revealed.
- For ASW planes flying "sonar" or "recon" missions, a similar change
has been made. The plane needs to pass one identchance check to see
the type of sub, and needs to pass two identchance checks to see the
owner of the sub.
- Note in both of the above cases, owner and type of FRIENDLY and
ALLIED subs will always be revealed.
emp2.3.6d.tar
- made scrap and scuttle more flexible
- supply units, security units, aa-units and artillery can no longer
be put on reserve mission, and they will no longer react to a battle.
- asw planes were tracking their own subs (oops!)
- interest from banks no longer turns off at 60% efficiency. Now the amount
of money you get from your bank is simply scaled by the banks efficiency.
emp2.3.6e.tar
- fixed MAJOR bugs in budget, scrap, and scuttle (oops!)
emp2.3.6f.sh
emp2.3.6g.tar
- Fixed a bug in "work" which wasn't charging them enough mobility
- Changed "capitol" to "capital" in a hundred million places
- Updated a number of info pages
- Fixed output formatting error in "sorder" command
- Applied a patch from Jan van Beethoven (AIX port)
emp2.3.6h.tar
- fixed a bug which was causing dd's to interdict neutral subs.
- wrote "info Hitchance" which outlines in detail the chance of
anything hitting anything else. This page compliments "info Damage"
which gives all the damage formulas.
- the defense strength of mountains was reduced to 16 to 8 (the
defense strength of a fort). There was a problem of land units
in mountains being invulnerable to everything but nukes.
emp2.3.7a.tar
- missile interception (both abm and a-sat) has been changed so that
interceptors are chosen from the owner of the target sector first (so
that your ally's abm1's won't launch instead of your abm3's)
- if a tradeship won't give the player any cash if it is scuttled
where it is, then the player will be asked for a second confirmation
before they are allowed to scuttle it.
- applied a patch from Ville Virrankoski which fixes a bug in budget
(the cost to repair planes on aircraft carriers was not being included
in the budget)
- fixed a bug which was preventing bombers from being able to drop nukes.
- fixed a bug which let asw planes bomb subs they couldn't see
- fixed a bug that was sending a telegram to the deity when planes on
an acc flew air defense missions. An obscure but annoying bug.
- changed isblank() to blankrow() in lib/commands/sona.c for portability
- fixed a server crashing bug in lradar (some coder put a global
variable in lib/commands/rada.c BAD BAD BAD)
emp2.3.7b.tar
- fixed a bug in bomb which put the server into an infinite loop when
the player aborted at the "commodity to bomb?" prompt.
- when your cap is sacked, you now get a telegram telling you how much
money you lost and they gained.
- when your cap is sacked, then your cap will be moved to a random
adjacent (possibly unowned) sector (the treasurers fleeing the
palace). This was mainly done because players were retaking mountain
capitals every update (you can't redes a mountain to be an aggie!)
- added three new files in the doc directory: "PRIORITY", "WISH_LIST"
and "WACKY_IDEAS".

449
doc/CHANGES3.0 Normal file
View file

@ -0,0 +1,449 @@
Empire 3.0.0
- Implemented the C_SYNC RFC
- New commands:
sync
toggle sync
toggle async
- New files:
h/edb.h
h/toolkit.h
lib/commands/sync.c
lib/global/edb.c
lib/subs/prsync.c
info/Commands/sync.t
doc/CHANGES3.0
- New struct members (currently not used)
- player.comhistory command history (for debugging) last 10 commands
- nat.nat_mission_trigger set which relation you want to trigger
various missions and autodefenses at.
- Added land.lnd_scar -- how experienced the land unit is.
- sect.sct_mobil was changed from unsigned char to short (to permit
the removal of updates--note I don't plan to remove updates, but
someday someone might try and they will need this so that sectors can
go to negative mob).
- New struct members (currently used):
- Added type field to all objects so they can identify themselves
- Moved var structs to the top of all class structs for easy location
(see struct genchrstr defined in h/genitem.h)
- nat.nat_hostaddr, nat.nat_hostname, nat.nat_userid, userid and hostname
of last person to connect to that country. If when you login,
your userid or hostname is different from the last person to conenct
to that country, then you will get a message like:
Last connection from: Mon Nov 13 01:48:04 1995
to: Mon Nov 13 01:48:12 1995
by: children@RedDragon.Empire.Net
this will improve security and be helpful for co-rulers. Also
added were nat.nat_last_login and nat.nat_last_logout.
- Nation now has 50 realms.
- New global constants:
- Extended nsc ("next selection conditionals" e.g. cen * ?mil=5) to
support C_SYNC messages and include the objects "map" (bmap), and "nation".
These will transmit to the client the equivalent of "dump", "ship",
"car", "land", "lcar", "bmap", and "nation" output and more.
- Added nsc entries for the following classes: sect, ship, plane,
land, nuke, map, item, product, and version. These will transmit to
the client the equivalent of the "show" and "version" command output
and more.
Empire 3.0.1 C_SYNC 0.0.1
- changed the order of the struct members of sect, ship, plane, land unit,
nuke to put own and uid out front (note this results in a new version
of the C_SYNC protocol)
- fixed a bug in "sync object" which was sending erronious data
- for now all C_SYNC messages will automatically send uid (or x,y for sects).
this should be changed to implement "surfacing noises" and interdiction.
- whenever any of your sect, ship, plane, land unit, or nuke changes,
you will get a C_SYNC message describing the entire new struct.
- Note this occurs everytime the data changes EXCEPT for changes
which happen durring an update. For now, I will require clients
to call "sync object all" after an update if they want to sync their
database after the update.
- If you loose a sect, ship, plane, land unit, or nuke, then you will
get a very partial C_SYNC message only telling you the id and new owner.
- look, spy, coastwatch (async & sync), now all send you partial
C_SYNC messages telling you information about your enemy's stuff.
- Note: For now, you get precise information about the number of mil in
the sector etc... This will be fixed in 3.0.2
Empire 3.0.2 C_SYNC 0.0.2
- there is now only one announcement file which all countries post to
and read from. the wire syntax has changed to "wire [y|n|<days>]" to
allow you to read announcements from <days> days ago if you want.
- at each update, all announcements older than 7 days (deity
configureable as #define ANNO_KEEP_DAYS in misc.h) are automatically
deleted.
- a player's bmap can now be changed (e.g. by planes flying missions)
even when they're not logged on.
- added a new command "sharebmap <COUN> <SECTS>". If <COUN>
is friendly towards you and your bmaps already share enough information
in common, then your bmap will be added to their bmap. For more details
(there are alot more details) connect to empire.net 7773 1-10 and type
"info sharebmap".
- now whenever a designation gets added to your bmap, the client will
receive a very small C_SYNC MAP_CLASS message
- when your country's money, reserves, cap location, name or origin
changes, you will get a C_SYNC NAT_OBJECT message with your new nation
data. Client writers take note: there is a new field in the nat
struct called "xstart,ystart" which is the start location of the
origin. So if the client needs to make some transformation of the
co-ordinates, it can refer to this variable.
- when you type "nation", that will also send a C_SYNC NAT_OBJECT
message to the client.
- removed a bunch of fields from the C_SYNC nat struct (to cut down bandwidth)
(this results in a new version of C_SYNC).
- information about enemy commodities, tech, or efficiency are now
rounded to the nearest 10.
Empire 3.0.3 C_SYNC 0.0.3
- added three new land units: "cavalry 2", "light infantry", and
"aau1". Here's the basic scheme. The old cavalry are an average
between the somewhat weaker cav1 and somewhat stronger cav2.
light infantry are half the size of and slightly fastar than inf1's.
"aau1" come at the same tech as Zepplins and let low tech countries
try to throw rocks at low tech planes...
- reduced the size of "ts1 trade ship 1" to 100 lcm, 50 hcm, $1500
(from 200 lcm, 100 hcm, $2500). Most players were waiting for ts2
so this is a nice way to deal with that.
- after each update, all countries receive the message "C_SYNC EDB_UPDATE".
(this results in a new version of C_SYNC).
- all telegram files have been moved into a subdirectory called "tel".
- new subdirectory of the data directory "sync" holds spooled C_SYNC messages.
- if the player is not logged on when they receive a C_SYNC message,
then it will be spooled to their sync file. If the sync file
contains spooled messages older than 3 days (deity
configurable as SYNC_KEEP_DAYS in misc.h), then the C_SYNC message will
not be spooled.
- New command "sync read [yes|no]" reads all spooled C_SYNC messages.
If the [yes|no] argument is not specified, the player will be asked:
"Can I throw this information away now?".
- Removed the "bdes" command. It is no longer necessary (since the
server now automatically adds 'X' sectors to your bmap, and it also
automatically adds sectors that your planes fly over when they're
flying missions). The "bdes" command in conjunction with the new
"sharebmap" could lead to abuses, and since it is no longer really
necessary, I removed it. Given the choice between sharebmap and bdes,
I think most players would choose sharebmap.
- The delivery and distribution stuff was removed from the output of
"commodity" and each column was widened to 5 characters (to accomodate
the new system where sectors are now allowed to hold up to 9999 of stuff)
- IP addresses will now only be resolved into hostnames if RESOLVE_IPADDRESS
(in misc.h) is defined.
- Mountains will now mine gold at 1/5th the rate that gold mines do (thar's
gold 'n them thar hills!)
Empire 3.0.4 beta C_SYNC 0.0.4
- If the game is a blitz, then the "players" command will list other
countries which are logged on. This will cut down on the "is anybody
else logged on?" announcements. Note that for players, "last command"
and "user@hostname" are not printed (only deities get to see this stuff).
- fixed a server crashing bug in "sync class all".
- each country now has two bmaps, their 'working' bmap and their
'true' bmap. The true bmap contains only information put there by the
server. The working bmap also contains information put there by the
bdes and sharebmap commands. The "bmap" command usually displays the
working bmap unless the player specifies "bmap <SECTS> true". Also,
if the players working bmap somehow becomes corrupted, then they can
type "bmap <SECTS> revert" to revert their working bmap back to their
true bmap. This change was necessary to prevent abuse of the new
"sharebmap" command (which now compares the players true bmaps when
determining whether they overlap).
- There is a new info page 'info Empire3' which contains game changes
of particular interest to players.
- Put the bdes command back in.
- Added a new question in the "configure" script: "Do you require your
server to be unusually small?". If the deity answers "yes" to this
question, then many bells and whistles will be turned off to generate
a lightweight "bare bones" Empire server.
- I have padded each object struct out by a spare char, int, and long.
This is to give me room in the coming months in case I need to make
a change which needs data in the object structs, and I don't want to
invalidate currently running long term games.
- Tested the HIDDEN and SLOW_WAR mods (these hadn't been tested for
the Empire2+ server yet).
Empire 3.0.5 beta
Note: the primary focus of this upgrade is to address the f1
SAM-soaking problem. The solution I adapted is a mixture of ideas
from various people--mostly not myself. I appologize for forgetting
whose ideas these were, and I hope that in consolation for not
acknowledging you, you will at least be happy that I implemented
your ideas. This was a pretty big job.
- In the old system, planes would be charged either 10 mobility
(interceptors), 12 mobility (escorts) or 20 mobility (the rest) per
flight. This cost was then multiplied by (100/eff) with the
restriction that plane mobility could not go below -32. Planes flying
missions were charged only 1/4 of this. In the new system, planes are
charged a base rate of 5 mobility to prepare for takeoff. On top of
this, they are charged a "flight cost" which is either 10 (interceptors
and escorts) or 20 (the rest), however this flight cost is scaled down
according to the length of the flight--it is multiplied by (flight
length) / (max plane range). The flight cost is then scaled by
(100/eff) with the restriction that a plane can't go below -32
mobility. Planes flying missions are charged 1/2 of this.
- The mobility of a plane will now go down by one point for every two
points of damage it took from air-to-air combat, to a limit of -32
mob. This is to simulate the high mobility cost of air-to-air combat,
and the fact that air-to-air combat is more effort for low tech planes.
- SAM interception is now separate from plane interception; for each
attacking plane, if the plane cost at least $1000 to build, then one
SAM will be launched at it. After SAMs have been fired, fighter
planes will intercept what's left over.
- The restriction that high tech nations can not build low tech planes
has been removed (the above changes address the f1 SAM-soaking problem).
- marine missiles on interdiction now fire at a single ship rather
than the whole fleet. They pick the ship which is the most valuable
according to (cost to build) * efficiency. Furthermore, marine
missiles will only launch at a ship if the ship cost at least $1000
to build or if it can carry land units or planes.
- the NEWPAF option has been made standard.
- fixed a bug which wasn't giving a +1 radius bonus to units in 60% HQ's.
- "toggle sync on" now sends back a "sync version" as per the RFC.
- fairland now prints an error to stderr if it can't grow the
continents (it used to just print the last partially built map).
- when you break sanctuary, your 100% sanctuaries turn into cities and
all your other sanctuaries turn into roads (this is helpful for
games which use "bigstart").
Empire 3.0.6 C_SYNC 0.0.5
- Fixed a bug in the attack code which was underestimating defense
strength (it was only giving the sector defense bonus to land
units--not mil). Note--the bug was only in the estimation part, so
countries were not being given a chance to abort attacks where the
odds were clearly against them.
- Mountains can now only hold 1/10th as many civs as normal sectors.
- Raised the gold production efficiency of mountains from 20% to 75%.
- Changed fairland to put gold in mountains.
- flash and wall messages are no longer truncated. Instead the message
is split into 60 character pieces which are transmitted one at a time.
- If the game is HIDDEN then non-contacted countries no longer show up
on your "relations" output.
- If the game is HIDDEN and you try to declare relations with a
country you haven't contacted yet, then you will now get an error
message (before you got nothing at all).
- Update production reports are now Production Reports again (they
were BULLETINS since Empire2.0.0). This will fix a bug which was
preventing players from being "informed" when they get an update telegram.
- The new info page "info Mobility" gives the formulas for all
mobility costs in the game.
- Before you type a telegram, you will now see:
Enter telegram for Fodderland
undo last line with ~u, print with ~p, abort with ~q, end with ^D or .
1024 left:
The new tilde escapes work very nicely.
- The prompt for escorts has been changed from "plane(s)? " to "escort(s)? ".
- Changed the mobility cost to move into a sector from
cost = (mcost - eff) / 5
to:
if (mcost < 25)
cost = (2 + (3 - mcost) * eff) / 5
else
cost = (mcost - 20 * eff) / 5
OLD SYSTEM: eff 0% 100% NEW SYSTEM: eff 0% 100%
+ 0.2 0.0 + 0.4 0.0
m 0.4 0.2 m 0.4 0.2
^ 5.0 4.8 ^ 5.0 1.0
Note that this means land units can attack 100% mountains now, so
there will be a tradeoff for the defender--either they can have a low
efficiency mountain that costs more mobility to attack but gets a
lower defense bonus, or they can have a high efficiency mountain that
costs less mobility to attack but gets a higher defense bonus.
- New conditional query "coastal" which gets set when you take a
"census" of the sector. Type "cens * ?coast=1" to get a list of all
of your sectors which are adjacent to water (and thus vulnerable to
assault).
- Added a new C_SYNC field to SCT_OBJECT called "coastal". This results
in a new version of the C_SYNC protocol.
Empire 3.0.7
- Fixed a server crashing bug in the sneak attack code
- Sectors with 0 mobility can no longer enlist mil
- In a HIDDEN game, you can now only see relations for countries you
haven't met yet
- Fixed a bug in the "Last login from" part of the login sequence.
- added new global array player_commands which keeps a list of the
last 100 commands typed by players. Added a file doc/debugging which
explains to deities how they can access this list.
- Fixed a bug that would prevent you from being able to assault your
own sector if SLOW_WAR was enabled.
- In a HIDDEN game, llook will now contact.
- Fixed a bug in the SLOW_WAR mods which was charging people WarCost to
declare war when their enemy was Sitzkrieg towards them.
- Fixed a bug in HIDDEN--sending a telegram or auto-coastwatch
sighting ships will now both contact.
- Fixed a bug in SNEAK_ATTACK--you are no longer charged for boarding
a non-at-war ship.
Empire 3.0.8
- Removed an infinite from the autonav code.
- Fixed the "client" login command.
Empire 3.0.9
- Consolidated budget code for ships, land units, & planes (Ville Virrankoski)
Empire 3.0.10
- Fixed a bug in radar (anonymous)
- Ported the server to Ultrix (Yannick Tremblay)
Empire 3.0.11
- Port to FreeBSD (submitted by Janjaap van Velthooven)
- Fixed a server crashing bug in range command
- Fixed a bug which gave players free info when they shelled deity bridges
(reported by Jim Gillogly)
- Small ships can now fuel in cities (reported by Walter Smith)
- Fixed compile bug in wu.c (reported by Curtis Larsen)
- Documented toggle sync and toggle async (reported by Bernhard Reiter)
- Fixed a bug in shoot which was leading to abuses (reported by
Nathaniel Thurston)
- route now prints % sectors (reported by Nathaniel Thurston)
Empire 3.0.12
- mkmf is no longer needed to compile the server (Michael Straub)
NOTE: This change depends on "cpp -M" working on your system.
- A number of bug fixes to the "budget" command (Ville Virrankoski)
Empire 3.0.13
- Fixed a bug in "budget" command
- If cpp doesn't exist on the system, then "cc -MM" is used in place
of "cpp -M"
Empire 3.0.14
- Extensive consolidation of "budget" command with update routines
(Ville Virrankoski)
- Fixed some of the portability problems arising from the switch to "mkdep"
Empire 3.0.14a
- Fixed a server crashing bug in the update routines (introduced at 3.0.14)
Empire 3.0.15
- Fix of a MAJOR bug in the budget/update routines which was
overcharging countries for military reserves (Ville Virrankoski)
- Simplification & fix of mkdep/configure (Yannick Tremblay)
- Port to Solaris 5.5 (Ron Kuris <rk@unify.com>). Here are the notes
that came with the Solaris port:
----------------
These are the patches to make the new server work on Solaris.
Some notes:
My environment is that we have cc from Sun, but no license.
We have gcc installed as /opt/gnu/bin/gcc. Although it was
built with Solaris 5.4, it works fine on 5.5. If you need
gcc, use archie to exact search for FSFgcc.gz (I found it
on qiclab.scn.rain.com in /pub/solaris). You also need
FSFtools.gz for gnumake. These packages install very easily.
While running configure, your 'gnumake' is /opt/gnu/bin/make,
and the compiler you should use is /opt/gnu/bin/gcc.
My build path is something like:
PATH=/opt/gnu/bin:/usr/ucb:/usr/bin:/usr/sbin:.
Once you apply the patches, everything seems to work.
Whoever integrates this into the mainstream:
The change to client/GNUmakefile is the only one I think
that might need tweaking. It sets the default build flags
to Solaris (somehow I don't think you want that). I tried
pretty hard not to break anything else.
The change in lwp.c I think is just an outright bug, but
most versions of the lwp system dependent stuff just happen
to get lucky by not saving the registers. This should NOT
be relied upon!
----------------
Empire 3.0.16
- Optimization of mkdep (Yannick Tremblay)
- Moved solaris from emp3 to emp3/make/Systems (Ron Kuris)
- Minor enhancement to "lcargo" code (Ron Kuris)
- Fixed a bug which had setting budget priorities on land units
result in being charged twice for them (Ville Virrankoski)
Empire 3.0.17
- "read" command now sends a C_SYNC nation message. (Curtis Larsen)
- Fixed a bug which was deleting the announcement file when there were
no announcements (reported by Ed Down).
- Fixed "~u" tilde-escape for "telegram" and "announce" commands (it was
possible to undo back past the beginning of the buffer and crash the
server (reported by Nathaniel Thurston).
- mkdep optimization (Yannick Tremblay).
- Changed syntax for "cede" command so that you can specify "se" or
"sh" on the command line (reported by Tero Paananen).
Empire 3.0.18
- fixed a serious bug in configure and mkdep which prevented the
server from compiling
Empire 3.0.19 Ken Stevens 17 Apr 96
- Fixed a serious bug in the Empire3 server which allowed players to
create an infinite number of shells and food out of nothing.
I added a new field "simulation" to the player struct and set this
field to 1 in all update simulation commands (budg, prod, neweff).
Then in the update code, instead of checking the variable update_pending
to determine whether the update is "for real", I check the player->simulation
variable. Note that when the commands sneweff, pneweff, and lneweff
get added to the server, they should also set player->simulation to 1.
- subs/takeover.c added a check to make sure the number of che doesn't
overflow (Paul Byrne)
- update/revolt.c. It fixes two problems. First, after security
forces kill che, if there are no che left, the function returns
without saving the zero-che value. Worse, it never checks for
negative che values, which looks like it could happen. The second one
is in che moving. It loops through the neighbors looking for the best
place to move. Problem is, if it finds a place to move it doesn't
move to that place, but simply to whichever place it last looked.
(Paul Byrne)
Empire 3.0.20 Ken Stevens 21 May 96
[from 3.1.2]
- fixed a serious bug in the "production" command which could cause
a server crash (Steve McClure).
- fixed a bug in the "starve" command which could suck all the food
off of a ship or land unit on the ship (Steve McClure).
- fixed a bug in the "deliver" command mis-interpreting the return
value of the putvar function (Steve McClure).
[from 3.1.3]
- Fixed a bug in road mobcost calculation (Steve McClure)
- Fixed a bug in the toggle command (reported by Keir Novik)
[from 3.1.6]
- Fixed a bug in the attacking code where moving mil into a sector was
going on. It would probmpt for the max amount of mil to move in
by mobility, but when you moved in it never checked, so you could still
move all the attacking mil in (Steve McClure)
- Fixed a bug in fairland (Ken Stevens - reported by Janjaap van Velthooven)
- Fixed a bug in map C_SYNC (Ken Stevens - reported by Markus Armbruster)
[from 3.1.7]
- fairland.c. Better representation of the map for >30 continents.
The markings for continents start wrapping for more than 62 continents,
the map won't get any control characters anymore (Janjaap van Velthooven).
- C_SYNC. forces a newline whenever data with a different id is appended to a
partial line. Caveat: this sacrifices the line structure to correct
the line tagging (Markus Armbruster).
- Fixed a bug which wasn't printing the last row of `sync object bmap'
in god's coordinate system (Markus Armbruster).
[from 3.1.16]
- port to Ultrix (Markus Armbruster)
Empire 3.0.21 Ken Stevens 1 July 96
- fixed a bug in reco & sat which wasn't putting a carriage return
after land units.
- fixed a bug in starvation command which sent the user a telegram
telling them how much each of their land units lost due to starvation.
- fixed a bug which would send you a message "RUMBLE...your sub hears
a depth-charge explode nearby" when you weren't navigating subs
(reported by Keir E. Novik)
- increased buffer size in emp_client from 1024 to 4096 for sync
class version (reported by Markus Armbruster)
- fixed a bug in revolt code which could damage a sector below 20%
without checking if it was a bridge (reported by Pat Loney)
- fixed a bug in SLOW_WAR which prevented you from re-inforcing your
own sector by assaulting (Aaron Dewell).
- fixed a bug in sack capping news item (reported by Ed Down)
- fixed a server crashing bug in "offer" command (reported by Jon Wright)
- fixed a bunch of info files (reported by Keir E. Novik)

1294
doc/CHANGES4.X Normal file

File diff suppressed because it is too large Load diff

54
doc/README Normal file
View file

@ -0,0 +1,54 @@
This directory contains the following files:
files
What's where.
backup
Recommendations for how to do backups when running a game.
troubleshooting
Some common problems and solutions.
disk_space
Stuff you can delete to make more disk space.
compiling
How to compile the Empire2 server.
configuration
How to turn options on and off, change game parameters, etc...
econfig
Details about the syntax of data/econfig.
bug-reports
What to do if you find a bug.
threads
Dave Pare explains how lwp threads work.
coding
Guidelines for coding style
CHANGES
Revision history for all the changes that were coded in the Empire2
project. A much more readable version of this may be found in
"info History" (brief) or "info Empire2" (detailed).
CHANGES2.3
All changes since revision 2.3
CHANGES3.0
All changes since revision 3.0
CHANGES4.0
All changes since revision 4.0
PRIORITY
things which need to be coded soon.
WISH_LIST
things which maybe should be coded sometime.
WACKY_IDEAS
things which shouldn't be coded except possibly as an option.

171
doc/WACKY_IDEAS Normal file
View file

@ -0,0 +1,171 @@
-=O EMPIRE WACKY IDEAS LIST O=-
This file contains the more bizarre and outlandish proposals for
changing the game of Empire. See the EMPIRE WISH LIST for an
explanation of the indexing system.
_________________________________________________________________
--- TABLE OF CONTENTS ---
Attack, Assault and Board.................a
Missions..................................m
Ships.....................................s
Planes....................................p
Land Units................................l
Commodities and Sectors...................c
Information Commands......................i
Telegrams, Announcements, News............t
Updates...................................u
Deity.....................................d
Miscellanious and Documentation...........x
Error Messages............................e
--- ATTACK, ASSAULT AND BOARD ---
a4
frontline <UNITS>
When a unit is created, it is automatically put on the frontline
(except for artillery and supply units). This means that when you
attack an adjacent sector, you will be asked if you want to include
this unit in the attack.
backline <UNITS>
When a unit is put on a mission, it is automatically put on the
backline. This means that when you attack, you won't be asked about
attacking with this unit. Also, supply units and artillery are born on
the backline. When attacking with units, allow the user to type Y,
rather than typing y for all the units you want to attack with. Y
would mean "attack with all units on the frontline". At the attack
prompt, you will be asked: Attack with infantry #3 (y/n/Y/N/b)? and
the "b" will mean "backline". This would be particularly handy when
attacking with a bunch of units and you want to leave some of them
behind to hold the beach-head. And you want to stop being prompted for
them.
--- SHIPS ---
s9
swap [s|p|l] <UNIT1> <UNIT2>
Swap the id numbers of units so you can control the order in which
they are built. In order to swap the numbers, the units must be in the
same sector, and the sector must be either a h/*/! as appropriate.
WARNING: this could be seriously abused!
s11
nuclear subs consume rads as fuel? need rads to build nuc sub?
s17
in fuel command, one petrol should be worth 20 oil. right now it is
more efficient to fuel ships and units with oil rather than with
petrol.
( in this one, it would probably be better IMHO to get rid of fueling
with oil altogether - Ken H.)
s20
Make assaulting cost ship mobility. This would help stop the ability
to assault with a small amount of mil over and over until
reacting units run out of mobility.
--- PLANES ---
p3
Allow transport planes to paradrop land units. (This would be
realistic.) Would use the following analogy:
Units on Planes Units on Ships
x-light assault
para marine
cargo light
So, "cargo" units could be transported, "x-light" units could paradrop
but at a serious disadvantage and would lose all mob, and "para" units
could paradrop like marines could assault (with full attack and
reduced mob loss).
p8
planes should mobility when loaded and unloaded from a ship.
p12
Have an aquatic plane type. This would be a medium to small cargo
plane, that must be built in an airport but can only take off froma
harbor, or sea sector. While on the water, it could tend, however, not
be able to nav. It might, or might not be able to lay/sweep mines. And
fuel is another issue that would need to be looked into.
p14
perhaps the range a plane can fly should be limited by its efficiency.
--- LAND UNITS ---
l2
trans l <FROMSECT> <TOSECT>
to use sector mobility to transport a land unit from one sector to
another.
l3
Make a new kind of land unit (transport trucks) which can carry land
units in a similar way that ships can carry units. This would allow
you to transport heavy artillery and unmechanized infantry around
faster. (This would be a realistic change).
l5
Have very expensive land units called a spies:
lcm hcm mil guns shells avail tech $
spy 1 10 0 1 0 0 2 0 $2000
spy 2 10 0 1 0 0 2 0 $5000
spy 3 10 0 1 0 0 2 0 $8000
Spies can march through enemy territory and llook in there. Every
update, there will be a chance the spy is caught. Also there is a
chance it will be caught every time it moves in enemy territory and
every time it does an "lloo". It will be completely unaffected by
combat. The chance of detection should be something like: spy 1 10%,
spy 2 5%, spy 3 2%.
l6
land units should lose mob when loaded/unloaded from a ship.
l10
mobile headquarters unit type - capable of repairing land units by
using mobility, supplies, and mil. How about just letting engineers
work on units also?
--- COMMODITIES AND SECTORS ---
c9
Limit the amount of commodities (by weight) allowed to be kept on a
bridge, and have a stacking limit for units on a bridge. (Bridges can
only support so much weight eh?)
c10
build tu
At a price, build a tunnel through a mountain sector. This would turn
a ^ into a + at some great cost.
c12
autodemob 11,11 35 y
"autodemob" is to "demob" what "autonav" is to "nav". The principle is
simple: "autodemob 11,11 35 y" means every update, demob all the mil
in 11,11 except for 35. ( note - makes budget more complex - Oliver
Ricou )
c14
We need some Empire command which lets you do a lot of moving at once
with minimal BTU cost. Here would be one possible syntax: multimove
<ITEM> <SECTS> <THRESHOLD> <DISTSECT> <MINMOB> This is just like
distribute at the update. It would distribute commodities between
<SECTS> and <DISTSECT> depending on <THRESHOLD> (which applies to the
<SECTS>), and only doing moves provided that the mobility doesn't fall
below <MINMOB> in any of the sectors involved: empire [124,512]%
multimove f * ?civ>20 40 1,1 40 An alternate symtax could be:
multimove <ITEM>
where existing distribution thresholds are used.
--- MISCELLANIOUS AND DOCUMENTATION ---
x25
national happiness should be affected by your victories/losses, and if
you drown your mil (by scuttle/scrap) or starv your populace.

208
doc/WISH_LIST Normal file
View file

@ -0,0 +1,208 @@
-=O EMPIRE WISH LIST O=-
This is the complete Empire Wish List. Each item on the wish list has
been given a unique reference number. The reference number does not
indicate priority; it is only there so that we may easily refer to
various items on the list. The reference numbers are permanent, and
any new item added to the wish list in the future will be given a new
unique reference number.
The blank index number at the bottom of each section refers to the
next available index number for that section.
Note that the most radical have been moved out of the EMPIRE WISH LIST
and onto the EMPIRE WACKY IDEAS LIST which shares the same indexing system
as this file.
_________________________________________________________________
--- TABLE OF CONTENTS ---
Attack, Assault and Board.................a
Missions..................................m
Ships.....................................s
Planes....................................p
Land Units................................l
Commodities and Sectors...................c
Information Commands......................i
Telegrams, Announcements, News............t
Updates...................................u
Deity.....................................d
Miscellanious and Documentation...........x
Error Messages............................e
--- ATTACK, ASSAULT AND BOARD ---
a12
aborting an attack should cost you btus or possibly mobility
(otherwise you get info for free).
a13
--- MISSIONS ---
m7
Allow people to specify relation level to trigger different missions
(note there is already space for this in the nation struct).
m8
--- SHIPS ---
s4
For ship/plane/unit specification, allow a/13/b/15/16/c type
specification where fleets, wings, and armies may be included along
with numbers. (WARNING: This would require massive restructuring.)
s13
once ships on sail have arrived at their destination, the "Your fleet
lead by ship #x has reached x,y." in production report every time.
s22
Another suggestion related to s21. The gain in efficiency of planes on
carriers or sufficiently crewed ships on sea should use construction
materials etc. This is to make it consistent with land units gaining
efficiency in a sector where the necessary materials are present.
Otherwise it leads to abuse: Say in the beginning of the game I build
a ship but don't want to spend the hcms to build it completely - so I
just crew it it will gain efficiency by itself. I think it could
easily be implemented by giving every ship some capacity for lcms and
hcm's.
s24
--- PLANES ---
p10
chh [38:382]% scrap p 28,0 ?eff<50
Really scrap all planes in 28,0 [n]? n
The prompt is misleading. (Same goes for scuttle). Scuttle and scrap
should probably be consolidated.
p17
--- LAND UNITS ---
l14
perhaps since land units in mountains are so hard to attack, we shuold
just not let land units into mountains to begin with.
l16
--- COMMODITIES AND SECTORS ---
c8
Change bridges (and towers) so that they only crumble when shelled
below 15%. Allows attackers an extra chance for a bridge attack.
c13
feed <SECTS> <SECT>
If a sector in <SECTS> needs more food, send it food from <SECT>.
c16 - WARNING - may be difficult to code
forts should return fire even if shot missed
c19
--- INFORMATION COMMANDS ---
i5
neweff [s <SHIPS>|p <PLANES>|l <UNITS>] to show the efficiency these
things will have after the update. At present you can only get this
info by doing some heavy calculations.
i10
gstarve <SECTS>
lists sectors that need more food if they want to attain maximum civ
growth.
i12
prod
should list the commodities consumed in f h * ! sectors for building
stuff. (This would help you calculate your production deltas.)
i16
bmap <SECTS> sh
to show enemy ships (that you would see with radar or coastwatch).
i17
bmap <SECTS> sa
to show enemy satellites (that you would see on radar).
i18
dump
should give you the oldown number, rather than just a *. (Does dump
only give you a * if you're not the oldown? I don't know. You can find
the oldown using ?oldown= so dump should give it to you).
i20
radar [<SHIPS> | <SECTS>] S
shows enemy ships but not your own.
i22
cen * ?connect=<SECT>
lists all sectors connected by land to <SECT>. Handy for setting up
territories.
i24
Allow | as well as & in selection syntax. e.g. res * ?des=o|des=g
(WARNING: cannot use single bar as the or character because "|" is
used as a pipe in the standard client and possibly in other clients.
Another character should be used instead ( or maybe "||"?)
i27
--- TELEGRAMS, ANNOUNCEMENTS, NEWS ---
t2
Separate BULLETIN's from Telegrams (so that when we're in the middle
of a fight we will know if we were just attacked or we simply have
just received a letter from a friend).
t9
When you are writing a telegram or an announcement and an update hits,
then your telegram or announcement gets lost. ( is it even POSSIBLE to
fix this?)
t10
--- UPDATES ---
u5
Planes should not be built by conquered populace. (The problem here is
that building planes uses mil, and you can lose the sector because all
your mil that was being used to hold the sector disappeared into the
planes so you loose the sector at the update.) ALREADY FIXED?
u9
--- DEITY ---
d3
Add che (target and number) to deity dump format.
d8
--- MISCELLANIOUS AND DOCUMENTATION ---
x1
Often BTU's aren't updated immediately, and the prompt is out of sync
with the actual amount of BTU's they have.
x6
info takeover, avail, loyalty
There should be man pages on these.
x26
--- ERROR MESSAGES ---
e3
_________________________________________________________________
If you have any comments/additions regarding this list, mail them to
me at wolfpack@wolfpackempire.com with the word "wish" in the subject line.
Wolfpack!
Last updated: January, 1999

14
doc/backups Normal file
View file

@ -0,0 +1,14 @@
It is recommended that you take a backup of the "data" directory once
in a while in case of system crashes, data corruption, or whatever.
It is VERY important to note that you should only take complete snapshots
of the data directory and only restore complete snapshots of the data
directory. Restoring individual files from backups can cause problems.
Some of the known problems with partial restores are:
* In games with MOB_ACCESS enabled, mobility will be extremely out of
sync if you do not do a complete data directory restore.
* Land units, ships and planes may think they are loaded onto ships
or land units that do not exist, or have changed owner (been sunk
or destroyed and then rebuilt) since the last backup.

42
doc/bug-reports Normal file
View file

@ -0,0 +1,42 @@
Reporting Bugs
Code Correctness
What's a bug? Well, if a game program core-dumps under normal
conditions, that's definitely a bug. If a player can manufacture
game items (circumventing the intended game semantics) then
that's a bug too.
If you don't agree about an existing semantic, or you don't like
the format of a particular command output, that's NOT a bug!
If you do have a bug to report, I will only pay attention if
I have a chance of fixing it. Bug reports which vaguely
describe behavior, e.g., "Sometimes when I run the ship
command, it gives me funny output" will be ignored! Bug
reports should include game output, stack traces if possible
(assuming a core dump is produced), and the major, minor, and
patch level of the version you're running.
Once you find a bug, try and reproduce it. If you can't,
then say so. If you can, say that too. If you can't reproduce
it, chances are pretty good that I can't either.
If you have a debugger, try running the offending game
section under your debugger -- preferably gdb -- and try
and locate the area of code responsible.
If you can fix the bug and verify the fix, then you can bet
that I'll be much more interested in your bug report. Response
time is likely to be greater too!
Semantics
If you want to get into a discussion of game semantics, the
best place to do that is rec.games.empire, or your favorite
empire-hackers mailing list. Don't send me a bug report
about it!
Naturally, I hope you don't find any bugs. If you do,
go through the above steps, and mail the resulting output
to us -- wolfpack@wolfpackempire.com

143
doc/coding Normal file
View file

@ -0,0 +1,143 @@
Guidelines for writing Empire code
Remarks from Dave Pare:
And now, a few editorial remarks on my views on Good Techniques for
Modifying Existing Software:
My safari through the hot and bug-ridden jungle that Empire has become
has given me some new insights on the modification of large software
packages. My adventure has prompted me to propose some simple coding
guidelines for those dreaming of hacking on the code:
1) Be invisible. When you make a change, think not about marking your
place in history, or about showing off how much nicer your two-space
tabs are than those old, icky eight-space tabs that the stupid empire
hackers of old used, but think instead about the asethetics of the whole.
The resulting lines of code should flow smoothly from the beginning of the
procedure to the end. Empire is 60,000 lines of code. If you're the
general case, you're only changing fifty lines, so be aware of that.
2) Procedurize. If you find yourself in a triple-nested loop, or a five
hundred line procedure, perhaps it's because you need to split some of
that code off into a procedure. In general, if you've got more than two
levels of tabs (or indentations), or more than one or two major loops in
a procedure, something may well be amiss.
Sasha Mikheev on indentation:
The empire indentation style can be achived by using
indent -orig -i8 foo.c
or in old c-mode emacs (versions before 19.29):
;add this to .emacs
(setq c-indent-level 8)
(setq c-continued-statement-offset 8)
(setq c-argdecl-indent 8)
(setq c-brace-offset -8)
(setq c-label-offset -8)
Further comments by Ken Stevens:
1) Global variables
The only variables which should be global are constants. If you write
a routine which changes a global variable, then you will corrupt the
data when two different players run that routine at the same time.
2) Portability.
The following code:
char a;
#ifdef FOO
unsigned char b;
#endif FOO
Should be rewritten as:
s_char a;
#ifdef FOO
u_char b;
#endif /* FOO */
AIX has different conventions for signed chars, and IRIX requires the
/* comments */ after #endif.
3) Cut-and-Paste
Cut-and-Paste coding is by far the biggest problem that the current
Empire suffers from. This is how cut-and-paste coding happens. Joe
Shmuck decides that he wants to add a new function to the server. So
he goes hunting through the server to find some already existing code
which does something similar to what he wants to do. This is good.
You should always write new code to imitate old code. What is bad is
when Joe Shmuck decides to simply "copy" 200 lines of code from the old
function into his new function, and then just change a couple of
little things here and there to suit his needs. This method, known as
Cut-and-Paste coding is the fastest and easiest way to code. However,
it results in a server that is impossible to maintain. What Joe
_should_ have done, is "move" the 200 lines of code into a new _third_
function which the first two both call. This is called writing a
"general solution" to handle both cases. Most of my work in the
Empire2 project consisted in cleaning up after a bonch of Joe Shmucks.
I took repeated code and "consolidated" it into general function
libraries.
4) Good style.
Just to add to Dave's "Be Invisible" motto, I'd like to give a little
example to illustrate some basic do's and don'ts for coding style:
The following function has bad style:
double att_combat_eff(com,own)
struct combat *com;
natid own;{
double str;
double eff=1.0;
if(com->type==EF_SECTOR)
{
eff=com->eff/100.0;
if(com->own==own){
str=com->sct_dcp->d_ostr;
}else{
str=com->sct_dcp->d_dstr;eff=2.0+(str-2.0)*eff;
}else if(com->type==EF_SHIP&&com->own!=own)
eff=(1.0+com->shp_mcp->m_armor/100.0);
return eff;}
Here is the same function written with "good" style:
double
att_combat_eff(com, own)
struct combat *com;
natid own;
{
double eff = 1.0;
double str;
if (com->type == EF_SECTOR) {
eff = com->eff / 100.0;
if (com->own == own)
str = com->sct_dcp->d_ostr;
else
str = com->sct_dcp->d_dstr;
eff = 2.0 + (str - 2.0) * eff;
} else if (com->type == EF_SHIP && com->own != own)
eff = (1.0 + com->shp_mcp->m_armor / 100.0);
return eff;
}
These are all the things I fixed when changing the bad to the good:
- Function names should always start a new line (so you can search for them)
- There should always be a space after a ","
- Function arguments should be indented 8 spaces
- There should always be a tab after a type declaration
- Opening function bracket should be on a line by itself
- Indentation should be 8 spaces
- There should always be a space on both sides of every operator
- There should always be a space after if, for, while, switch
- The opening bracket should be on the same line as the if
- There should always be a space on either side of a {
- There should always be a new line after a ;
- The closing function bracket should be on a line by itself

42
doc/compiling Normal file
View file

@ -0,0 +1,42 @@
Compiling the Game
Required software:
make
cc
Machine-wise configuration
Determine what kind of machine you're on (sun4, sun3, sequent,
mipsultrix machine, alpha, etc).
Type "make" at the high level, and see if your machine is in the
resulting list.
If it is not, you will need to edit the high-level Makefile and
add support for your architecture in. Send e-mail to:
"wolfpack@wolfpackempire.com"
if you need help doing this.
Constructing Binaries
First, run "make depend" to build the dependencies. You only need
to do this once before the first build. You may run this again if
you make significant changes to the code (including new files, etc.)
Second, Run "make <arch> &" at the top level.
Installing Info Pages
The INFO pages aren't run as a part of the normal make session.
In order to install them, you must cd into the "info" subdirectory,
and run "make". This will nroff all the info documents and place
them in the "../info.nr" directory, from where players can
access them during the game.
You will need perl5 installed as your version of perl for this to
work.
If you add or change any info pages, then be sure to follow
the instructions in info/README to generate new Subjects pages.

23
doc/configuration Normal file
View file

@ -0,0 +1,23 @@
Configuring your Empire server
Every option within the server has been made Run-time configurable.
But, certain things may break if you begin a game and start changing
options. One specific thing you cannot change once you have created
a world is the WORLD_X and WORLD_Y. If you change these values, you
will need to rebuild your world.
Most of the other options you should be able to change on the fly. Of
course, you probably won't want to be changing options in the middle of
a game. But, you should be able to turn them on/off safely. Certain
things might get funny (like if you turn on/off HIDDEN in the middle
of a game for example) but the server should remain stable.
See the "doc/econfig" for a better description of how the Empire config
works, and see the "data/econfig" file for a better description of each
of the configurable settings in the server. (You may also want to
check out the "info.nr/Options" file for more information on individual
options.)
Steve McClure, 1998

12
doc/debugging Normal file
View file

@ -0,0 +1,12 @@
emp_server will only dump core if you run with the -d flag.
If you decide not to dump core, then the most recent player commands
should be listed in data/server.log. Each command will be preceeded
by the country number of the player which issued it. When the player
is prompted, then [prompt] is printed.
If you decide to dump core, then the most recent player commands will
be in the global array called player_commands which is indexed by
player_commands_index. The array will contain strings of the form:
"%3d %3d %s", index, player->cnum, command

15
doc/disk_space Normal file
View file

@ -0,0 +1,15 @@
What can I delete?
If disk space is a concern, then there are a number of files which you can
safely delete without affecting your game.
You can type this immediately:
rm -fr xland old
Once you have compiled your info pages, you can type:
rm -fr info
Once you have compiled your server, you can type:
make clean

141
doc/econfig Normal file
View file

@ -0,0 +1,141 @@
This is a short note on the empire configuration stuff. Some of this
is for deities to enable them to configure things, some of it is for
coders to see how this stuff works.
Julian Onions <j.onions@nexor.co.uk> 15/7/95
--
Also, the Empire config files are now self-documenting (to a point.)
Each option/variable now has a comment associated with it to hopefully
make life easier on deities wanting to change things.
-- Steve McClure, 10/21/1998
--
Deity Notes.
-----------
To find out the current configuration, the simplest method is to
compile up util/pconfig and the run it. It can be run either with no
arguments, in which case it will printout in config format the current
compiled in options. Otherwise with a file containing a configuration
it will first read in this file, and overright any copmiled in
variables and then printout the merged options.
So the first method shows you whats compield in, the 2nd how a config
file would modify this.
Blank lines are ignored, as are lines starting with a # character.
Most of the options are straight forward, they take either a string
(quote using " to get spaces in it) or a number - integer or floating
point depending on the option.
For instance
privname "The Deity"
sets the internal privname variable to that string, and
port "7777"
sets the empire port to 7777.
btu_build_rate 0.0004
sets the internal floating point number for btu building rate,
and so on.
The only other type of variable currently defined are the
options. These may be specified as one or more lines starting
"option" and turned off with the keyword "nooption".
So, for instance
option FUEL ORBIT
and
option FUEL
option ORBIT
are equivalent
To turn off an option that is compiled in, you can similarly have
nooption FUEL
nooption ORBIT
or
nooption FUEL ORBIT
As a check, pconfig will printout some of the internal file names as
comments at the end just to check they are in the right place.
The server can take a -e config file as a command line option so that
it will read a specific config file. If not, it will default to
looking for a file econfig in the built in data directory, but it
won't mind if one is absent. Similarly, util/files and util/fairland
et al all take a -e config file to run from a different config.
Thus, to start two games on the same host, you might have
Game1:
files -e econfig1
fairland -e econfig1
emp_sever -e econfig1
Game2
files -e econfig2
fairland -e econfig2
emp_server -e econfig2
econfig1 might have the lines
data "/empire/data1"
info "/empre/info"
port "7777"
and econfig2 might have the lines
data "/empire/data2"
info "/empre/info"
port "7778"
You only need the lines in that file that you require to override the
compiled in definitions, however having all the definitions may help
you to understand what is on and off. You could do this with
pconfig econfig1 > e1 && mv e1 econfig1
pconfig econfig2 > e2 && mv e2 econfig2
which will fill in all the missing options and values with their defaults.
Coders information
------------------
The simplest way to describe this is to step through how a new option
would be added.
1. Think of the option name, say, "DUMB".
2. In lib/global/options.c define an integer and set it to 1 or 0 as
appropriate. This is usually done as
#ifdef DUMB
int opt_DUMB = 1;
#else
int opt_DUMB = 0;
#endif
3. At the end of that file, add an entry into the table so it is
configurable. This is done with a line like
{ "DUMB", &opt_DUMB },
Make sure the table is still terminated by two NULL values!
4. In h/optlist.h add an external definition of this variable
extern int opt_DUMB;
5. Now the variable is defined, and configurable through the option
keyword in the config file. So you can go ahead and make changes
elsewhere in the code. This normally looks like
if (opt_DUMB) {
pr("You're being dumb\n");
} else {
pr ("You're being really dumb\n");
}
but it may call subroutines, return early from functions or whatever.

33
doc/files Normal file
View file

@ -0,0 +1,33 @@
doc/
Deity Documentation.
man/
Man pages.
scripts/
Scripts to help you run a game.
bin/
data/
info.nr/
Game binaries, data, and compiled info pages.
info/
Nroff source for the Empire info pages.
include/
Empire include files (headers, .h files)
src/doconfig/
Self-compiling and configuring program for building the server.
src/client/
Source code for the Empire client program.
src/server/
src/lib/
Source code for the Empire server.
src/util/
Programs used to generate Empire data files.

16
doc/message Normal file
View file

@ -0,0 +1,16 @@
Hello. You have been identified as a potential author of Empire source
code. We are currently in the process of trying to release the code under
the GPL to protect the code and to allow for it's wide-spread distribution.
We would like to get your comments (either positive or negative) and/or
your approval.
Thanks!
Wolfpack!
Wolfpack! Bringing you the latest and greatest in Empire development and
support, and, in our minds, the best multi-player game around.
Check out Empire at http://www.wolfpackempire.com
wolfpack@wolfpackempire.com

98
doc/pthreads Normal file
View file

@ -0,0 +1,98 @@
Below is Sasha Mikheev's documentation on the pthreads support (POSIX threads)
which is valid on June 7th, 1996 (date of message.) I have changed the
path names only since the tree has changed. Otherwise, the docs are correct.
-- Wolfpack
--- Begin message
Hi,
I have finished documenting pthreads implementation. Pls look at the
results and tell me what can be improved.
Implementation:
Empire now uses its own thread layer. It makes using another
threading library much easier. The interfase is modeled after
the LWP library which is what empire server uses by default.
The interface is specified in the include/empthread.h file. Implementations
should go into src/lib/empthread/xxx.c.
Empire assumes that thread can not be preempted while it is
running. The _only_ places where context switch between threads can
occur are:
empth_sleep(), empth_yield(), empth_select(), empth_sem_wait().
That is in sleep, in waiting for I/O on filedescriptor, semaphore or
voluntary yielding control or exiting. In empire empth_select is
called only on sockets so the context switch can occur only on the
network I/O.
Also each empire thread can have it is own context which is restored
automatically after the context switch. Currently it is used for each
thread to have player specic data. (struct player)
LWP implementation:
Almost nothing has changed there. src/lib/empthread/lwp.c is a very
simple wrapper around the LWP library. The only change is that thread
inherits its flags if they are not explicitly set.
For more details on LWP internals read Dave Pare's description in
doc/threads.
POSIX threaads: (pthreads)
Unlike LWP pthreads are preemtive. The steps must be taken to insure
that thread is preempted only as described above. It is done by
creating a global mutex mtx_ctxsw. At the any given moment only one
thread can be running and have a lock on mtx_ctxsw. Every other thread
is waiting for the mtx_ctxsw to become avaiable. It is done by calling
pthread_mtx_lock(). When thread enters into empth_sleep(),
empth_yield(), empth_exit(), empth_sem_wait() empth_select() it
releases the mutex by calling pthread_mtx_unlock() and thus allowing
other thread to get a lock.
Thread context is implemented by using pthread_getspecific and
pthread_setspecific functions.
Killing other thread is done by setting victim thread state into
EMPTH_KILLED and sending alarm signal to the victim thread. The later
has to be done to wake up a thread waiting on I/O in
empth_select. Then the victim will examine its state and if it is set
to KILLED it will terminate its execution. Unfortunately pthread_kill
seems not to be working/exists in some pthread implementations. But
fortunately empire always does some I/O before doing
empth_terminate().
Semaphores are not available in pthreads thus mutexes and conditional
variables are used to implement them. See the code and or OS design
book for details.
Problems:
On linux with libc 2.1.18 mit pthread library does not wake up a thread upon
the delivery of a signal. Which means that server can not be stopped
short by kill -9 and empth_wakeup() is not working. Fortunately in
current server data are always written to player before the call to
empth_wakeup so players threads will never wait in select forever.
Probably it will be solved when linux libc gets upgraded to latest
pthread library.
In addition installing pthreads on Linux is difficult. By default
linux libc has pthread stubs in but pthread code is disabled. So you
have either recompile libc or grab mit pthreads and install them
manually.
Meanwhile I do not recommend to use pthreads on linux unless you
know what you are doing.
On solaris 2.5 select does not set errno to EINTR when select is broken
by soignal sent by pthread_kill. It doesnt affect anything.
On OSF/1 the older version of pthread is used. It has slightly changed
function semantics. Also it lacks pthread_kill funcion which means
that empth_wakeup() is not working.
Calling pthread_exit() from the main thread crashes the
program. According to the manual program should not exit until all
threads exited.
The workaround is to send main into while(1) { sleep(60); } loop;
--
Sasha Mikheev There is a saying in Cairhienin,
though i have heard it as far away
NetVision Israel, Ltd as Tarabon and Saldaea:
sasha@netvision.net.il
Tel +972-4-8550330 Take what you want and pay for it.
http://aldan.netvision.net.il/~sasha

161
doc/threads Normal file
View file

@ -0,0 +1,161 @@
The game has been threaded. Major changes have occurred.
Emp_update, emp_login, emp_tm, and emp_player have been merged.
Basically, there isn't anything else besides server. It's big.
60,000-lines of code big.
The lib directory now contains nine subdirectories:
common
gen
global
as
player
commands
subs
update
lwp
The main directory contains five (code) directories:
client
lib
server
util
h
The server has seven basic threads:
main:
creates accept, killidle, and update scheduler.
sets signals, opens files.
accept:
opens a socket, binds, listens, and accepts new players.
creates a player thread for each new socket.
player:
negotaties the player's login, and then interprets
the player's game commands.
killidle:
eyeballs the logged-in players every sixty seconds and
closes the connections of those who have been idle for
longer than 15 minutes.
update scheduler:
Sleeps until update is due to go off, then instructs all
player threads currently running commands to abort them.
It waits for a few seconds so that this can occur, and
then creates the update thread, and schedules the next
update. (This scheduler should produce single, accurate
updates instead of double-updates and delayed updates)
update:
The standard update procedure. It runs at high priority
and performs no network i/o, so the game effectively hangs
while the update is in progress.
select:
This thread and its interface provides a mechanism for
other threads to deschedule until either a a file descriptor
is read/write ready, or a particular amount of time has passed.
When the select thread actually runs, the whole process
blocks until the select system call returns. However,
select runs at the lowest possible priority so other
threads get to run to completion before the select gets
executed.
Overall Notes:
Unit and sector files are kept in-core for Your Viewing Pleasure.
(It was actually required in order to merge in emp_update)
This means the server will use significant memory for the larger
games.
Per-player bigmap files have been merged into one EF_MAP file, with
each player getting one record. This is also kept in-core.
Estimated memory cost of a 64-player 256x256 world game with
each player having 100 land units, 100 planes, 100 ships, and
a bigmap comes to a little over eleven megabytes of space,
including the 700k text segment.
the "wai()" command doesn't work yet.
Implementation Notes: My Opportunity to Spout Empire Technical Jargon
Empire is now a miniature operating system, with all that entails.
Threads are not simple to use. I know the threads package
intimately, and I was confused several times -- probably because
the threads interface I provide isn't all that straightforward,
even though it seems like it. Hopefully a second iteration by
someone who knows what they're doing will be better.
I expect this will be much worse for everyone else who hasn't gone
through my experience. Bottom line for all you part-time hackers
out there: don't mess with the current process model, or you'll get
yourself into all kinds of trouble.
Thread scheduling and descheduling happens in the io_input and
io_output calls. The higher level interfaces in the player thread
to these are the getstarg/getstring and pr procedures. If your
process ever has to wait for input or output, it will block, allowing
other threads to run. Those other threads may well modify data
out from under you, so be prepared to have your shared in-memory
constructs (ships, planes, sectors, land units, etc) modified out
from under you whenever you do i/o.
There's a new player global context structure that is shared
amongst all the player threads. When a given thread starts
or restarts, it sets the global player variable to the appropriate
value. Thus, part of the logic of a "context switch" is the setting
of player. If you go and add calls to the lightweight process
system, you *must* be sure to set the player variable as the
io_output and io_input routines do. Otherwise, things will be
extremely confused. (I'm not very happy with this global
variable, but I didn't have the gumption to do anything more)
Most routines that used to return pointers to static space no
longer do so. Instead, you're expected to pass in a buffer which
will be filled up by the routine. This hit a *lot* of routines,
so check the new syntax before using an old and trusted routine
blindly.
Any files that are loaded into core (like the sector, map, nation,
ship, plane, and land unit files) are shared between all the threads.
That's good news. If your thread modifies another player's nat_tgms
field, he'll see it next time through the command loop, without
anyone having to read anything from disk! Furthermore, he'll have
no delay in zeroing out that field, so there won't be the annoying
double telegram reports which were caused by the delay induced by
emp_tm.
Unfortunately, modifications to entries to these mapped files must
be followed by the appropriate "write record" command (like putship,
putnat, etc) or else the changes won't be stored to disk permanently.
Update is the exception to this rule, because it writes all records
to disk using ef_flush when it's done. This is important, since
if and when the players learn how to coredump the server *and* they've
managed to build some object w/o their nation record having been
updated, they essentially get the item without paying for it.
There are two interfaces to the empire file code: the pointer
interface exemplified by np = getnatp(cnum), and the copy interface
shown by getsect(x, y, &sect)/putsect(&sect). Both still work fine.
However, you have to be careful when using the pointer interface
not to change things prematurely, because any changes to the pointer
actually change the data itself -- including putvar, etc. Some
commands use the copy interface now, change some variables, and
then decide to bail out of the command when something goes wrong.
Be careful if you decide to use pointers and then bail out early.
Even if *you* don't write the pointer to disk, other subsequent
activity probably *will*, resulting in a surprise for the players.
Each player thread gets 64k of stack space + more depending on the
size of WORLD_X*WORLD_Y. I hope that's enough. If not, we'll have
to remove the larger stack variables and move them into static space.
Adding new records to core-loaded (EFF_MEM) files is annoying now.
Instead of simply writing out a new record, you have to call
ef_extend(type, count) to enlarge the file by count records.
Additionally, any outstanding pointers you obtained from that
file are now invalid. This command results in a "close/open"
for the file, requiring the entire contents to be read in from
disk again. Luckily, the only instance I saw of this was the
"build" command, and my call to ef_extend does it in groups of
fifty.
Dave

13
doc/troubleshooting Normal file
View file

@ -0,0 +1,13 @@
Here are some of the most common problems with solutions. This file
will probably grow over time.
(Q) I try to log in as POGO, but the server says, "You're not a deity". Why?
(A) If you get a "You're not a deity!" message and logged off, check the
"data/server.log" file and look at the end for a "NON-AUTH" entry.
There should be a "user@host" message in there that failed to log in.
The user and host that your system is using may be different than the
one you put in your build.conf file. So, enter this new user and host
in the auth file, and you should be able to log into the server as a
deity now. Note that if you rebuild the server again, the auth file
will be overwritten.