2001-12-18 (cap)
----------

- Atlantic theme update, support for comments in config files.
- Multi-player trade updates and bugfixes.

2001-12-17 (cap)
----------

- Trades are no longer limited to two persons.

2001-12-14 (cap)
----------

- Removed --theme argument, theme can now be given as argument for .gn,
  allows clients to choose any game

2001-11-15 (cap)
----------

- Moved a lot of responsibility to Game::addPlayer, makes rest of code
  cleaner and more logical. Fixed updateplayerlist bug from TODO.
- Go to jail no longer uses hardcoded estateId 10.

2001-11-11 (cap)
----------

- Added color and bgColor to estates. Allows clients to build dynamic
  gameboards.
- Bugfix for chance/cc cards that give money.

2001-10-17 (cap)
----------

- Completed isSolvent/pay merge into payMoney (has built in check, returns
  true if payment succeeded or false if it doesn't) and addMoney (always
  true).
- Added compile date of server to version string. Have to figure out a way
  to automatically do this in CVS but not for releases.

2001-10-11 (cap)
----------

- More C code (read: chars) turned into C++ (read: strings), if there's
  going to be both a C and C++ server why not make the C++ one real C++
  instead of hybrid

2001-10-10 (cap)
----------

- API change: can_be_unmortgaged and can_be_mortgaged in estateupdate are
  replaced by can_toggle_mortgage, .m and .u commands have been replaced by
  .em command (toggle estate mortgage)
- Stringified some more stuff
- Added Player::addMoney method for easier cash management, prepared
  payMoney method which will eventually replace isSolvent() and pay()

2001-09-08 (odinhuntr)
----------

- Added sellhouseprice to Estate/initial estateupdate/config file
- Fixed up commandlist sending a little bit
- seems like i did something else too; i forget :p

2001-09-01 (odinhuntr)
----------

- Fixed a segfault bug with trading (forgot some parameters to ioInfo)
- Added a Player::getStatus() method; Player::status() is kind of sloppily
	encapsulated
- Fixed a bunch of unnecessary messages
- Fixed the oddities with passing-go money not being updated right off by
	adding the playerupdate directly into Player::pay().
- Encapsulated a bunch of other IO, too.
- Fixed two jail-related bugs; rolling enabled when paying to leave jail
	and ability to end turn while jailed removed.
- Added some better checking for the commands in the beginning of
	commands.cc.
- Encapsulated EscapeXML() into Player::name() and Game::description().
- Added type="foo" attribute to <estateupdate/>

2001-08-31 (odinhuntr)
----------

- Became the autoconf ninja I so desperatly wanted last night.  conf/
	directory is installed correctly now :p

2001-08-30 (odinhuntr)
----------

- Fixed retarded behavior of escapeXML (strcatting to a newly allocated,
	non-zero-terminated char * is bad)
- Started with some autoconf stuff, but we need an autoconf ninja to get
	the conf directory to $(prefix)/share/conf :p On the up note, one
	can now use the MONOPD_DATA #define as the prefix directory when
	haxoring on the monopd code.

2001-08-29 (odinhuntr)
----------

- Fixed auction crash bug.  I officially hate vectors.

2001-08-28 (odinhuntr)
----------

- Atlantic config file there, really rudimentary theme loading
- Lots of little cleanups

2001-08-17 (odinhuntr)
----------

- escapeXML(string) works

2001-08-10 (odinhuntr)
----------

- Fixed small bug in Estate::canBuyHouses()

2001-08-09 (odinhuntr)
----------

- Let clients know about estate prices and rents on initial estateupdate
  flood
- Fixed & --> | bug, games are playable again
- Fixed Player::status() -> Player::clientStatus() bug, ditto

2001-08-08 (odinhuntr)
----------

- Fixed the trade vector-deletion bug

2001-08-07 (odinhuntr)
----------

- Squashed a bunch of miscellaneous annoying little bugs.

2001-08-06 (cap)
----------

- implemented registerMonopigator()
- many C to C++ changes (libCapsiNetwork CVS or upcoming 0.1.0 is now 
	required!)
