add missing <algorithm> header to util.hpp
fix indentation of macros in lobby_main.cfg
add GUI tag list for Vim syntax highlighting
delete deprecated NDEBUG flag from VC project
Add single unit instance recall_costs

Add the variables, lua, and wml support variables to allow a scenario
designer the ability to define different from the standard recall costs
or team recall costs for both individual units and unit types.
from least to highest order of precendent we'll have default, team/side,
unit_type, and finally individual units.

The tag in the scenarios and in the unit config files is recall_cost=int.
recognize server messages to set a side to idle
fix bug #21758

in the refactor of mp_connect, one behavior from 1.10 that was
lost was that the host may not start a game until all sides have
chosen faction. we restore this, adding fields to the side engine
to fix in a robust manner, some debugging capabilities left over.
fixup party full bell

after fix of bug #21578, the behavior from 1.10, in which game may not
start until all sides have chosen factions as needed, was restored.
we move the party full bell appropriately.
fix bug #18829

it turns out that when the "network_ai" controller type was introduced,
it was implemented on the server in the following way:

https://github.com/wesnoth/wesnoth/blob/a4f47a63c7b2c55fd7d8d3cd425ede256b39acdd/src/server/game.cpp#L464

change_controller requests to the type "ai" are always transformed
by the server into either "human_ai" for host or "network_ai" for client,
and in thunderstruck's refactor of the mp_connect dialogs, ai sides are
always set to "ai" in the WML sent to the server (and set this way on
the host).

however, because of code in play_campaign.cpp which long predated this
refactor, all sides on an mp client are either set to human (if that
player controls them) or "network", or "null".

this causes problems because if that player saves the game, the savegame
will record these sides at human controlled rather than ai controlled...
if the game is reloaded oos can occur, although I won't detail it here.

we update the play_campaign.cpp code to ensure that "ai" controller types
always resolve to human_ai or network_ai as appropriate. additionally,
we make sure that on the host, sides always resolve to human_ai rather
than ai. so the type "ai" should never be observed during an mp game,
and only during scenario configuration, and perhaps during replays.

additionally, we ensure in playturn.cpp that if the client gets a message
from the server to set a side to "ai" during the game, it will in fact
set it to "human_ai" or "network_ai", to preserve the invariant.

finally we also switch over observers to follow this behavior --
previously there was a hack here in the server which would make sure
that any observers which join see all sides as controlled by "human"

https://github.com/wesnoth/wesnoth/blob/a4f47a63c7b2c55fd7d8d3cd425ede256b39acdd/src/server/game.cpp#L197

in order that they do not attempt to substitute themselves for a player.

we change this by removing the hack, and programming the client to remember
if the player is an observer, and if so not attempting to substitute themself
at game start.
don't display network_ai sides as replacements for dropped sides

after 18829 fix, don't display "network_ai" sides as possible
controllers for a dropped side, as all ai sides now have this value.
don't show network_ai controllers in :give_control dialog
add debugging output to server
implement "last 5 chats" notification properly

(fixup 6d460b98271312f806fadfa037b7ea082e862a24)

proper code to find 5'th \n is:

		int endl_pos = -1;
		for (int ctr = 0; ctr < 5; ctr++)
			endl_pos = i->message.find('\n', endl_pos+1);

and not

		int endl_pos = 0;
		for (int ctr = 0; ctr < 5; ctr++)
			endl_pos = i->message.find('\n', endl_pos);
Merge branch 'server_set_to_idle'
Remove unused ucs2_string. If we want a utf16 type, it should be named for that
Merge pull request #118 from aquileia/new-branch

minor fixes
Implement unit instance recall costs.

Actually allows for the unit instance recall costs to be used. Proper
taking of the gold and undoing the cost for each unit is implemented
and works.  At advancement if the unit's current recall matches their
unit_type's recall_cost then it takes the new unit_type's recall_cost
otherwise it keeps whatever value it currently has until it fails this
check.  Recall costs are also now persistant and will carry over from
one scenario into the next as well.

If a cost is not set, it will continue to use the team/side/default
costs, these changes should not affect the current workings when
dealing with unaltered scenarios, and unit config files.  I repeat This
will not affect or change the currently way things work UNLESS a user
alters a file or includes the new recall_cost (as in copies and
modifies a unit in the scenario unit files) for a unit instance in
their scenario file(s).
Show unit instance recall cost in Recall dialog

Show in the recall dialog below the unit type the recall cost of
that unit.  The costs are also colour coded, red for more then the
team/side recall_cost, white for same as team recall_cost and
finally green for below team recall_cost.  It also alters the not
enough gold message from "you must have X gold to recall a unit." to
"you must have X gold to recall this unit."  There is some new
comparisions to make this all work.  The header for one function
(recall_dialog) has had a const of the team.recall_cost passed to it to
allow for the comparisions more easy to do in that function.

There is room for improvement here, perhaps removing the costs display
if no unit has a recall cost that differs from the others.
Single unit instances work with whiteboard.

Here the changes to get whiteboard to work are mostly cosmetic, the
right cost for each unit is displayed on the unit in question.  This
is mostly for peace of mind as the user looks at the screen they don't
get confused.  The proper gold is also taken for each recall and
replaced for each canceled/undone recall while in whiteboard.
Patrol Micro AI: fix bug in the attack part of this MAI

This was an oversight dating back to the introduction of the [filter]
tag as a possible parameter to this Micro AI.  A part of the attack
code still relied on the id= key being given, although that key is not
required any more now.