= vms-empire news

1.21: 2026-04-20::
      Yet more code hardening.
      Documentation fully cobveted to asciidoc.

1.20: 2026-04-16::
       More code hardening.
       Fix for ancient bug: enemy satellites no longer awaken your pieces.

1.19: 2026-03-24::
       Code hardening with ChatGPT 5.2
       Close off a whole bunch of potential buffer overruns.
       Bail out gracefully on failed memory allocations.
       New versioned, field-wise save format with map dimensions recorded.
       Default save file name is now empire.sav.
       Documentation is fully spellchecked.

1.18: 2024-10-03::
	Port changes for GCC 10.

1.17: 2024-02-11::
	Remove unnecessary delays.
	Fix a defective sort in the fame AI.

1.16: 2021-02-25 20:52:1Z
	Minor documentation fixes and code cleanup.

1.15: 2020-01-26 01:20:45Z
	Fix for infinite-fighter-tange bug,
	New 'J' command to show city production in editing mode.
        Rehosted on GitLab.

1.14: 2016-01-05 06:49:17Z
        Add an identifying magic cookie and version to save files.
        Full ANSI prototypes for private functions as well as public.
	Markup fix for probability table.

1.13: 2014-12-14T17:06:26Z
	Comment on entry to and exit from edit mode.
	Cleaned up packaging and install/uninstall productions.

1.12: 2014-05-20T09:03:09Z
	Incorporated Dennis Pinckard's fix for a Mac OS/X port bug.
	Added desktop file.

1.11: 2013-12-31T17:31:04Z
	Clean up code to modern C, apply cppcheck.
	Fix code typo reported as Debian bug #593434

1.10: 2013-08-22T23:47:21Z
	Fix core dump when a satellite bounced off the world edge.
	Full ANSIfication of function prototypes (which fixed the 
	sat bug - the code appears to have been tickling some obscure
	bug in the compilation of function calls with K&R-style prototypes).

1.9: 2012-02-16T22:59:22Z
	Drop RPM packaging. Documentation cleanups.

1.8: 2010-10-21T12:47:33Z
	Joe Wells's patch to enable different-sized worlds.  Minor fixes to
	map functions by Andrew Morrow. More on the history of the game.
	Enable arrow keys in edit mode.
	License changed from Chuck Simmons's cosmetically tweaked clone
	of the GPL to GPL proper, so the classifier systems that forge
	and archive sites use will be less confused.

1.7: 2004-09-27T21:53:41Z
	Documentation fixes.  The old empire.doc file has been replaced
	by the man page.

1.6: 2003-12-29T11:11:53Z
	Source RPMs can be built by non-root user.

1.5: 2003-12-29T11:06:21Z
	Cleanup release with new build machinery.

1.4: 2002-08-01T20:04:09Z
	Packaging tweaks.  RPM spec fixes.  READ.ME broken up into
	READ.ME and NEWS.  Obsolete bug notes removed.  Option -f to
	set savefile added.  I'd like to move the documentation to XML, 
	but can't yet because db2man doesn't render tables.

1.3: 2002-04-19T10:25:43Z
	Walt Stoneburner's cleanup patch addressing all compiler errors and 
	warnings, both in debug and in production mode; works with GCC v3.0.3.

1.2: 2000-07-28T16:04:26Z
	The victory-odds table in previous versions was seriously buggy.
	I folded in corrections from Michael Self.  I also took changes
	from James T. Jordan <kermyt@earthling.net>, who wrote some
	speedups, added ANSI prototypes, and cleaned up code.

1.1: 1995-12-06T14:02:31
	Packaging tweaks.

1.0: 1994-12-01T17:15:43Z
	I colorized and speed-tuned this and added a
	save-interval option. 

The rest of this history is Chuck Simmons's original notes.  Because
there are so many other Empire games out there now (all descended from
this one!), I've reverted to the VMS Empire name.

					-- Eric S. Raymond

History

	Apparently, this game was originally written outside of Digital,
	probably at a university.  The game was ported to DEC's VAX/VMS
	from the TOPS-10/20 FORTRAN sources available around fall 1979.
	Ed James got hold of the sources at Berkeley and converted
	portions of the code to C, mostly to use curses for the screen
	handling.  He published his modified sources on the net in
	December 1986.  Because this game ran on VMS machines for so
        long, a previous version is known as VMS Empire.

	In early 1987 I reverse engineered the program and wrote a
	version completely written in C.  In doing this, I used lots
	of structures and defined constants, and I attempted to make
	the code flexible and easy to modify.  The algorithms used
	in this C version are completely new, the names of the commands
	have been changed to be more mnemonic, and new commands have
	been implemented.  Only the format of the display is the same.
        I suspect that many of my changes are slower and less
        intelligently implemented than the originals.  Also, I have
	not implemented some of the original functionality.
	However, my hope is that the commented C sources I have written
	will prove far easier to modify and enhance than the original
        FORTRAN sources.  If you make changes for the better, by
        all means send Ed James and I a copy.

	The basic game has been heavily modified.  I've changed the
	types of objects built, modified the parameters on others,
	and added lots of new kinds of movement functions.  Read
	the man page for a complete description.

	The file 'bugs' contains lots of ideas for enhancements,
	and describes the bugs I haven't been able to find.

Final Notes

	Unfortunately, I have a rather powerful mainframe at my
	disposal which is somewhere between 10 and 40 times as
	fast as a 68020 based computer.  This means I can afford
	to use extremely inefficient algorithms.  I suspect that
	running this program on a smaller machine, such as a Sun
	workstation or Vax will not be overly rewarding.  In particular,
	the computer will take a very long time to move its pieces,
	and it may not be desirable to save the game after every move.
	(You mean your system doesn't write out 1/2 megabyte files in a
	few milliseconds?)  This second problem is easily fixed, but
	I don't yet have any good ideas for fixing the first problem.

	The size of a saved file can be easily tuned by reducing the
	LIST_SIZE constant in empire.h.  The only current simple tweak
	for making the computer move faster is to reduce the size
	of a map.

Chuck Simmons
amdahl!chuck

Ed James
edjames@ic.berkeley.edu
ucbvax!edjames

	The low-end PCs of 2002 are more powerful than Chuck's 1987 mainframe.
	Performance tuning isn't the issue it once was. :-)

	My changes enable color on machines with terminfo color support, for
	a dramatic improvement in appearance and readability of the display.
	Color support, if present, will be auto-detected at compilation time.

	They also implement and document a `save-interval' option, addressing
	one of the misfeatures noted in the bugs file.

	I've also tweaked the sources so they compile clean under GCC -- they
	assumed the older K&R model of forward reference, causing many warning
	references.

	Finally, I've sped up expand_perimeter by cutting down on the
	number of array references it has to compute. This eliminates several
	multiplies from the inner loop, and is a technique that could be
	applied much more widely in the code.  If efficiency matters that much
	to you, maybe you need to get outside more.

Eric S. Raymond
esr@thyrsus.com
(home page: http://www.catb.org/~esr/)