- merged client and player classes

2001-08-04 (cap)
----------

- Moved IO functions outside User class (User::io_writegame would now be
  Game::ioWrite).
- Moved User class to Client class

2001-08-02 (cap) (monopd-0.2.0.tar.gz)
----------

- Disconnected players are _not_ deleted from the game anymore but simply
  marked as bankrupt. This fixes some bugs and is a first step to add
  support for clients to reconnect and continue.
- Made many of the setBla() and bla() methods inlined.
- Many, many if (player->user()) checks. Moved merging of player and user
  class up to first TODO item for 0.3 (I will also redo IO stuff then by
  taking it out of the User class).
- Updated version to 0.2, prepping for release.

2001-07-31 (cap)
----------

- Removed Auction::m_ready, it was not really necessary and broke token
  movement timeouts since setReady was never set there. Instead, the event
  is created upon the first bid instead of the creation of the auction.

2001-07-31 (odinhuntr)
----------

- Added Game::estateUpdate(Estate *), sends a full estateupdate of
  the given estate and all estates in the same group to all players.
- Added <display/>, fixed bankruptcy thing (i hope).
- Working on bug list.
- AUCTIONS DONE.
- Auction fixups, *JAIL BUG SQUASHED*, some other stuff that I forget :p

2001-07-30 (odinhuntr)
----------

- Implemented most of auction system.  Still to do:  pause game during
  auction, allow bidding, handle what happens when nobody bids.

2001-07-30 (cap)
----------

- bugfix: "Advance to.." cards land player on estate
- bugfix: Timeout events land player on estate, timeouts re-enabled
- bugfix: Removing timeout event from vector when all token movements are
  already confirmed.
- bugfix: mortgaging/selling houses possible when there's a debt to settle
- bugfix: turns ends after bankrupty, even when player had doubles

2001-07-29 (odinhuntr)
----------

- API written.  God, I hate documentation.

2001-07-28 (cap)
----------

- Disabled token movement timeout as long as it's broken

2001-07-28 (odinhuntr)
----------

- XML fixes (tradeupdates not sending tradeids, reversed logic for deciding 
  which playerid to send for a player element of a tradeupdate)

2001-07-27 (odinhuntr)
----------

- Fixed annoying bug where tradeupdate accept toggles would lie about 
  which playerid was toggling (three args given to four printf args
  expected is Bad Juju (tm))
  
2001-07-26 (odinhuntr)
----------

- Changed to can_buy_houses and can_sell_houses.
- Send house price on initial estatelist, <estateupdate houseprice="150"/>.

2001-07-26 (odinhuntr)
----------

- Added a can_be_improved attribute to estateupdate, stuck it in where 
  appropriate, added Estate::canBeImproved(player *).

2001-07-24 (cap)
----------

- Keeping EstateVec pointer of Game in Estate class, moved estate related
  methods (groupSize, min/maxHouses etc) to Estate class
- Keeping User parent pointer in Player class
- Attributes changes in estateupdate allowing more lazy client updates:
  can_be_owned (replaces ownable)
  can_be_mortgaged (new)
  can_be_unmortgaged (new)
- *Major* variable cleanup/naming conventions
- updateplayerlist now supports type=del and has full support for attribute
  master

2001-07-19 (cap)
----------

- Updated trading XML as discussed on list.
  <tradeupdate type="new|edit|accepted|completed" tradeid="tradeid" 
	actor="playerid">
  Types new and edit can contain:
  <player playerid="playerid" accept="1|0" money="int"/>
  <estate estateid="estateid" included="1|0"/>
  When all accept, we send type accepted, the necessary estate/playerupdates
  and then type completed.

2001-07-18 (odinhuntr)
----------

- Added <tradeupdate type="completed"/> and deallocated trade upon success

2001-07-15 (odinhuntr)
----------

- Changed .Tc$1 to .Tr$1 'cause that's what was in the TODO :p
- Finished off player checks for trading

2001-07-15 (odinhuntr)
----------

