PROJECTS ... list of things to do or fix, and hints for developers.

#	$Id: PROJECTS,v 1.80 2000/06/27 22:09:28 cameron Exp $	

Small things

	- practice robots fail to shoot torpedoes if created while server 
          is in topgun mode.

	- make clean in ntserv doesn't.

	- configure's "checking for BSD style signals" doesn't finish
	  with a yes or a no.

	- quitting as captain in INL game should automatically uncaptain.

	- observers can't quit at end-game.

	- t-mode should be turned off immediately at end-game before
	  end-tourney is run, not after.

	- end-tourney should really be tossed.  stats should be
	  computed in-memory by the robot rather than relying on
	  an external script to parse the output of ltd_dump.  it's
	  way too slow.

	- team masks are switched at the end of an INL game.  is
	  there any particular reason why we're doing this?

	- all the code in the robots/ directory really need some
	  serious cleanup.  the whole thing is a mess.

	- manually check dependencies in ntserv, an installer found
	  that a defs.h change was not picked up by at least one thing
	  therein, and so a make clean was required.

	- if installer changes config.h.in and then config.h manually,
	  running make causes configure to be re-run but without the
	  appropriate --prefix, thus building for the wrong place.

	- add IP addresses, port numbers, and byte counters to
	  struct.h for player so we can dump them in tools/players.c;
	  and also to enhance "whois".

	- accumulate byte counters server wide for bandwidth accounting.

	- mark's changes, if p_y or p_x = 100000, ship oscillates
	  [mark hasn't come back to me on that, it awaits him]

	- inl confine doesn't knock ships out of orbit, ships may
	  remain outside their confined zone.

	- configure script, add recognition of --with-inl, and thus
	  define all the appropriate defines that INSTALL.INL says we
	  have to do, change PKEY too.

	- configure to set CONFIRM=1 if it finds res-rsa, and Makefile
	  to recommend the execution of updated at least once.

	- xsg Makefile (and others perhaps) compile
	  "../ntserv/getpath.c" saving the object file into the xsg
	  directory, and then promptly use the object files from the
	  ntserv directory, regardless of whether they are built yet.
	  Need to change it to either use the local copy (and thus waste
	  compile time), or nest into the ntserv Makefile.

	- integrate robotd sources into Vanilla build,

	- lock navigation move to daemon from ntserv, problems are evident
	  with transwarp and planetary locks at low update rates.  Do
	  navigation recalculations at daemon update rate (10u/s).

	- god's text client, displays messages to god and all, and allows
	  entry of replies from god, showgalaxy with more messages visible.

	- pledit should be able to edit entries in place online.

	- add command to allow players to change their password.
	  "password newpassword", followed by "confirm newpassword".

	- From Dave Swasey: Writes to ERRORS should be timestamped.  At least
	  timestamp daemon startup and death (exitDaemon, etc) messages.
	  Timestamps would have helped me determine which messages in ERRORS
	  matter.

	- special compile mode for lesser lights trying to build an INL server
	  that avoids trying to compile xsg or pledit, and perhaps a few other
	  things, suggested by Tom Holub [VANILLA-LIST:2566]

	- observers, allow them to have a ship of their own that is ineffective
	  and invisible to others.

	- compile with -Wall and fix the problems.
	  [done ntserv, quozl@us.netrek.org]
	  [big set of prototypes missing in tools/cambot.c, quozl]

	- switching into or out of no-geno timer hours on continuum resets quit
	  timeout, perhaps due to repeat of RSA verification.

	- jammed slots on other teams?  Can they be ejected?

	- practice robots drop shields as soon as you die, thus taking torps
	  in flight on hull.

	- revisit syntax of .metaservers file to aid understanding,

	- change metaserver solicitation to process multiple IP addresses from
	  each DNS host name given, just like new COW metaserver code.
	  [coding in progress by cameron@stl.dec.com]
	  
	- there is no way to tell the difference between a busted client and
	  the player simply walking off.

	- need generic shared memory dump tool to assist diagnosis.

	- update t-mode messages, they are outdated.

	- starbase etemp bug, still shows up, engine cooling rate reduced,
	  warp 2 gives stable etemp, under those conditions it should drop
	  slowly at warp 2,

	- "make rmdependencies" breaks because res-rsa does not have such a
	  target.  Should it?

Bigger things

	- netrekd is now restartable without affecting play, but it would be
	  suitably cool if daemon could also be restarted.  Could also do with
	  a check for change to the shared memory size.

	- connections made immediately after a genocide/conquer seem to stall
	  for up to a minute, happens on continuum and has been confirmed by
	  numerous players,

	- proposed client metaserver window solicitation UDP protocol, to fill
	  out a column of ping times to the server from the client,
	
	- slots that timeout during login or outfit (resurrect) should be moved
	  back onto the wait queue (at end or start?) and their slot given to
	  the current head of queue player.  May require client changes.
	  [ref findslot() in cow, c/- carlos - quozl]

	- observers do not see tractors and pressors ... fault of protocol,
	  according to Trent Piepho (xyzzy@u.washington.edu)

Large things

        - Observer system is screwed up.  Needs major re-write.  Items
          of note:

		Observer state is not consistent. Observer state is
                held in p_status, which is overloaded with death,
                life, free, robot states. Every once in a while,
		p_status gets assigned something other than POBSERV.

		stats collection drop-outs for observers, free slots
                and robots not consistent. Stats for observers and
                robots and free slots should not be collected, but for
                some cases they are.

                save() is still called for observers. it shouldn't

                multiple observer state variables. ntserv keeps a
                global Observer.  p_status in shmem is the other.

          Propose removing POBSERV from p_status and Observer ntserv
          global variable ad add p_type to player struct.  Avoids
          overloading a variable.  Example states could be PTPLAYER,
          PTOBSERVER, PTROBOT and PTPRACTICE.  Whenever a slot changes
          modes, save the slot (if appropriate) and re-read stats from
          .players anew as if a fresh login occured but without the
          slot assignment (which would require a client upgrade).

          Cleaning up the observer code is a prerequisite for
          obs<->player switching and non-contiguous INL slot PROJECT
          entries.  First crack at it assigned to Carlos V.


INL robot issues following testing with Tom Holub

	- port 2592 "sorry you can't play now" message needs to be nicer [low]
	  [perhaps make them appear to be on an infinite queue and give them
	  a motd that explains the situation]

	- make GAMETIME response two lines if team name too long [low]

	- future: revamp stats DB to hold stats instead of post-processing
	  [low] [done -dka]

	- observer can change teams?

	- post game inl core dump, had to restart from .sysdef

	- force known team name for REGISTER

	- INL robot entry voted in from pickup, do not do odds/evens swapping,
	  keep old teams if possible, the league does not need 0-7
	  pre-allocation of slots to teams,


Prioritisation Mail from Tom

Message-Id: <19990204210412.A7633@shell3.ba.best.com>
Date: Thu, 4 Feb 1999 21:04:12 -0800
From: Tom Holub <doosh@best.com>
To: vanilla-l@us.netrek.org
Subject: [VANILLA-L:1340] Notes on INL Robot

[... completed items removed ...]

3) Would Be Nice This Season