-Trading!

 .Tn$1: trade with player $1
 .Te$1/$2: add estate $2 to trade with id $1
 .Tm$1/$2: offer $2 money to trade with id $1
 .Tc$1: cancel trade $1
 .Ta$1: accept trade $1

<tradeupdate tradeid="0" playerid="1" type="add|del|money|new" estateid="2" 
              value"3" accept="4"/>
 tradeid is the trade's internal ID tag.
 playerid is the player making the change.
 estateid is the estate for trade.
 accept is 1 or 0, depending on whether the player has accepted the 
  most recent tradeupdate. (this is reset upon any change, the player 
  must re-accept if anything is changed.)  .Ta$1 toggles this.
 type:
  add: add an estate.
  del: delete and estate.
  new: this is a new trade.
  money: player is offering an amount of money specified by 'value.'
 
- Jailcards not added yet.

2001-07-13 (cap, Friday the 13th commits)
----------

- cloned maxHouses to minHouses, even build rule now effective for both
  building and selling houses/hotels
- various cleanups
- encapsulated newTurn into Game class
- token movement timeouts working, after timeout server sends playerupdate
  towards final location with directmove=1. Clients should act upon this
  immediately and should notice themselves and cancel whatever animation they
  were displaying
- added jailed, chancejailcard and chestjailcard attributes to 
	<playerupdate>, values 1 and 0
- cleaned up API, newClass/delClass create and delete instance,
  addClass/removeClass only manipulate existing pointers

2001-07-12 (cap)
----------

- updated documentation
- event loop should be more stable now
- added command .Te#:# to toggle estates within a trade
- better implementation of vector deletes, other cleanups

2001-07-11 (odinhuntr)
----------

- fixed tax bug (luxury tax taxed an uninitialized value)
- added minimum house requirement on same-color estates

2001-07-08 (cap, live from LinuxTag)
----------

- most commands disabled during token movement
- tax $200 _or_ 10% preparations
- prepared class and some commands for trades

2001-07-06 (cap, live from LinuxTag)
----------

- Some bugfixes (checking for NULL u->game entries, moving generic checks
  towards the command parser)
- Implemented generic event system.
- Min/max players configuration.

2001-07-01 (cap)
----------

- Implemented generic event system.
- Min/max players configuration.

2001-07-01 (cap)
----------

- API changes: .c  -> .jc
               .pj -> .jp
               .r  -> .jr (normal roll can no longer be used to leave jail)
               .bh -> .hb
               .s  -> .hs
- Completed bankrupty actions (selling houses, transferring properties, etc)

2001-06-29 (cap)
----------

- Chance/CC out of jail cards are removed from pile when player receives
  them and are returned to pile when player uses them.
- Player no longer goes bankrupt automatically when unable to pay debt. 
  Player has opportunity to settle debt first (mortgaging, selling houses)
  and then pay off the debt collector with .po or to declare bankrupty
  manually.
- Leaving jail command change to .pj
- Sending some more info on startgame which should clean up client displays
  for property ownerships (they need to support it anyway, in case a
  property get sold)
- Tweaked many info messages.
- Correct calculation of rent after chance/cc cards which say "pay double
  rent / pay ten times rent".

2001-06-26 (cap)
----------

- Bugfixes.
- New command to declare bankrupty: .D, sends playerupdate with bankrupt="1"
  attribute and is automatically called when player is in debt while not
  solvent.

2001-06-24 (cap)
----------

- All chance/cc cards are now supported except advance to next util/RR!
- Houses/hotels can be sold back to the bank with command .s# (where # is 
	estateid)

2001-06-21 (cap)
----------

- Added mortgaged attribute to estateupdate. Clients can now actually parse
  results of (un)mortgage commands .m and .u!

2001-06-20 (cap)
----------

- Bugfix: unset PLAYER_CANROLL when sending to jail
- Collected Player modifications for jailing into Player::toJail()
- Buying houses is supported! Added atrribute houses to <estateupdate>,
  changed .b to .be (buy estate) and added .bh (buy house, argument
  estateid))