* Fix "gametime" message to be 2 lines if names are too long
* Message on port 2592 is friendlier

4) Long Term

* Have server save and generate statistics on its own
[this is done at this point.  -dka]

[end of message]



Fault report ... sending PAUSE then CONTINUE as a captain causes a superfluous
countdown which does nothing.  INL robot.

Source Editing Hints

	# hints using GNU Emacs
	bind "meta-x compile" to a key
	use "control-x `" to move to next error in compilation results window
	use "control-x v v" to commit one file if required
	use "control-x 4 a" while positioned in changed source to fix ChangeLog
	use "control-x v =" to produce a diff on that file vs CVS
	use "etags *.c *.h" to build a tag list of variable names
	use "meta-." to find a definition of a variable or function

Release Procedure

	# assumes csh or tcsh
	# be in your local copy of the CVS repository
	cd Vanilla

	# set variables to ease the rest of this ...
	set VS=2.9pl6
	set VL=v_2_9_6

	# make sure you have committed all changes
	cvs -z9 diff -u > tmp.tmp
	# review uncommitted changes
	more tmp.tmp
	# commit changes
	cvs -z9 commit

	# tag the release
	cvs -z9 tag $VL
	cvs -z9 tag -F v_release

	# export the tagged release to a new directory and tar
	cd ..
	setenv CVSROOT :pserver:cameron@cvs.us.netrek.org:/home/netrek/cvsroot
	cvs -z9 export -d Vanilla-$VS -r $VL Vanilla
	tar cvf Vanilla-$VS.tar Vanilla-$VS
	gzip -9v Vanilla-$VS.tar

	# record md5sum of kit for publishing
	md5sum Vanilla-$VS.tar.gz > Vanilla-$VS.tar.gz.md5sum

	# test build kit
	cd Vanilla-$VS

	mkdir /tmp/$VS
	./configure --prefix=/tmp/$VS

	# test install kit
	make install
	cd /tmp/$VS
	./netrekd

	# test client
	cow -h localhost

	# clean up
	rm -rf /tmp/$VS
	rm -rf Vanilla-$VS

	# rpm packaging
	cd Vanilla
	rpm/tar2rpm
	cp res-rsa-*.tar.gz /usr/src/redhat/SOURCES
	rpm -ba netrek.spec
	# test package install

	# send .tar.gz and .rpm to ftp sites
	ftp://ftp.netrek.org/pub/netrek/incoming/ (note 15 second login timer)
	ftp://ftp.real-time.com/pub/Incoming/
	
	# notify mirror owners, include URL of incoming copy and md5sum.
	mailto:vanilla-list@us.netrek.org

	# build differences between this version and previous

	# update web page
	http://vanilla.us.netrek.org/index.html
	setenv CVSROOT :pserver:cameron@cvs.us.netrek.org:/home/netrek/cvsroot
	cvs checkout web [or] cvs update
	# review differences and generate short change list in index.html
	cvs commit

	# await mirror completion
	# notify others
	mailto:vanilla-announce@us.netrek.org
	news:rec.games.netrek

	# update version number, patchlevel.h, version.h, rpm/netrek.spec, rpm/tar2rpm here
	

INL robot problems reported by d4sand,

	- no RESERVE command present,
	- robot did not see genocide, (fix daemon to not reset galaxy
	  on a genocide or conquer),  (possible fix, Villalpando 1999-jun)
	- could not rejoin after genocide/conquer, (fix daemon to use
	  non-final why-dead flag),  (possible fix, Villalpando 1999-jun)

INL robot problems reported by ahn@netrek.org

	- at the end of an INL game, any player stats accumulated from
	  his last death until end-game can be lost.  the reason is
	  that player stats are saved only when he dies or ghostbusts.
	  since end_tourney and other stat processing is done before
	  the player slot is saved, the reported stats will be
	  incorrect.  for example, if a starbase does not die before
	  end-game, the stats will show that the starbase wasn't even
	  in the game.
	  (possible fix made by Carlos; it seems to work properly, but
	  we'll wait on more testing to be sure.  -dka)

INL observations by quozl@us.netrek.org

	- need a captain command to bring an obs in as a player, and vice versa