- Rolling not possible when clients are still moving
- No extra turn when leaving jail after doubles
- Mortgaged estates no longer collect rent
- Mortgaged estates do not counted as owned: no building or rent doubling
  for groupmates.
- Bugfix: buildings require all properties to be unmortaged, rent
  calculation is _not_ affected (except for mortgaged estate itself).

2001-06-19 (cap)
----------

- Changed game name into description (makes more sense) and issued seperate
  command for it (.gd) so the master can change the description.
- Prepared some stuff for Chance/CC jailcards.

2001-06-19 (odinhuntr)
----------

- Fixed a segfault (checking u->game->status without checking u->game isn't 
  null)
- Added game names, use .gnGamename, returns <game id=moo name=Cool
  players=moo/>
  
2001-06-19 (cap)
----------

- Some bugfixes regarding throwing doubles
- Clients get a unique client ID in welcome message <client clientid="1"/>
- <updateplayerlist> now sends full info (clientid, name, host)
- Added destination enum (toUser, toGame, toAll) for User::io_info and
  User::io_error
- Even more messages turned into XML including playerupdate ((un)mortgages).
- Chance and Community Chest cards that give or take static amounts of money
  are working! And so are the pay per house/hotel ones!

2001-06-18 (cap)
----------

- Bugfix: double count must be reset after being sent to jail.
- Added Player::solvent() function to seperate money checking from
  Player::pay()
- B & O Railroad -> B &amp; O Railroad. Change is currently in config file,
  I guess we should transform it ourselves before sending as XML?

2001-06-17 (cap)
----------

- Set version to pre-0.2.0

2001-06-17 (cap) (monopd-0.1.0.tar.gz)
----------

- Happy birthday Katy. Love, Rob.
- Changed estateupdate: id is now estateid, new attribute name (for init).
- Cleaned up code here and there.
- Changed intro string into XML and prepared it for clientid/connection
  cookie.
- Playerid's are 0-indexed now (or should be).
- Joinedgame no longer contains playerid attribute: client message can
  contain playerid, so that clients know their own playerid.
- When master leaves, next player becomes master.
- Added type=edit for updategamelist to edit a current item.
- Playerlist message is now updateplayerlist: types are "full", "add", "del"
  and "edit", just like updategamelist. Final attribute no longer exists.
- Set version to 0.1.0, packaged snapshot.

2001-06-16 (cap)
----------

- Added group definition for estates and rent is doubled when all
  properties of a group are owned but without houses.
- player shuffle (temporarily) disabled.
- Added directmove=1 for landing on 'to jail' message.
- Added playerupdate after paying rent.
- Bugfix: token movement confirmation is ignored when server doesn't expect
  it.
- Bugfix: passing Go gives 200 again (I pretended it did with the token
  confirmation code, but never actually gave it!).

2001-06-15 (odinhuntr)
----------

- Changed rest of messages to XML format
- Added vsprintf functionality to User::io_*
- Changed uses of said functions to use the new functionality when possible
- Fixed some spelling :p
- Added a User::io_info() (like io_error())

2001-06-14 (odinhuntr, merged into HEAD branch by cap)
----------

- Added ".d" for disconnect client->server
- Changed most barewords errors to XML messages. Gotta add vsprintf()
  functionality to User::io_*.

Note: I (cap) did not merge in the disconnect changes, I would like further
discussion on implementation first. Furthermore, since you probably have
files from both branches mixed out, please backup your changes and do a
clean checkout so your next commits builds on current tree and goes into 1.x
instead of 1.1.1.x ?

2001-06-11
----------

- Imported monopd to Sourceforge CVS. Hurrah.
- Added playerid attribute to <msg type="chat"/>, author attribute is kept
  for backwards compatibility.

2001-06-10
----------

- Only master can start game, master=1|0 attribute added to playerlist.
- Correct rent on utilities (value of dice now stored in Game class).
- Tax estates functional.
- Player leaves jail on doubles.

2001-06-10 (monopd-snapshot-2001-06-10-0251.tar.gz)
----------

- Bugfix: added missing newline after </monopd> when landing Free
  Parking and Go To Jail.
- Bugfix: passing Go should not mark clients as non-moving
- Bugfix: removed protocol breaking newline after "thrown into jail".

2001-06-05
----------

- Added reference to gtkmonop in README
- directmove=1 added to ToJail estate playerupdate
- playerlist final=1|0 instead of true|false

2001-06-05 (monopd-snapshot-2001-06-05-0510.tar.gz)
----------

- Added chat function. Commands still all start with . so anything that
  doesn't is a chat message. Server sends: <msg type="chat"
  author="playername" value="chatmsg"/>
- Removed "end of turn" non-XML message, it's no longer necessary because of
  the <newturn> message.
- Community chest and chance cards are read from config file and printed to
  client. However, the cards do not actually work yet.
- Players are shuffled upon game start.
- Lots of internal changes for Estate. Should not affect behavior much
- Playerupdate now uses playerid as attribute instead of id.


2001-06-01 (monopd-snapshot-2001-06-01-0302.tar.gz)
----------

- Added <movetoken> XML message, which replaces playerupdate for
  token movements. (but not for updates in money, name and other none
  animated stuff)
- Added .t command for clients to acknowledge token movements. Clients now
  *must* confirm the new location of their token after each
  animation/update, so that the server can send the appropriate messages
  "Passed Go, +200" at the right time.
- Added <msg type="standby"> message type, which is used to inform clients
  that the server is waiting for other clients to finish display updates
  before continuing to send info.

2001-05-27 (monopd-snapshot-2001-05-27-0342.tar.gz)
----------

- Added joinedgame XML message, informs clients of playerid.
- Added newturn XML message, informs clients of playerid with turn.

2001-05-08 (monopd-snapshot-2001-05-09-0446.tar.gz)
----------

- Many more messages turned into XML.
- Playerupdate sent after purchase as well.
- Bugfix: moved user deletion away from cmd_outro and into socket_handler

2001-05-08 (monopd-snapshot-2001-05-08-0317.tar.gz)
----------

- Confirmation for setting name is now XML.
- Confirmation/denial for joining and creating game is now XML.
- Bugfix for segmentation fault in .gs command while game pointer was NULL.
- Upon starting a game, "playerupdate" commands are sent.
- Players get unique id (valid within game).
- Dice result message is now XML.

2001-05-07 (monopd-snapshot-2001-05-07-0313.tar.gz)
----------

- Playerlist now includes final boolean ("true" or "false"). This aids
  clients, because they might need to take different actions, for example
  KMonop needs to update a Listview during config but create portfolio
  widgets once the playerlist is final.
- Playerlist (final) is automatically sent when game is started.

2001-05-03 (monopd-snapshot-2001-05-03-0422.tar.gz)
----------

- Bugfix: segmentation fault when deleting a user with a NULL pointer as
  game.

2001-05-03 (monopd-snapshot-2001-05-03-0123.tar.gz)
----------

- Playerlist is now broadcasted to all players.
- Added player hostname to playerlist.
  (monopd now requires libcapsi_network-snapshot-2001-05-03-0123.tar.gz)

2001-05-02 (monopd-snapshot-2001-05-02-0351.tar.gz)
----------

- Added command to list players in game, .gp
- Bugfix: when user gets deleted, it also removes player from game and
  deletes game is no more players are in it.

2001-04-28
----------

- API decision: messages are seperated by newlines. Syntax within a message
  is yet unspecified, although it will probably use a subset of XML.
- gamelist is printed in tiny XML.

2001-03-12
----------

- turn-based game, .r only allowed on players turn [Milestone I bugfix]
- complete redesign of user, game, player and ownership relations
- seperate class for estate entities, names and prices from file
- to_jail property for estates
- buying properties and collecting rent are supported in the game, however
  there are no commands in the API yet to buy properties. unowned properties
  are automatically bought at the moment.
- game requires >=2 players

2001-03-07
----------

- Simple server with very limited capabilities:
- creating a game
- joining a game not yet in progress
- starting a game
