<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thunderstruck</id>
	<title>The Battle for Wesnoth Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thunderstruck"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/Special:Contributions/Thunderstruck"/>
	<updated>2026-05-16T15:13:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=55290</id>
		<title>SideWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=55290"/>
		<updated>2014-07-01T21:02:45Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: /* the [side] tag */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the [side] tag ==&lt;br /&gt;
&lt;br /&gt;
The [side] tag is used to describe a side in a particular scenario.&lt;br /&gt;
&lt;br /&gt;
The following keys are recognized:&lt;br /&gt;
&lt;br /&gt;
* '''side''': a number. The leader of this side is placed on the tile represented by this number (see [[BuildingMaps]]). When defining sides, they must be defined in order since the side number is checked against the number of sides seen so far. Currently, the Multiplayer server rejects entering a scenario with more than 9 sides, even if those extra sides are AI sides. &lt;br /&gt;
&lt;br /&gt;
* '''controller''': how moves for this side should be inputted.&lt;br /&gt;
** '''ai''': the Wesnoth AI makes this side's moves. This is the default setting.&lt;br /&gt;
** '''human''': a player controls this side's moves.&lt;br /&gt;
** '''null''': the side doesn't get a turn to move and doesn't have a leader generated from the contents of the [side] tag. (It still can get units from [unit] tags in the [side] tag.) Events that would usually occur on the side's turn will not take place. This includes healing (ability, villages and rest) and ''side turn'' events.&lt;br /&gt;
** '''a number''': {{DevFeature1.11}} gives this side's control to a side with '''side''' matching the number (multiplayer only).&lt;br /&gt;
&lt;br /&gt;
* '''no_leader''': if &amp;quot;no&amp;quot; (default), then keys describing a unit which will begin on the side's keep will be the remainder of the '''[side]''' tag, See [[SingleUnitWML]]. Note that if the keys '''x''', '''y''' are included, the leader will begin there regardless of keep location. If this side has a recall list from a previous level, then the recall list will be searched for a leader (using '''canrecruit=yes''') and if one is found it will be used instead of the one described in the '''[side]''' tag. Typical keys used for defining the leader unit are '''type''' (mandatory), '''id''', '''name''' and '''unrenamable=yes''', see [[SingleUnitWML]].&lt;br /&gt;
&lt;br /&gt;
* '''recruit''': a list of unit types. At the beginning of the scenario, the side gains recruitment of these units.&lt;br /&gt;
&lt;br /&gt;
* '''gold''': the starting gold for this side. Default 100. (If gold is carried over from a previous scenario, this value is the minimum starting gold.)&lt;br /&gt;
&lt;br /&gt;
* '''income''': the base income for this side, default 0. This is added to ''base_income'', '''[game_config]''' to determine the side's base income. (see [[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''hidden''': if 'yes', side is not shown in status table.&lt;br /&gt;
&lt;br /&gt;
* '''fog''': if 'yes', this side cannot see any tiles it is not within vision of, except at the start. Please note that the AI currently ignores the fog.&lt;br /&gt;
&lt;br /&gt;
* '''fog_data''': describes the area which this team has de-fogged, using the same format as shroud_data. (This is not particularly useful when defining a side, though, as the game will recalculate fog as turns begin and end. {{DevFeature1.11}}It is used in saved games.)&lt;br /&gt;
&lt;br /&gt;
* '''[fog_override]''' {{DevFeature1.11}} With keys x= and y=, this records the hexes that have been cleared (multiturn) with {{tag|DirectActionsWML|lift_fog}}.&lt;br /&gt;
&lt;br /&gt;
* '''shroud''': if 'yes', this side cannot see any tiles it has not moved within sight of. Please note that the AI currently ignores the shroud. NOTE: with shroud=no, this team *ignores* shroud, so it is not possible to modify it using place_shroud and remove_shroud tags. If you want to do so, use &amp;quot;shroud=yes&amp;quot; and place_shroud/remove_shroud tags.&lt;br /&gt;
&lt;br /&gt;
* '''shroud_data''': describes the area which this team has de-shrouded. An example:&lt;br /&gt;
 |&lt;br /&gt;
 |00011111000&lt;br /&gt;
:This would leave the first column on the map unaltered and would change the second column for 11 tiles. A '0' means: shrouded, '1' means unshrouded. You can either call an external file using {@filename}  (see [[PreprocessorRef]]) or place the data in quotes. For making an external file see [[BuildingScenariosShroudData]].&lt;br /&gt;
&lt;br /&gt;
* '''persistent''': whether the side exists in any other scenarios. If ''yes'', then ''save_id'' (see below) is used to identify the side in other scenarios. Defaults to ''yes'' for sides with a human controller, and ''no'' for ai controlled sides.&lt;br /&gt;
&lt;br /&gt;
* '''save_id''': defaults to the leader's ''id'' if available, 'Unknown' otherwise. The ID of the side with respect to the previous and next scenarios. Used to carry over the side's recall list (including the side's leader), recruitment list, and starting gold from scenario to scenario. Also used for the side's displayed name in the victory gold-calculation dialog.&lt;br /&gt;
&lt;br /&gt;
* '''team_name''': a non translatable string representing the team's description. Sides with the same team_name are allied. Default ''side''. ''team_name'' is now a comma-separated list of teams that the side is on.&lt;br /&gt;
&lt;br /&gt;
* '''user_team_name''': a translatable string representing the team's description. This has no effect on alliances. Default ''team_name''.&lt;br /&gt;
&lt;br /&gt;
* '''current_player''': a translatable string representing the player's or leader's name. Defaults to the leader's id; if the side's leader is a human player in multiplayer, the default is the player's username.&lt;br /&gt;
&lt;br /&gt;
* '''color''': May be either a numeric color index or a color name (e.g. 'blue', 'purple', 'orange', etc.).  The numeric form is deprecated. The default list of numbers and corresponding colors can be found in data/core/team_colors.cfg.&lt;br /&gt;
&lt;br /&gt;
* '''flag''': a custom flag animation to use instead of the default one to mark captured villages. An automatic side-coloring is applied.&lt;br /&gt;
** Example animation that has three frames and loops every 750ms: ''flag=misc/myflag-1.png:250,misc/myflag-2.png:250,misc/myflag-3.png:250''&lt;br /&gt;
&lt;br /&gt;
* '''flag_icon''': a custom flag icon to indicate the side playing in the statusbar (a size of 24x16 is recommended). An automatic side-coloring is applied.&lt;br /&gt;
&lt;br /&gt;
* '''village_gold''': the amount of gold given to this side per village it controls per turn. Default specified in ''village_income'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''village_support''': {{DevFeature1.11}} the number of unit levels this side is able to support (does not pay upkeep on) per village it controls. Default specified in ''village_support'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''recall_cost''': the amount of gold it costs to recall a unit. Default specified in ''recall_cost'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''share_maps''': whether sides allied with this side see all terrains that this side sees, if they are on shroud.&lt;br /&gt;
&lt;br /&gt;
* '''share_view''': whether sides allied with this side see the units that this side sees, if they are on FoW (fog).&lt;br /&gt;
&lt;br /&gt;
* '''scroll_to_leader''': optional. If 'no', scroll to the leader is not performed on the start of each turn. (default: yes)&lt;br /&gt;
&lt;br /&gt;
* '''suppress_end_turn_confirmation''': {{DevFeature1.11}} If &amp;quot;yes&amp;quot;, then the player will not be asked to confirm ending their turn even if they have not done anything. This is provided for some (probably few) user-made scenarios in which players often skip their turns. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''[ai]''' if '''controller=ai''', gives parameters to the AI. See [[AiWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[village]''' describes a village the side begins in control of.&lt;br /&gt;
** ''x'', ''y'' the location of the village. If the pair of coordinates is not a village or is duplicated in another [village] tag, behaviour is undefined. Recent game engine or wmllint should warn about these.&lt;br /&gt;
&lt;br /&gt;
* '''[unit]''' describes a unit which begins on the side. See [[SingleUnitWML]]. If the side has a recall list and the unit is not given a location, it will start on the recall list. Note that the ''side'' attribute under '''[unit]''' will be ignored, as the side will come from the ''side'' attribute of '''[side]'''.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;'''fight_on_without_leader'''&amp;lt;/s&amp;gt;: {{DevFeature1.11|13}} this side will not be considered &amp;quot;defeated&amp;quot; until they have no units, for the purposes of determining whether the scenario ends or not. {{DevFeature1.11|15}} This attribute was replaced with defeat_condition&lt;br /&gt;
&lt;br /&gt;
* '''defeat_condition''' {{DevFeature1.11|15}} Specifies when a side is considered ''defeated'' this is checked ''for all sides'', after every player action and at the beginning of every turn.&lt;br /&gt;
** '''no_leader_left''': (default) The side is considered defeated if it has no units with canrecruit=yes&lt;br /&gt;
** '''no_units_left''': The side is defeated as soon as it has no units left.&lt;br /&gt;
** '''never''': The side is never considered defeated.&lt;br /&gt;
** '''always''': The side is always considered defeated.&lt;br /&gt;
&lt;br /&gt;
:  For the meaning and significance of ''defeated'', see [[ScenarioWML#Scenario_End_Conditions]]&lt;br /&gt;
&lt;br /&gt;
The following keys are multiplayer only:&lt;br /&gt;
&lt;br /&gt;
* '''allow_player''': if false then this side will not be allowed to be modified and will be hidden during game creation. False also prevents this side from being included in shuffle sides. Defaults to yes.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_observers''': prevents observers from seeing this side turn. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''chose_random''': {{DevFeature1.13|0}} indicates if a side chose a random faction during creation &lt;br /&gt;
&lt;br /&gt;
* '''controller_lock''': {{DevFeature1.11}} if true then this side's controller (&amp;quot;Player/Type&amp;quot;) modification is limited. It is bound to the '''controller''' attribute in [[SideWML]].&lt;br /&gt;
&lt;br /&gt;
* '''team_lock''': if true then this side's team is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''color_lock''': if true then this side's color is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''gold_lock''': if true then this side's gold is not allowed to be modified. &lt;br /&gt;
&lt;br /&gt;
* '''income_lock''': if true then this side's income is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction_lock''': if true then this side's faction is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''leader_lock''': if true then this side's leader (type or gender) is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction''': if valid faction id is provided then this side's faction will default to it.&lt;br /&gt;
&lt;br /&gt;
* '''faction_from_recruit''': if true then this side will be locked to the faction that matches the recruits better.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.11}} N.B. the ''lock'' attributes use [[ScenarioWML]] '''force_lock_settings''' as their default value. I.e. if no value to ''lock'' was set, it will take '''force_lock_settings''' value.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[EraWML]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC_Ideas_Unify_SP_and_MP_2014&amp;diff=53039</id>
		<title>SoC Ideas Unify SP and MP 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC_Ideas_Unify_SP_and_MP_2014&amp;diff=53039"/>
		<updated>2014-02-09T20:23:42Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Created page with &amp;quot;{{SoC2014Idea}}  =Description= &amp;lt;h2&amp;gt;Game Engine: Unify SP and MP&amp;lt;/h2&amp;gt; Page for the idea: SoC_Ideas_Unify_SP_and_MP_2014  Wesnoth has lots of user made content, but some of ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Idea}}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h2&amp;gt;Game Engine: Unify SP and MP&amp;lt;/h2&amp;gt;&lt;br /&gt;
Page for the idea: [[SoC_Ideas_Unify_SP_and_MP_2014]]&lt;br /&gt;
&lt;br /&gt;
Wesnoth has lots of user made content, but some of it works only for either singleplayer or multiplayer. To solve this, some of the engine's singleplayer and multiplayer code paths need to be unified and extended.&lt;br /&gt;
&lt;br /&gt;
{{#dpl:&lt;br /&gt;
 |resultsheader=''There are %PAGES% submitted student proposals for this idea''&lt;br /&gt;
 |oneresultheader=''There is 1 submitted student proposal for this idea''&lt;br /&gt;
 |suppresserrors=true&lt;br /&gt;
 |noresultsheader=''There are no submitted student proposals for this idea''&lt;br /&gt;
 |category=Summer of Code 2014 Student Page&amp;amp;SoC Ideas IDEA NAME&lt;br /&gt;
 |notcategory=SoC 2014 Not Submitted To Google&lt;br /&gt;
 |include=#Description&lt;br /&gt;
 |nottitlematch=SoC2014_Template_of_Student_page&lt;br /&gt;
 |mode=userformat&lt;br /&gt;
 |format=,,&amp;lt;br/&amp;gt;See [[%PAGE%|%TITLE%]] for more information.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;,&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Additional Information=&lt;br /&gt;
&lt;br /&gt;
Last year's [[SoC2013_thunderstruck_MP_Campaign_Support|GSoC project]] made it possible to use the same configuration files for both singleplayer and multiplayer campaigns. However, there's still some WML content which is not available for both singleplayer and multiplayer due to being handled by different code paths.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to unify singleplayer and multiplayer code paths which are responsible for handling configuration files. This would lead to being able to use multiplayer eras and modifications in singleplayer too. As a result of this, some GUI dialogs would have to be created in order for players to be able to use this new functionality.&lt;br /&gt;
&lt;br /&gt;
=Whom to ask about this=&lt;br /&gt;
thunderstruck on irc.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC_People_to_bug_on_IRC&amp;diff=53031</id>
		<title>SoC People to bug on IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC_People_to_bug_on_IRC&amp;diff=53031"/>
		<updated>2014-02-08T12:46:56Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014}}&lt;br /&gt;
&lt;br /&gt;
== People to bug on IRC ==&lt;br /&gt;
We have prepared a list of people with their areas of competence. This should give you an idea of which areas those people can help you with. Of course you should always ask in the IRC channel first, but these are the most likely people to be able to help you. &lt;br /&gt;
&lt;br /&gt;
=== Coffee ===&lt;br /&gt;
Involved mostly in the animation coding and minor bugfixes, Coffee can help with coding questions surrounding unit animations. Boucman is also a good source for animation code, although currently an inactive developer.&lt;br /&gt;
&lt;br /&gt;
=== Crab_ ===&lt;br /&gt;
iurii chernyi (Crab) has joined the team in 2009. He restructured Wesnoth AI as part of GSoC-2009, and is an expert on all aspects of current Wesnoth AI codebase. So, he's the person to ask about anything in '''src/ai'''. He also knows much about campaign units/leaders persistence.&lt;br /&gt;
&lt;br /&gt;
=== happygrue/Wintermute === &lt;br /&gt;
&lt;br /&gt;
Has been involved with multiplayer balance and testing for a number of years.  Currently working on balancing the default+khalifate era, but interested in, and often available for, testing various aspects game play or mechanics.  A good person to bug about getting feedback from the multiplayer community about any relevant issue.&lt;br /&gt;
&lt;br /&gt;
=== loonycyborg ===&lt;br /&gt;
Maintainer of Wesnoth's SCons build system and windows packager. Might also help out with other buildsystems.&lt;br /&gt;
&lt;br /&gt;
=== mattsc ===&lt;br /&gt;
&lt;br /&gt;
Has no computer science background and doesn't really know much about how coding should be done, but has been fiddling with Wesnoth AI behavior for a while now, accumulating some empirical experience along the way.  He might be able to help with questions on AI behavior and, to a lesser extent, on AI functionality.&lt;br /&gt;
&lt;br /&gt;
=== Mordante ===&lt;br /&gt;
Many of the possible projects involve the code for which he is an area expert. Also, many of the possible projects currently listed on the ideas page require GUI parts to work. Mordante is currently busy rewriting the old gui engine, he will be our expert there as well as already being our area expert for the terrain engine. He also has limited experience with boost asio and maintains the cmake build system together with Ivanovic&lt;br /&gt;
&lt;br /&gt;
=== Nils Kneuper (Ivanovic) ===&lt;br /&gt;
He is doing nothing special, he just does some &amp;quot;administrative work&amp;quot; like packaging fresh tarballs when it is time for them and works on setting up any kind of deadlines and timetables related to releasing. He has administrative powers in most areas, no matter if website, forum or IRC. Beside this he uploads translation updates, tries to communicate with the translation teams when it is required and translates a little bit himself every now and then. But in general he is not a real expert in anything, just has a look at things that come up and redirects people to the correct contacts.&lt;br /&gt;
&lt;br /&gt;
=== Noy ===&lt;br /&gt;
Noy is an oddity among developers; he's got no coding skills whatsoever and possesses a limited understanding of computers, which is illustrated by his difficulty operating a Mac. Instead, Noy makes his contribution in gameplay and multiplayer design, drawing upon his background in social sciences research, military strategy and playing games online, to understand the effects of development on the playing community behavior. Along with Soliton, Noy is a useful conduit to discuss any issues in this area.&lt;br /&gt;
&lt;br /&gt;
=== shadowm ===&lt;br /&gt;
He has been around since 2007, and has worked in many areas of the game, including WML event commands handling, image path functions, the add-ons client code, and converting and improving various user interface dialogs in GUI2. As a veteran add-on content developer, he also knows a lot about the WML language and the functionality available in single-player campaigns. Although he is by no means an expert on Lua, he may also be able to help with Wesnoth-specific Lua questions. Finally, as one of our server administrators, he can also answer most questions about our current configuration or help you with any problems you encounter with the forums, wiki, or add-ons server.&lt;br /&gt;
&lt;br /&gt;
=== Soliton ===&lt;br /&gt;
He knows our MP server setup best. Beside this he has already done a lot of work on the MP server himself. So he probably has most knowledge about it and, being one of our MP-developers, might provide important help from the perspective of the MP player community and what is needed there.&lt;br /&gt;
&lt;br /&gt;
=== thunderstruck ===&lt;br /&gt;
2013 GSoC student who worked on the game's engine to improve support for multiplayer campaigns. Due to the nature of his project, he can assist with questions related to both SP and MP engine internal workings.&lt;br /&gt;
&lt;br /&gt;
=== vultraz ===&lt;br /&gt;
He can assist with questions related to the Lua GUI2 bindings and their usage.&lt;br /&gt;
&lt;br /&gt;
=== zookeeper ===&lt;br /&gt;
Has been around for a long time and has at least a passing familiarity with most things outside the engine code, music and Lua. Maintains a large part of the mainline campaigns and knows the WML language well. Can be contacted when it comes to anything related to WML, gameplay and scenario design, or the mainline content in general.&lt;br /&gt;
&lt;br /&gt;
== Inactive people ==&lt;br /&gt;
&lt;br /&gt;
These people are currently not actively participating in development and are likely not available to help. You can always try, of course. They may also not be entirely up-to-date regarding their areas of expertise anymore.&lt;br /&gt;
&lt;br /&gt;
=== boucman ===&lt;br /&gt;
As our &amp;quot;patch monkey&amp;quot; he accustomed to critiquing patches of every kind. Beside this, he knows many areas of the game due to working on applying patches. He is particularly used to answering question from new coders, and doesn't mind explaining trivial stuff. He was the one who started the &amp;quot;two patches, you're in&amp;quot; policy and the ReferenceWML part of the project.&lt;br /&gt;
&lt;br /&gt;
=== Dave alias Sirp ===&lt;br /&gt;
Sirp started Wesnoth and is our lead developer. He is currently our C++ expert and is also the one that is working on the new Formula AI. Any questions regarding the formula AI should be directed to him.&lt;br /&gt;
&lt;br /&gt;
=== Dragonking ===&lt;br /&gt;
&lt;br /&gt;
He is one of our best Wesnoth players, and understands the various strategies well. He has also programmed much of the Wesnoth Formula AI system and understands it well.&lt;br /&gt;
&lt;br /&gt;
=== Eric S. Raymond (ESR) ===&lt;br /&gt;
ESR is our project toolsmith; he has written several tools that semi-automate various aspects of WML maintenance.  While most of our developers/designers concentrate on either the C++ core or WML but not both, he has a balanced understanding of both levels and may be helpful in helping students develop a grasp of the overall architecture.  Finally, he did the last overhaul of the Wesnoth UI and understands UI design principles; he is well-equipped to guide students working in that area.&lt;br /&gt;
&lt;br /&gt;
=== Gabriel Morin (gabba) ===&lt;br /&gt;
&lt;br /&gt;
gabba joined the team in 2010 where he participated in GSoC, and is the conceptor and maintainer of Wesnoth's planning system, codenamed &amp;quot;Whiteboard&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== ilor ===&lt;br /&gt;
2008 GSoC student, worked on and maintains the new map editor in Wesnoth 1.5/1.6/1.7. Has some fairly recent experience with getting &amp;quot;in&amp;quot; the Wesnoth codebase.&lt;br /&gt;
&lt;br /&gt;
=== Karol Nowak (grzywacz) ===&lt;br /&gt;
Two years he participated at GSoC as a student, so he will understand the situation of GSoC students. Beside this he is our top expert on Wesnoth for embedded devices as he worked on the gp2x support.&lt;br /&gt;
&lt;br /&gt;
=== Sapient ===&lt;br /&gt;
This developer started working on the GUI and widgets, but recently he focused more on improving the internal mechanics of the WML engine such as variable look-ups and filtering. Sapient is not as active anymore but he does come one IRC in the evenings (U.S.A.). He has touched-up many areas of the code in small ways over time, thus he has a good general knowledge of the C++ code and also has worked a little on some python maintenance scripts. &lt;br /&gt;
&lt;br /&gt;
=== YogiHH ===&lt;br /&gt;
Since he is the developer who know most about building under Windows, he will probably be really helpful. Either if the student comes from the Windows side, or to help test resulting work to make sure that it does work on Windows and, for the case that it does not, to show them where problems are.&lt;br /&gt;
YogiHH also knows quite a bit about the game engine and everything that has to do with replays and savegames.&lt;br /&gt;
&lt;br /&gt;
=== Mythological or Rhuvaen ===&lt;br /&gt;
As our leading WML experts those are to be contacted when it comes to anything related WML problems since they know this stuff best. They do maintain most of the campaigns and improve them whenever they have a good idea for changes.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=PblWML&amp;diff=52677</id>
		<title>PblWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=PblWML&amp;diff=52677"/>
		<updated>2013-12-21T11:00:05Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: /* type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
To upload an add-on you have made, you need a .pbl file.&lt;br /&gt;
&lt;br /&gt;
This is a file with name '''data/add-ons/''Addon_name''.pbl''' or, for Wesnoth 1.6 and later, '''data/add-ons/''Addon_Name''/_server.pbl''' in a subdirectory.  [http://exong.net/wesnoth-attach/files/pblexample_111.png Click here for an example of what we're talking about.]&lt;br /&gt;
&lt;br /&gt;
When you upload a add-on, the file '''data/add-ons/''Addon_Name''.cfg'''&lt;br /&gt;
and the directory '''data/add-ons/''Addon_Name''/''' will be published. Alternatively, '''data/add-ons/''Addon_Name''.cfg''' can be replaced with '''data/add-ons/''Addon_Name''/_main.cfg'''. Your add-on must be based entirely on these paths.&lt;br /&gt;
&lt;br /&gt;
Be aware that translations in the .pbl-files are '''not''' used, so don't mark these strings as translatable.&lt;br /&gt;
&lt;br /&gt;
== What goes into a .pbl file? ==&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''You should '''not''' use special formatting or coloring in any of these keys when uploading to the official server.'''''&lt;br /&gt;
&lt;br /&gt;
The following keys are recognized for .pbl files:&lt;br /&gt;
&lt;br /&gt;
=== icon ===&lt;br /&gt;
: An image, displayed leftmost in the add-ons download dialog. It must be a standard Wesnoth file and not a custom one. A custom file will work for users who already have the relevant add-on installed. This is not related to the icon used for entries in the campaigns menu -- see [[CampaignWML]] for more information.&lt;br /&gt;
&lt;br /&gt;
: If the icon is a unit with magenta team-color bits, please use [[ImagePathFunctionWML]] to recolor it.&lt;br /&gt;
&lt;br /&gt;
=== title ===&lt;br /&gt;
: Displayed to the right of the icon, it is just text. It should usually be the same as the name of your add-on when it is played.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
: Displayed to the right of the title, it is just text. However, starting with Wesnoth 1.6, the ''required'' format is x.y.z where x, y and z are numbers and a value for x greater than 0 implies the add-on is complete feature-wise. Trailing non-numeric elements are allowed, but nothing should appear ''before'' the numbers. This is necessary for the ''Update add-ons'' button to work correctly. ([[#Version Key Examples|See Examples]])&lt;br /&gt;
&lt;br /&gt;
=== author ===&lt;br /&gt;
: Displayed to the right of the version, it is just text. Put your name or nickname here. If several people have contributed significantly to the add-on you may want to list all of their names.&lt;br /&gt;
&lt;br /&gt;
=== passphrase ===&lt;br /&gt;
: Not displayed, it prevents others from modifying the version of your add-on on the server. You do not need to input a passphrase when initially publishing a add-on; if you do not, one will be randomly generated for you and replaced in your local copy of the .pbl file.&lt;br /&gt;
&lt;br /&gt;
=== description ===&lt;br /&gt;
: This can be used to provide a brief description of your add-on, and for pre-1.0 versions, let people know how playable it is. The description can be viewed by users by clicking on the Description button in the built-in client, or by moving their mouse over the add-on's icon in the web interface.&lt;br /&gt;
&lt;br /&gt;
=== dependencies ===&lt;br /&gt;
: An optional list of dependencies (a comma separated list of ''addon-name'' – the directory names of the needed add-ons), which should be provided if your add-on relies on other user-made content to work properly. ([[#Dependency Key Example|See Example]])&lt;br /&gt;
&lt;br /&gt;
=== translate ===&lt;br /&gt;
: If set to '''true''', the add-on will be sent to and updated with [[WesCamp|WesCamp-i18n]]. (NOTE: this is a new and experimental function, which will automatically update the translations in your add-on. Make sure you make backups of your add-on in case of problems.)&lt;br /&gt;
&lt;br /&gt;
: You should make sure your add-on complies with some very specific [[WesCamp#Preparing_your_add-on_for_WesCamp|conventions]] required to ease the process for translators as well as technical requirements.&lt;br /&gt;
&lt;br /&gt;
=== type ===&lt;br /&gt;
: Indicates the type of the add-on, used for the downloads manager dialog. Possible values are:&lt;br /&gt;
&lt;br /&gt;
:* ''campaign'': single player campaign.&lt;br /&gt;
:* ''scenario'': single player scenario.&lt;br /&gt;
:* ''campaign_sp_mp'': hybrid campaign.&lt;br /&gt;
:* ''era'': multiplayer era.&lt;br /&gt;
:* ''faction'': multiplayer stand-alone faction, or add-on for other available era.&lt;br /&gt;
:* ''map_pack'': multiplayer map-pack.&lt;br /&gt;
:* ''campaign_mp'': multiplayer campaign.&lt;br /&gt;
:* ''scenario_mp'': multiplayer scenario. (See the note below.)&lt;br /&gt;
:* ''mod_mp'': multiplayer modification.&lt;br /&gt;
:* ''media'': miscellaneous resources for UMC authors/users, for example, music packs, packages of general-purpose WML, etc.&lt;br /&gt;
:* ''other'': The type to use when no other type fits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If your add-on contains two or more separate multiplayer scenarios, use ''map_pack''.&lt;br /&gt;
&lt;br /&gt;
=== email ===&lt;br /&gt;
: Hidden e-mail address used by the server administrators to contact content authors in case of major issues. Again, this will only be seen by the server administrators and it is required that you provide one in case you need to be contacted about your add-on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The add-on server keeps track of some other information about uploaded content, including when they were uploaded, what languages they have been at least partly translated into, how large they are on the server and the number of times they have been downloaded. For more information about this you can read [[CampaignServerWML]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Dependency Key Example ===&lt;br /&gt;
&lt;br /&gt;
The following dependency key could be used when the add-on needs the ''Imperial_Era'' and ''Era_of_Myths'' to be installed before it will work properly:&lt;br /&gt;
&lt;br /&gt;
 dependencies=Imperial_Era,Era_of_Myths&lt;br /&gt;
&lt;br /&gt;
=== Version Key Examples ===&lt;br /&gt;
&lt;br /&gt;
The following are examples of '''good''' version values:&lt;br /&gt;
&lt;br /&gt;
 version=&amp;quot;1.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 version=&amp;quot;0.11.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 version=&amp;quot;0.1.4beta&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 version=&amp;quot;1.5c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following are examples of '''bad''' version values:&lt;br /&gt;
&lt;br /&gt;
 version=&amp;quot;Beta1.5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 version=&amp;quot;Incomplete (0.3.4)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In both of the above examples the version number as read by the server will be '''0.0.0Beta1.5''' and '''0.0.0Incomplete (0.3.4)'''. You can clearly see why this will not be a good thing with the ''Update add-ons'' feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, here are some example version numbers and how they will be interpreted by the ''Update add-ons'' button. The number on the left will be considered an earlier number than the number on the right in each example.&lt;br /&gt;
&lt;br /&gt;
 0.5 &amp;lt; 1.0&lt;br /&gt;
&lt;br /&gt;
 1.5 &amp;lt; 1.5c&lt;br /&gt;
&lt;br /&gt;
 1.0 &amp;lt; 1.0.1&lt;br /&gt;
&lt;br /&gt;
 1.0c &amp;lt; 1.0.1a&lt;br /&gt;
&lt;br /&gt;
 1.0.1a &amp;lt; 1.0.1c&lt;br /&gt;
&lt;br /&gt;
 1.0 Final &amp;lt; 1.0.1 Beta&lt;br /&gt;
&lt;br /&gt;
=== Example .pbl File ===&lt;br /&gt;
&lt;br /&gt;
 title=&amp;quot;My Campaign&amp;quot;&lt;br /&gt;
 type=&amp;quot;campaign&amp;quot;&lt;br /&gt;
 icon=&amp;quot;misc/ball.png&amp;quot;&lt;br /&gt;
 version=&amp;quot;0.1.2&amp;quot;&lt;br /&gt;
 author=&amp;quot;Me, artwork by myself&amp;quot;&lt;br /&gt;
 passphrase=&amp;quot;This is like a password&amp;quot;&lt;br /&gt;
 description=&amp;quot;You get to kill a lot of bad guys. But only the first map is done.&amp;quot;&lt;br /&gt;
 email=&amp;quot;name@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
* [[BuildingCampaignsThePBLFile]]&lt;br /&gt;
* [[CampaignServerWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignWML&amp;diff=52676</id>
		<title>CampaignWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignWML&amp;diff=52676"/>
		<updated>2013-12-21T10:58:10Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: /* The [campaign] Tag */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Dacyn and/or Invisible Philosopher -- please be careful&lt;br /&gt;
you don't reduce the signal-to-noise ratio on the WML pages&lt;br /&gt;
when editing!  Eg. knowing that a tag is translatable is _important_&lt;br /&gt;
for the 29 translations we have in progress. -- ott&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page describes how the campaign is displayed in the &amp;quot;Campaign&amp;quot; menu, and how it starts.&lt;br /&gt;
&lt;br /&gt;
==The [campaign] Tag==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[campaign]''' tags:&lt;br /&gt;
* '''id''': the internal campaign identifier used to classify saved games&lt;br /&gt;
* '''icon''': the image displayed in the campaign selection menu&lt;br /&gt;
* '''name''': (translatable) name displayed in the campaign selection menu&lt;br /&gt;
* '''abbrev''': (translatable) abbreviation used as a prefix for savefile names made from this campaign&lt;br /&gt;
* '''image''': the image shown in the information pane when this campaign is selected in the campaign selection menu (typically a transparent, 350×350 pixels portrait)&lt;br /&gt;
* '''description''': (translatable) text shown in the information pane when this campaign is selected in the campaign selection menu&lt;br /&gt;
* '''type''': {{DevFeature1.11}} campaign's type to specify if it should be visible in singleplayer, multiplayer or both. Possible values are &amp;quot;sp&amp;quot;, &amp;quot;mp&amp;quot; and &amp;quot;hybrid&amp;quot;. Defaults to &amp;quot;sp&amp;quot;.&lt;br /&gt;
* '''define'''='''''CAMPAIGN_SYMBOL''''' when this campaign is started, the preprocessor symbol '''''CAMPAIGN_SYMBOL''''' will be defined. See '''#ifdef''' in [[PreprocessorRef]] for how this can be used to isolate parts of the campaign file from other campaigns. Only the tags '''[campaign]''' and '''[binary_path]''' (see [[BinaryPathWML]]) should go outside of '''#ifdef ''CAMPAIGN_SYMBOL'''''. This symbol will be defined ''before'' any .cfg is preprocessed. Important note: starting with 1.7.13, [binary_path] does no longer need to be outside of the '''#ifdef ''CAMPAIGN_SYMBOL''''' block to make custom binary data available, which could easily cause overwrites. E.g. icon=data/add-ons/whatever/something.png is supposed to work. This seems to have been a bug since at least BfW 1.0 which means that practically all available examples of user made add-ons are wrong in this aspect.&lt;br /&gt;
* '''extra_defines''': a comma(''',''') separated list of preprocessor symbols. Those symbols will be defined ''before'' any .cfg is preprocessed. Currently supported extra_defines are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
;ENABLE_ARMAGEDDON_DRAKE&lt;br /&gt;
:allows the advancement ''Inferno Drake'' -&amp;gt; ''Armageddon Drake''&lt;br /&gt;
;ENABLE_DWARVISH_ARCANISTER&lt;br /&gt;
:allows the advancement ''Dwarvish Runemaster'' -&amp;gt; ''Dwarvish Arcanister''&lt;br /&gt;
;ENABLE_DWARVISH_RUNESMITH&lt;br /&gt;
:allows the advancement ''Dwarvish Fighter'' -&amp;gt; ''Dwarvish Runesmith''&lt;br /&gt;
;DISABLE_GRAND_MARSHAL&lt;br /&gt;
:disallows the advancement ''General'' -&amp;gt; ''Grand Marshal''&lt;br /&gt;
;ENABLE_ANCIENT_LICH&lt;br /&gt;
:allows the advancement ''Lich'' -&amp;gt; ''Ancient Lich''&lt;br /&gt;
;ENABLE_DEATH_KNIGHT&lt;br /&gt;
:allows the advancement ''Revenant'' -&amp;gt; ''Death Knight'&lt;br /&gt;
;ENABLE_TROLL_SHAMAN {{DevFeature1.11}}&lt;br /&gt;
:allows the advancement ''Troll Whelp'' -&amp;gt; ''Troll Shaman''&lt;br /&gt;
;ENABLE_WOLF_ADVANCEMENT {{DevFeature1.11}}&lt;br /&gt;
:allows the advancements ''Wolf'' -&amp;gt; ''Great Wolf'' -&amp;gt; ''Direwolf''&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
* '''difficulties''': a comma(''',''') separated list of preprocessor symbols, exactly one of which will be stored depending on the difficulty setting chosen when the campaign is started. The symbols '''EASY''', '''NORMAL''', and '''HARD''' are usually used, and there are several macros in utils.cfg (see [[UtilWML]]) which check for these values to set WML keys to different values depending on difficulty.  If you use different difficulty symbols, you may need to define your own versions of these macros.&lt;br /&gt;
* '''difficulty_descriptions''': the menu of difficulties; this is a list of descriptions (see [[DescriptionWML]]) that correspond to different difficulty levels. Since each description is a menu option for a difficulty level, this must provide the same number of descriptions as there are levels in the ''difficulties'' list.&lt;br /&gt;
* '''allow_difficulty_change''': {{DevFeature1.11}} Allows difficulty switching during an ongoing campaign. Default:yes&lt;br /&gt;
* '''first_scenario''': the ID of the first scenario in the campaign; see ''id'' in [[ScenarioWML]]&lt;br /&gt;
* '''rank''': a number that determines the order of campaigns in the campaign selection menu.  Lower ''rank'' campaigns appear earlier, with unranked campaigns at the end. Currently the mainline campaigns use multiples of 10 from 0 to 399, with 0-99 for Novice campaigns, 100-199 for Intermediate campaigns, and 200-399 for Expert campaigns; if you specify this, it should not be less than 400.  (Note: This replaces an older convention that topped out at 50.)&lt;br /&gt;
* '''[about]''': inserts your own credits into the game's list of credits. See below for syntax.&lt;br /&gt;
* '''end_credits''': {{DevFeature1.11}} Whether to display the credits screen at the end of the campaign. Defaults to ''yes''.&lt;br /&gt;
* '''end_text''': (translatable) Text that is shown centered in a black screen at the end of a campaign. Defaults to &amp;quot;The End&amp;quot;.&lt;br /&gt;
* '''end_text_duration''': Delay, in milliseconds, before displaying the game credits at the end of a campaign. In other words, for how much time '''end_text''' is displayed on screen. Defaults to 3500.&lt;br /&gt;
&lt;br /&gt;
The following keys are additionally recognized in multiplayer:&lt;br /&gt;
* '''min_players''': {{DevFeature1.11}} Minimum number of players campaign supports. Defaults to 2.&lt;br /&gt;
* '''max_players''': {{DevFeature1.11}} Maximum number of players campaign supports. Defaults to '''min_players'''.&lt;br /&gt;
* '''allow_era_choice''': {{DevFeature1.11}} Whether to hide era selection and use a default one when creating a game. Defaults to ''yes''.&lt;br /&gt;
* '''require_campaign''': {{DevFeature1.11}} Whether clients are required to have this campaign installed beforehand to be allowed join a game using this campaign. Possible values 'yes' (the default) and 'no'.&lt;br /&gt;
&lt;br /&gt;
== Campaign credits ==&lt;br /&gt;
&lt;br /&gt;
The campaign's name automatically is inserted at the top of the rolling credits followed by title/text key pairs.  There can be any number of '''[about]''' tags inside a '''[campaign]''' tag, but none of them will display credits if there is no &amp;quot;id&amp;quot; key present inside [campaign] (see above). The '''[about]''' tag has the following keys:&lt;br /&gt;
* '''title''': (translatable) large text used to start a new subsection (writers, artists, units, balancing) in the rolling credits&lt;br /&gt;
* '''text''': (translatable, but you probably won't want to make it such) smaller text which is displayed before the contributor names&lt;br /&gt;
* '''[entry]''': Contains information about a single contributor. Only the ''name'' key will be used in-game, the other three keys are for display on the [[Credits]] page ('''note:''' the values of these keys will only display on the Credits page for mainline campaigns; they will not display for UMC campaigns)&lt;br /&gt;
** '''name''': The name of the contributor&lt;br /&gt;
** '''comment''': Optional short note about what that person did&lt;br /&gt;
** '''email''': Optional email address&lt;br /&gt;
** '''wikiuser''': Optional, the user name on the wiki&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[PreprocessorRef]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
* [[PblWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52649</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52649"/>
		<updated>2013-12-14T10:10:12Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the toplevel tags [multiplayer], [test], [tutorial], [scenario] ==&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', '''[tutorial]''' and '''[scenario]''' are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
* The '''[test]''' scenario with the attribute '''id=test''' is an initial scenario. This test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test)&lt;br /&gt;
&lt;br /&gt;
* The '''[tutorial]''' scenario with the attribute '''id=tutorial''' is an initial scenario. The tutorial is accessed by clicking on the &amp;quot;tutorial&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags:&lt;br /&gt;
&lt;br /&gt;
* '''id''': A unique identifier for this scenario. All scenarios must have an id. Can't clash with '''id''' used in '''[multiplayer]''' tags.&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
&lt;br /&gt;
* '''description''': (translatable) only for multiplayer maps. Will show up as a tooltip when mousing over the minimap in the multiplayer setup screen.&lt;br /&gt;
&lt;br /&gt;
* '''name''': (translatable) is shown in several places in the level, including the intro screen. It is also the default name for saves on the level.&lt;br /&gt;
&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit (default). See also [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
&lt;br /&gt;
: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default=no)&lt;br /&gt;
&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario.&lt;br /&gt;
&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_leaders_loss''': {{DevFeature1.11}} when this is set to '''yes''' (default), for sides who lost all their leaders, carryover will be removed.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
* '''current_tod''': The time of day slot number (starting from zero) active at scenario start.&lt;br /&gt;
&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** '''current_time''': The time slot number (starting with zero) active at the creation of the area.{{DevFeature1.11}}&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': describes an event that may be triggered at a certain point of the scenario. See [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
* '''force_lock_settings''': {{DevFeature1.11}} provides a default value for [[SideWML]] ''lock'' attributes and forces the &amp;quot;Use map settings&amp;quot; to be checked and disabled. This is useful if author wants to limit game customization in order to keep the scenario/campaign balanced. Individual options can still be enabled if this key is set to '''yes'''. E.g. color selection can be enabled by explicitly setting ''color_lock=yes'' in [[SideWML]].&lt;br /&gt;
* '''new_game_title''': {{DevFeature1.11}} if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': {{DevFeature1.11}} a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': {{DevFeature1.11}} same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': {{DevFeature1.11}} same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': {{DevFeature1.11}} same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': {{DevFeature1.11}} a list of modification ids. The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''[options]''': {{DevFeature1.11}} custom options. See [[OptionWML]] for details.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52263</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52263"/>
		<updated>2013-10-27T09:47:59Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the toplevel tags [multiplayer], [test], [tutorial], [scenario] ==&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', '''[tutorial]''' and '''[scenario]''' are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
* The '''[test]''' scenario with the attribute '''id=test''' is an initial scenario. This test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test)&lt;br /&gt;
&lt;br /&gt;
* The '''[tutorial]''' scenario with the attribute '''id=tutorial''' is an initial scenario. The tutorial is accessed by clicking on the &amp;quot;tutorial&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags:&lt;br /&gt;
&lt;br /&gt;
* '''id''': A unique identifier for this scenario. All scenarios must have an id. Can't clash with '''id''' used in '''[multiplayer]''' tags.&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
&lt;br /&gt;
* '''description''': (translatable) only for multiplayer maps. Will show up as a tooltip when mousing over the minimap in the multiplayer setup screen.&lt;br /&gt;
&lt;br /&gt;
* '''name''': (translatable) is shown in several places in the level, including the intro screen. It is also the default name for saves on the level.&lt;br /&gt;
&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit (default). See also [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
&lt;br /&gt;
: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default=no)&lt;br /&gt;
&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario.&lt;br /&gt;
&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_leaders_loss''': {{DevFeature1.11}} when this is set to '''yes''' (default), for sides who lost all their leaders, carryover will be removed.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': describes an event that may be triggered at a certain point of the scenario. See [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
* '''force_lock_settings''': {{DevFeature1.11}} provides a default value for [[SideWML]] ''lock'' attributes and forces the &amp;quot;Use map settings&amp;quot; to be checked and disabled.&lt;br /&gt;
* '''new_game_title''': {{DevFeature1.11}} if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': {{DevFeature1.11}} a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': {{DevFeature1.11}} same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': {{DevFeature1.11}} same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': {{DevFeature1.11}} same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': {{DevFeature1.11}} a list of modification ids. The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''[options]''': {{DevFeature1.11}} custom options. See [[OptionWML]] for details.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=52262</id>
		<title>SideWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=52262"/>
		<updated>2013-10-27T09:44:42Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: /* the [side] tag */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the [side] tag ==&lt;br /&gt;
&lt;br /&gt;
The [side] tag is used to describe a side in a particular scenario.&lt;br /&gt;
&lt;br /&gt;
The following keys are recognized:&lt;br /&gt;
&lt;br /&gt;
* '''side''': a number. The leader of this side is placed on the tile represented by this number (see [[BuildingMaps]]). When defining sides, they must be defined in order since the side number is checked against the number of sides seen so far. Currently, the Multiplayer server rejects entering a scenario with more than 9 sides, even if those extra sides are AI sides. &lt;br /&gt;
&lt;br /&gt;
* '''controller''': how moves for this side should be inputted.&lt;br /&gt;
** '''ai''': the Wesnoth AI makes this side's moves. This is the default setting.&lt;br /&gt;
** '''human''': a player controls this side's moves.&lt;br /&gt;
** '''null''': the side doesn't get a turn to move and doesn't have a leader generated from the contents of the [side] tag. (It still can get units from [unit] tags in the [side] tag.)&lt;br /&gt;
** '''a number''': {{DevFeature1.11}} gives this side's control to a side with '''side''' matching the number (multiplayer only).&lt;br /&gt;
&lt;br /&gt;
* '''no_leader''': if &amp;quot;no&amp;quot; (default), then keys describing a unit which will begin on the side's keep will be the remainder of the '''[side]''' tag, See [[SingleUnitWML]]. Note that if the keys '''x''', '''y''' are included, the leader will begin there regardless of keep location. If this side has a recall list from a previous level, then the recall list will be searched for a leader (using '''canrecruit=yes''') and if one is found it will be used instead of the one described in the '''[side]''' tag. Typical keys used for defining the leader unit are '''type''' (mandatory), '''id''', '''name''' and '''unrenamable=yes''', see [[SingleUnitWML]].&lt;br /&gt;
&lt;br /&gt;
* '''recruit''': a list of unit types. At the beginning of the scenario, the side gains recruitment of these units.&lt;br /&gt;
&lt;br /&gt;
* '''gold''': the starting gold for this side. Default 100. (If gold is carried over from a previous scenario, this value is the minimum starting gold.)&lt;br /&gt;
&lt;br /&gt;
* '''income''': the base income for this side, default 0. This is added to ''base_income'', '''[game_config]''' to determine the side's base income. (see [[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''hidden''': if 'yes', side is not shown in status table.&lt;br /&gt;
&lt;br /&gt;
* '''fog''': if 'yes', this side cannot see any tiles it is not within vision of, except at the start. Please note that the AI currently ignores the fog.&lt;br /&gt;
&lt;br /&gt;
* '''fog_data''': describes the area which this team has de-fogged, using the same format as shroud_data. (This is not particularly useful when defining a side, though, as the game will recalculate fog as turns begin and end. {{DevFeature1.11}}It is used in saved games.)&lt;br /&gt;
&lt;br /&gt;
* '''[fog_override]''' {{DevFeature1.11}} With keys x= and y=, this records the hexes that have been cleared (multiturn) with {{tag|DirectActionsWML|lift_fog}}.&lt;br /&gt;
&lt;br /&gt;
* '''shroud''': if 'yes', this side cannot see any tiles it has not moved within sight of. Please note that the AI currently ignores the shroud. NOTE: with shroud=no, this team *ignores* shroud, so it is not possible to modify it using place_shroud and remove_shroud tags. If you want to do so, use &amp;quot;shroud=yes&amp;quot; and place_shroud/remove_shroud tags.&lt;br /&gt;
&lt;br /&gt;
* '''shroud_data''': describes the area which this team has de-shrouded. An example:&lt;br /&gt;
 |&lt;br /&gt;
 |00011111000&lt;br /&gt;
:This would leave the first column on the map unaltered and would change the second column for 11 tiles. A '0' means: shrouded, '1' means unshrouded. You can either call an external file using {@filename}  (see [[PreprocessorRef]]) or place the data in quotes. For making an external file see [[BuildingScenariosShroudData]].&lt;br /&gt;
&lt;br /&gt;
* '''persistent''': whether the side exists in any other scenarios. If ''yes'', then ''save_id'' (see below) is used to identify the side in other scenarios. Defaults to ''yes'' for sides with a human controller, and ''no'' for ai controlled sides.&lt;br /&gt;
&lt;br /&gt;
* '''save_id''': defaults to the leader's ''id'' if available, 'Unknown' otherwise. The ID of the side with respect to the previous and next scenarios. Used to carry over the side's recall list (including the side's leader), recruitment list, and starting gold from scenario to scenario. Also used for the side's displayed name in the victory gold-calculation dialog. (For versions prior to 1.7.3, some extra effort to retrieve carryover information may be needed. See [[SideSwitchingWML]])&lt;br /&gt;
&lt;br /&gt;
* '''team_name''': a non translatable string representing the team's description. Sides with the same team_name are allied. Default ''side''. ''team_name'' is now a comma-separated list of teams that the side is on.&lt;br /&gt;
&lt;br /&gt;
* '''user_team_name''': a translatable string representing the team's description. This has no effect on alliances. Default ''team_name''.&lt;br /&gt;
&lt;br /&gt;
* '''current_player''': a translatable string representing the player's or leader's name. Defaults to the leader's id; if the side's leader is a human player in multiplayer, the default is the player's username.&lt;br /&gt;
&lt;br /&gt;
* '''color''': May be either a numeric color index or a color name (e.g. 'blue', 'purple', 'orange', etc.).  The numeric form is deprecated. The default list of numbers and corresponding colors can be found in data/core/team_colors.cfg.&lt;br /&gt;
&lt;br /&gt;
* '''flag''': a custom flag animation to use instead of the default one to mark captured villages. An automatic side-coloring is applied.&lt;br /&gt;
** Example animation that has three frames and loops every 750ms: ''flag=misc/myflag-1.png:250,misc/myflag-2.png:250,misc/myflag-3.png:250''&lt;br /&gt;
&lt;br /&gt;
* '''flag_icon''': a custom flag icon to indicate the side playing in the statusbar (a size of 24x16 is recommended). An automatic side-coloring is applied.&lt;br /&gt;
&lt;br /&gt;
* '''village_gold''': the amount of gold given to this side per village it controls per turn. Default specified in ''village_income'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''village_support''': {{DevFeature1.11}} the number of unit levels this side is able to support (does not pay upkeep on) per village it controls. Default specified in ''village_support'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''recall_cost''': the amount of gold it costs to recall a unit. Default specified in ''recall_cost'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''share_maps''': whether sides allied with this side see all terrains that this side sees, if they are on shroud.&lt;br /&gt;
&lt;br /&gt;
* '''share_view''': whether sides allied with this side see the units that this side sees, if they are on FoW (fog).&lt;br /&gt;
&lt;br /&gt;
* '''scroll_to_leader''': optional. If 'no', scroll to the leader is not performed on the start of each turn. (default: yes)&lt;br /&gt;
&lt;br /&gt;
* '''suppress_end_turn_confirmation''': {{DevFeature1.11}} If &amp;quot;yes&amp;quot;, then the player will not be asked to confirm ending their turn even if they have not done anything. This is provided for some (probably few) user-made scenarios in which players often skip their turns. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''[ai]''' if '''controller=ai''', gives parameters to the AI. See [[AiWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[village]''' describes a village the side begins in control of.&lt;br /&gt;
** ''x'', ''y'' the location of the village. If the pair of coordinates is not a village or is duplicated in another [village] tag, behaviour is undefined. Recent game engine or wmllint should warn about these.&lt;br /&gt;
&lt;br /&gt;
* '''[unit]''' describes a unit which begins on the side. See [[SingleUnitWML]]. If the side has a recall list and the unit is not given a location, it will start on the recall list. Note that the ''side'' attribute under '''[unit]''' will be ignored, as the side will come from the ''side'' attribute of '''[side]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following keys are multiplayer only:&lt;br /&gt;
&lt;br /&gt;
* '''allow_player''': if false then this side will not be allowed to be modified and will be hidden during game creation. Defaults to yes.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_observers''': prevents observers from seeing this side turn. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''controller_lock''': {{DevFeature1.11}} if true then this side's controller (&amp;quot;Player/Type&amp;quot;) modification is limited. It is bound to the '''controller''' attribute in [[SideWML]].&lt;br /&gt;
&lt;br /&gt;
* '''team_lock''': if true then this side's team is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''color_lock''': if true then this side's color is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''gold_lock''': if true then this side's gold is not allowed to be modified. &lt;br /&gt;
&lt;br /&gt;
* '''income_lock''': if true then this side's income is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction''': if valid faction id is provided then this side's faction is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction_from_recruit''': if true then this side will be locked to the faction that matches the recruits better.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.11}} N.B. the ''lock'' attributes use [[ScenarioWML]] '''force_lock_settings''' as their default value. I.e. if no value to ''lock'' was set, it will take '''force_lock_settings''' value.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[EraWML]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=52169</id>
		<title>SideWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=52169"/>
		<updated>2013-10-11T19:51:08Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Documented &amp;quot;controller_lock&amp;quot; and other lock aspects.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the [side] tag ==&lt;br /&gt;
&lt;br /&gt;
The [side] tag is used to describe a side in a particular scenario.&lt;br /&gt;
&lt;br /&gt;
The following keys are recognized:&lt;br /&gt;
&lt;br /&gt;
* '''side''': a number. The leader of this side is placed on the tile represented by this number (see [[BuildingMaps]]). When defining sides, they must be defined in order since the side number is checked against the number of sides seen so far. Currently, the Multiplayer server rejects entering a scenario with more than 9 sides, even if those extra sides are AI sides. &lt;br /&gt;
&lt;br /&gt;
* '''controller''': how moves for this side should be inputted.&lt;br /&gt;
** '''ai''': the Wesnoth AI makes this side's moves. This is the default setting.&lt;br /&gt;
** '''human''': a player controls this side's moves.&lt;br /&gt;
** '''null''': the side doesn't get a turn to move and doesn't have a leader generated from the contents of the [side] tag. (It still can get units from [unit] tags in the [side] tag.)&lt;br /&gt;
** '''a number''': {{DevFeature1.11}} gives this side's control to a side with '''side''' matching the number (multiplayer only).&lt;br /&gt;
&lt;br /&gt;
* '''no_leader''': if &amp;quot;no&amp;quot; (default), then keys describing a unit which will begin on the side's keep will be the remainder of the '''[side]''' tag, See [[SingleUnitWML]]. Note that if the keys '''x''', '''y''' are included, the leader will begin there regardless of keep location. If this side has a recall list from a previous level, then the recall list will be searched for a leader (using '''canrecruit=yes''') and if one is found it will be used instead of the one described in the '''[side]''' tag. Typical keys used for defining the leader unit are '''type''' (mandatory), '''id''', '''name''' and '''unrenamable=yes''', see [[SingleUnitWML]].&lt;br /&gt;
&lt;br /&gt;
* '''recruit''': a list of unit types. At the beginning of the scenario, the side gains recruitment of these units.&lt;br /&gt;
&lt;br /&gt;
* '''gold''': the starting gold for this side. Default 100. (If gold is carried over from a previous scenario, this value is the minimum starting gold.)&lt;br /&gt;
&lt;br /&gt;
* '''income''': the base income for this side, default 0. This is added to ''base_income'', '''[game_config]''' to determine the side's base income. (see [[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''hidden''': if 'yes', side is not shown in status table.&lt;br /&gt;
&lt;br /&gt;
* '''fog''': if 'yes', this side cannot see any tiles it is not within vision of, except at the start. Please note that the AI currently ignores the fog.&lt;br /&gt;
&lt;br /&gt;
* '''fog_data''': describes the area which this team has de-fogged, using the same format as shroud_data. (This is not particularly useful when defining a side, though, as the game will recalculate fog as turns begin and end. {{DevFeature1.11}}It is used in saved games.)&lt;br /&gt;
&lt;br /&gt;
* '''[fog_override]''' {{DevFeature1.11}} With keys x= and y=, this records the hexes that have been cleared (multiturn) with {{tag|DirectActionsWML|lift_fog}}.&lt;br /&gt;
&lt;br /&gt;
* '''shroud''': if 'yes', this side cannot see any tiles it has not moved within sight of. Please note that the AI currently ignores the shroud. NOTE: with shroud=no, this team *ignores* shroud, so it is not possible to modify it using place_shroud and remove_shroud tags. If you want to do so, use &amp;quot;shroud=yes&amp;quot; and place_shroud/remove_shroud tags.&lt;br /&gt;
&lt;br /&gt;
* '''shroud_data''': describes the area which this team has de-shrouded. An example:&lt;br /&gt;
 |&lt;br /&gt;
 |00011111000&lt;br /&gt;
:This would leave the first column on the map unaltered and would change the second column for 11 tiles. A '0' means: shrouded, '1' means unshrouded. You can either call an external file using {@filename}  (see [[PreprocessorRef]]) or place the data in quotes. For making an external file see [[BuildingScenariosShroudData]].&lt;br /&gt;
&lt;br /&gt;
* '''persistent''': whether the side exists in any other scenarios. If ''yes'', then ''save_id'' (see below) is used to identify the side in other scenarios. Defaults to ''yes'' for sides with a human controller, and ''no'' for ai controlled sides.&lt;br /&gt;
&lt;br /&gt;
* '''save_id''': defaults to the leader's ''id'' if available, 'Unknown' otherwise. The ID of the side with respect to the previous and next scenarios. Used to carry over the side's recall list (including the side's leader), recruitment list, and starting gold from scenario to scenario. Also used for the side's displayed name in the victory gold-calculation dialog. (For versions prior to 1.7.3, some extra effort to retrieve carryover information may be needed. See [[SideSwitchingWML]])&lt;br /&gt;
&lt;br /&gt;
* '''team_name''': a non translatable string representing the team's description. Sides with the same team_name are allied. Default ''side''. ''team_name'' is now a comma-separated list of teams that the side is on.&lt;br /&gt;
&lt;br /&gt;
* '''user_team_name''': a translatable string representing the team's description. This has no effect on alliances. Default ''team_name''.&lt;br /&gt;
&lt;br /&gt;
* '''current_player''': a translatable string representing the player's or leader's name. Defaults to the leader's id; if the side's leader is a human player in multiplayer, the default is the player's username.&lt;br /&gt;
&lt;br /&gt;
* '''color''': May be either a numeric color index or a color name (e.g. 'blue', 'purple', 'orange', etc.).  The numeric form is deprecated. The default list of numbers and corresponding colors can be found in data/core/team_colors.cfg.&lt;br /&gt;
&lt;br /&gt;
* '''flag''': a custom flag animation to use instead of the default one to mark captured villages. An automatic side-coloring is applied.&lt;br /&gt;
** Example animation that has three frames and loops every 750ms: ''flag=misc/myflag-1.png:250,misc/myflag-2.png:250,misc/myflag-3.png:250''&lt;br /&gt;
&lt;br /&gt;
* '''flag_icon''': a custom flag icon to indicate the side playing in the statusbar (a size of 24x16 is recommended). An automatic side-coloring is applied.&lt;br /&gt;
&lt;br /&gt;
* '''village_gold''': the amount of gold given to this side per village it controls per turn. Default specified in ''village_income'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''village_support''': {{DevFeature1.11}} the number of unit levels this side is able to support (does not pay upkeep on) per village it controls. Default specified in ''village_support'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''recall_cost''': the amount of gold it costs to recall a unit. Default specified in ''recall_cost'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''share_maps''': whether sides allied with this side see all terrains that this side sees, if they are on shroud.&lt;br /&gt;
&lt;br /&gt;
* '''share_view''': whether sides allied with this side see the units that this side sees, if they are on FoW (fog).&lt;br /&gt;
&lt;br /&gt;
* '''scroll_to_leader''': optional. If 'no', scroll to the leader is not performed on the start of each turn. (default: yes)&lt;br /&gt;
&lt;br /&gt;
* '''suppress_end_turn_confirmation''': {{DevFeature1.11}} If &amp;quot;yes&amp;quot;, then the player will not be asked to confirm ending their turn even if they have not done anything. This is provided for some (probably few) user-made scenarios in which players often skip their turns. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''[ai]''' if '''controller=ai''', gives parameters to the AI. See [[AiWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[village]''' describes a village the side begins in control of.&lt;br /&gt;
** ''x'', ''y'' the location of the village. If the pair of coordinates is not a village or is duplicated in another [village] tag, behaviour is undefined. Recent game engine or wmllint should warn about these.&lt;br /&gt;
&lt;br /&gt;
* '''[unit]''' describes a unit which begins on the side. See [[SingleUnitWML]]. If the side has a recall list and the unit is not given a location, it will start on the recall list. Note that the ''side'' attribute under '''[unit]''' will be ignored, as the side will come from the ''side'' attribute of '''[side]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following keys are multiplayer only:&lt;br /&gt;
&lt;br /&gt;
* '''allow_player''': if false then this side will not be allowed to be modified and will be hidden during game creation. Defaults to yes.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_observers''': prevents observers from seeing this side turn. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''controller_lock''': {{DevFeature1.11}} if true then this side's controller (&amp;quot;Player/Type&amp;quot;) modification is limited. It is bound to the '''controller''' attribute in [[SideWML]].&lt;br /&gt;
&lt;br /&gt;
* '''team_lock''': if true then this side's team is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''color_lock''': if true then this side's color is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''gold_lock''': if true then this side's gold is not allowed to be modified. &lt;br /&gt;
&lt;br /&gt;
* '''income_lock''': if true then this side's income is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction''': if valid faction id is provided then this side's faction is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction_from_recruit''': if true then this side will be locked to the faction that matches the recruits better.&lt;br /&gt;
&lt;br /&gt;
N.B. the ''lock'' attributes use &amp;quot;Use map settings&amp;quot; option as their default value.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[EraWML]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52168</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52168"/>
		<updated>2013-10-11T19:43:16Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Undo revision 52163 by Thunderstruck (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the toplevel tags [multiplayer], [test], [tutorial], [scenario] ==&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', '''[tutorial]''' and '''[scenario]''' are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
* The '''[test]''' scenario with the attribute '''id=test''' is an initial scenario. This test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test)&lt;br /&gt;
&lt;br /&gt;
* The '''[tutorial]''' scenario with the attribute '''id=tutorial''' is an initial scenario. The tutorial is accessed by clicking on the &amp;quot;tutorial&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags:&lt;br /&gt;
&lt;br /&gt;
* '''id''': A unique identifier for this scenario. All scenarios must have an id. Can't clash with '''id''' used in '''[multiplayer]''' tags.&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
&lt;br /&gt;
* '''description''': (translatable) only for multiplayer maps. Will show up as a tooltip when mousing over the minimap in the multiplayer setup screen.&lt;br /&gt;
&lt;br /&gt;
* '''name''': (translatable) is shown in several places in the level, including the intro screen. It is also the default name for saves on the level.&lt;br /&gt;
&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit (default). See also [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
&lt;br /&gt;
: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default=no)&lt;br /&gt;
&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario.&lt;br /&gt;
&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_leaders_loss''': {{DevFeature1.11}} when this is set to '''yes''' (default), for sides who lost all their leaders, carryover will be removed.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': describes an event that may be triggered at a certain point of the scenario. See [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
* '''force_use_map_settings''': {{DevFeature1.11}} forces the &amp;quot;Use map settings&amp;quot; to be checked in order to avoid broken gameplay for story based multiplayer campaigns. Defaults to no for scenario loaded from configuration screen and to yes, for consecutive scenarios.&lt;br /&gt;
* '''new_game_title''': {{DevFeature1.11}} if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': {{DevFeature1.11}} a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': {{DevFeature1.11}} same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': {{DevFeature1.11}} same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': {{DevFeature1.11}} same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': {{DevFeature1.11}} a list of modification ids. The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''[options]''': {{DevFeature1.11}} custom options. See [[OptionWML]] for details.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52163</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52163"/>
		<updated>2013-10-09T08:12:21Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Added &amp;quot;lock_side_controllers&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the toplevel tags [multiplayer], [test], [tutorial], [scenario] ==&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', '''[tutorial]''' and '''[scenario]''' are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
* The '''[test]''' scenario with the attribute '''id=test''' is an initial scenario. This test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test)&lt;br /&gt;
&lt;br /&gt;
* The '''[tutorial]''' scenario with the attribute '''id=tutorial''' is an initial scenario. The tutorial is accessed by clicking on the &amp;quot;tutorial&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags:&lt;br /&gt;
&lt;br /&gt;
* '''id''': A unique identifier for this scenario. All scenarios must have an id. Can't clash with '''id''' used in '''[multiplayer]''' tags.&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
&lt;br /&gt;
* '''description''': (translatable) only for multiplayer maps. Will show up as a tooltip when mousing over the minimap in the multiplayer setup screen.&lt;br /&gt;
&lt;br /&gt;
* '''name''': (translatable) is shown in several places in the level, including the intro screen. It is also the default name for saves on the level.&lt;br /&gt;
&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit (default). See also [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
&lt;br /&gt;
: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default=no)&lt;br /&gt;
&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario.&lt;br /&gt;
&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_leaders_loss''': {{DevFeature1.11}} when this is set to '''yes''' (default), for sides who lost all their leaders, carryover will be removed.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': describes an event that may be triggered at a certain point of the scenario. See [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
* '''force_use_map_settings''': {{DevFeature1.11}} forces the &amp;quot;Use map settings&amp;quot; to be checked in order to avoid broken gameplay for story based multiplayer campaigns. Defaults to no for scenario loaded from configuration screen and to yes, for consecutive scenarios.&lt;br /&gt;
* '''lock_side_controllers''': {{DevFeature1.11}} locks side controllers (&amp;quot;Player/Type&amp;quot;) selection according to the '''controller''' attribute in [[SideWML]]. Default value is true if &amp;quot;Use map settings&amp;quot; was checked. Otherwise, false.&lt;br /&gt;
* '''new_game_title''': {{DevFeature1.11}} if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': {{DevFeature1.11}} a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': {{DevFeature1.11}} same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': {{DevFeature1.11}} same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': {{DevFeature1.11}} same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': {{DevFeature1.11}} a list of modification ids. The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''[options]''': {{DevFeature1.11}} custom options. See [[OptionWML]] for details.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=52119</id>
		<title>MultiplayerContent</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=52119"/>
		<updated>2013-09-25T20:43:11Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Fixed title case&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide is intended for version '''1.11.6 and higher'''. A page about multiplayer campaigns in older versions can be found [[MultiplayerCampaigns_1.10|here]].&lt;br /&gt;
&lt;br /&gt;
= Building Multiplayer Campaigns =&lt;br /&gt;
&lt;br /&gt;
The development version of Wesnoth has basic support for campaigns that can be played in multiplayer mode, with your friends, or even with an AI.  There will still be some things that don't work as expected because some functionality for multiplayer campaigns is still being developed. While you can and should test your work in hotseat mode, there are a number of things that might behave differently under real network conditions (mostly affecting scenario and side parameters). Keep this in mind and make sure to test your campaign over the net, too.&lt;br /&gt;
This page only documents the differences between writing multiplayer campaigns and single player campaigns, so you might want to read up on [[BuildingCampaigns]] and [[BuildingMultiplayer]] first.&lt;br /&gt;
&lt;br /&gt;
== The Campaign File ==&lt;br /&gt;
&lt;br /&gt;
As of version 1.11.6, multiplayer campaigns do use [campaign] tag, thus allowing the same campaign to work both in singleplayer and multiplayer. The only difference is that game also checks for a couple optional tags when campaign is used in multiplayer. They could be found in [[CampaignWML]] page. Additionally, '''type''' attribute should be explicitly set to '''mp''' or '''hybrid''' or otherwise a campaign would not be visible in multiplayer.&lt;br /&gt;
&lt;br /&gt;
== The Scenario File ==&lt;br /&gt;
&lt;br /&gt;
A scenario in a multiplayer campaign is almost identical to a scenario in a singleplayer campaign. You only need to change the following:&lt;br /&gt;
&lt;br /&gt;
* Every scenario which should not be available to start directly, should have '''allow_new_game=no''' inside the [scenario] tag. This will prevent it from showing in entry points selection in multiplayer configuration screen.&lt;br /&gt;
* For scenarios that don't set '''allow_new_game=no''', one could make use of '''new_game_title''' to have a custom title. This is useful if campaign is supposed to have multiple entry points. E.g. chapters.&lt;br /&gt;
* Each human-controlled side needs to have a '''controller=human''' key defined in their [side] tag to work in network mode.&lt;br /&gt;
* Each human-controlled side also needs to have a '''save_id''' defined inside their [side] tag. Each side's save_id should be unique, and it should be the same in every scenario. Without this, your recall lists and leaders will not carry over from one scenario to the next.&lt;br /&gt;
* If you want to carry over information for ai sides, they need to have a '''save_id''' defined and '''persistent=yes''' in their [side] tag.&lt;br /&gt;
&lt;br /&gt;
== Other Notes ==&lt;br /&gt;
&lt;br /&gt;
* To ensure that your scenario settings would not get overwritten by the settings from the multiplayer configure dialog, set '''force_use_map_settings=true'''. However, if your campaign is not intended to be played strictly with default settings - set it to '''false'''.&lt;br /&gt;
&lt;br /&gt;
* If any settings are still taken from the multiplayer configure dialog, it is possible to overwrite them in the prestart event. Useful tags include [set_recruit], [modify_side], [modify_turns] and [remove_shroud]. There is currently no way to remove fog. You might also want to use ''experience_modifier=100'' in the [scenario] tag.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BuildingScenarios]]&lt;br /&gt;
* [[BuildingMultiplayer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Create]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=52118</id>
		<title>MultiplayerContent</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=52118"/>
		<updated>2013-09-25T20:42:23Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Updated for 1.11.6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide is intended for version '''1.11.6 and higher'''. A page about multiplayer campaigns in older versions can be found [[MultiplayerCampaigns_1.10|here]].&lt;br /&gt;
&lt;br /&gt;
= Building Multiplayer Campaigns =&lt;br /&gt;
&lt;br /&gt;
The development version of Wesnoth has basic support for campaigns that can be played in multiplayer mode, with your friends, or even with an AI.  There will still be some things that don't work as expected because some functionality for multiplayer campaigns is still being developed. While you can and should test your work in hotseat mode, there are a number of things that might behave differently under real network conditions (mostly affecting scenario and side parameters). Keep this in mind and make sure to test your campaign over the net, too.&lt;br /&gt;
This page only documents the differences between writing multiplayer campaigns and single player campaigns, so you might want to read up on [[BuildingCampaigns]] and [[BuildingMultiplayer]] first.&lt;br /&gt;
&lt;br /&gt;
== The Campaign File ==&lt;br /&gt;
&lt;br /&gt;
As of version 1.11.6, multiplayer campaigns do use [campaign] tag, thus allowing the same campaign to work both in singleplayer and multiplayer. The only difference is that game also checks for a couple optional tags when campaign is used in multiplayer. They could be found in [[CampaignWML]] page. Additionally, '''type''' attribute should be explicitly set to '''mp''' or '''hybrid''' or otherwise a campaign would not be visible in multiplayer.&lt;br /&gt;
&lt;br /&gt;
== The Scenario file ==&lt;br /&gt;
&lt;br /&gt;
A scenario in a multiplayer campaign is almost identical to a scenario in a singleplayer campaign. You only need to change the following:&lt;br /&gt;
&lt;br /&gt;
* Every scenario which should not be available to start directly, should have '''allow_new_game=no''' inside the [scenario] tag. This will prevent it from showing in entry points selection in multiplayer configuration screen.&lt;br /&gt;
* For scenarios that don't set '''allow_new_game=no''', one could make use of '''new_game_title''' to have a custom title. This is useful if campaign is supposed to have multiple entry points. E.g. chapters.&lt;br /&gt;
* Each human-controlled side needs to have a '''controller=human''' key defined in their [side] tag to work in network mode.&lt;br /&gt;
* Each human-controlled side also needs to have a '''save_id''' defined inside their [side] tag. Each side's save_id should be unique, and it should be the same in every scenario. Without this, your recall lists and leaders will not carry over from one scenario to the next.&lt;br /&gt;
* If you want to carry over information for ai sides, they need to have a '''save_id''' defined and '''persistent=yes''' in their [side] tag.&lt;br /&gt;
&lt;br /&gt;
== Other Notes ==&lt;br /&gt;
&lt;br /&gt;
* To ensure that your scenario settings would not get overwritten by the settings from the multiplayer configure dialog, set '''force_use_map_settings=true'''. However, if your campaign is not intended to be played strictly with default settings - set it to '''false'''.&lt;br /&gt;
&lt;br /&gt;
* If any settings are still taken from the multiplayer configure dialog, it is possible to overwrite them in the prestart event. Useful tags include [set_recruit], [modify_side], [modify_turns] and [remove_shroud]. There is currently no way to remove fog. You might also want to use ''experience_modifier=100'' in the [scenario] tag.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BuildingScenarios]]&lt;br /&gt;
* [[BuildingMultiplayer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Create]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=52112</id>
		<title>MultiplayerContent</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=52112"/>
		<updated>2013-09-24T20:15:59Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Add redirect and development notice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Attention:''' This page is under development!&lt;br /&gt;
&lt;br /&gt;
This guide is intended for version '''1.11.6 and higher'''. A page about multiplayer campaigns in older versions can be found [[MultiplayerCampaigns_1.10|here]].&lt;br /&gt;
&lt;br /&gt;
= Building multiplayer campaigns =&lt;br /&gt;
&lt;br /&gt;
Both the stable and development versions of wesnoth have basic support for campaigns that can be played in multiplayer mode, with your friends, or even with an AI.  There will still be some things that don't work as expected as multiplayer campaigns are an area for exploration. While you can and should test your work in hotseat mode, there are a number of things that might behave differently under real network conditions (mostly affecting scenario and side parameters). Keep this in mind and make sure to test your campaign over the net, too.&lt;br /&gt;
This page only documents the differences between writing multiplayer campaigns and single player campaigns, so you might want to read up on [[BuildingCampaigns]] and [[BuildingMultiplayer]] first.&lt;br /&gt;
&lt;br /&gt;
== The campaign file ==&lt;br /&gt;
&lt;br /&gt;
Multiplayer campaigns do not use the [campaign] tag. As a result of this, multiplayer campaigns only support one difficulty level, though you could support more with enough WML, if you're feeling ambitious. The &amp;quot;campaign file&amp;quot; should look something like this:&lt;br /&gt;
&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~add-ons/My_Campaign/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 #Only needed if you have custom units&lt;br /&gt;
 [+units]&lt;br /&gt;
     {~add-ons/My_Campaign/units}&lt;br /&gt;
 [/units]&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Anything that you would normally put in the campaign tag now goes into the first scenario, if it's supported there. The order of scenarios is determined by next_scenario tags, just like in single player.&lt;br /&gt;
&lt;br /&gt;
== Scenarios ==&lt;br /&gt;
&lt;br /&gt;
A scenario in a multiplayer campaign is almost identical to a scenario in a single player campaign. You only need to change the following:&lt;br /&gt;
&lt;br /&gt;
* The [scenario] tag should be replaced with a [multiplayer] tag.&lt;br /&gt;
* The '''next_scenario''' key points to the id of the next scenario.&lt;br /&gt;
* Every scenario after the first should have '''allow_new_game=no''' inside the [multiplayer] tag. This will prevent it from showing up in the map selection menu. &lt;br /&gt;
* Each human-controlled side needs to have a '''controller=human''' key defined in their [side] tag to work in network mode.&lt;br /&gt;
* Each human-controlled side also needs to have a '''save_id''' defined inside their [side] tag. Each side's save_id should be unique, and it should be the same in every scenario. Without this, your recall lists and leaders will not carry over from one scenario to the next.&lt;br /&gt;
* If you want to carry over information for ai sides, they need to have a '''save_id''' defined and '''persistent=yes''' in their [side] tag.&lt;br /&gt;
* Each human-controlled side has to have a leader '''type=''' definition in every scenario except the first one . It doesn't matter which type you choose cause the type set here gets replaced by the actual leader in the recall list. &lt;br /&gt;
* If you want player's leaders to be recalled, you should either recall all units which can recruit or assign id attribute for them (unique for each leader, the same in each scenario - e.g. &amp;quot;p1&amp;quot; for leader of player 1, &amp;quot;p2&amp;quot; for leader of player 2). See [[http://forum.wesnoth.org/viewtopic.php?p=405807#p405807]] &lt;br /&gt;
* If you have a file containing macros, it must be referenced by every scenario, since there is no proper campaign file to include it from.&lt;br /&gt;
&lt;br /&gt;
== The first scenario ==&lt;br /&gt;
&lt;br /&gt;
* To ensure that your scenario settings are not overwritten by the settings from the multiplayer dialog, check '''use map settings''' when creating the game.&lt;br /&gt;
&lt;br /&gt;
* If any setttings are still taken from the multiplayer dialog, it is possible to overwrite them in the prestart event. Useful tags include [set_recruit], [modify_side], [modify_turns] and [remove_shroud]. There is currently no way to remove fog. You might also want to use ''experience_modifier=100'' in the [multiplayer] tag.&lt;br /&gt;
&lt;br /&gt;
* Deactivate the '''Quick replays''' setting (in the multiplayer lobby), or the [story] tags will not display for you.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.wesnoth.org/forum/viewtopic.php?t=11349 Multiplayer Campaigns HOWTO forum post]&lt;br /&gt;
* [[BuildingScenarios]]&lt;br /&gt;
* [[BuildingMultiplayer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Create]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52087</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=52087"/>
		<updated>2013-09-21T17:34:32Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Documented &amp;quot;remove_from_carryover_on_leaders_loss&amp;quot;, &amp;quot;new_game_title&amp;quot;, &amp;quot;force_use_map_settings&amp;quot; and updated &amp;quot;id&amp;quot;, &amp;quot;allow_new_game&amp;quot; attributes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the toplevel tags [multiplayer], [test], [tutorial], [scenario] ==&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', '''[tutorial]''' and '''[scenario]''' are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
&lt;br /&gt;
* The '''[test]''' scenario with the attribute '''id=test''' is an initial scenario. This test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test)&lt;br /&gt;
&lt;br /&gt;
* The '''[tutorial]''' scenario with the attribute '''id=tutorial''' is an initial scenario. The tutorial is accessed by clicking on the &amp;quot;tutorial&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags:&lt;br /&gt;
&lt;br /&gt;
* '''id''': A unique identifier for this scenario. All scenarios must have an id. Can't clash with '''id''' used in '''[multiplayer]''' tags.&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
&lt;br /&gt;
* '''description''': (translatable) only for multiplayer maps. Will show up as a tooltip when mousing over the minimap in the multiplayer setup screen.&lt;br /&gt;
&lt;br /&gt;
* '''name''': (translatable) is shown in several places in the level, including the intro screen. It is also the default name for saves on the level.&lt;br /&gt;
&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit (default). See also [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
&lt;br /&gt;
: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default=no)&lt;br /&gt;
&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario.&lt;br /&gt;
&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_leaders_loss''': {{DevFeature1.11}} when this is set to '''yes''' (default), for sides who lost all their leaders, carryover will be removed.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
&lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': describes an event that may be triggered at a certain point of the scenario. See [[EventWML]]&lt;br /&gt;
&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
* '''force_use_map_settings''': {{DevFeature1.11}} forces the &amp;quot;Use map settings&amp;quot; to be checked in order to avoid broken gameplay for story based multiplayer campaigns. Defaults to no for scenario loaded from configuration screen and to yes, for consecutive scenarios.&lt;br /&gt;
* '''new_game_title''': {{DevFeature1.11}} if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': {{DevFeature1.11}} a list of era ids. Only the eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': {{DevFeature1.11}} a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': {{DevFeature1.11}} same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': {{DevFeature1.11}} same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': {{DevFeature1.11}} same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': {{DevFeature1.11}} a list of modification ids. The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''[options]''': {{DevFeature1.11}} custom options. See [[OptionWML]] for details.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=52086</id>
		<title>SideWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=52086"/>
		<updated>2013-09-21T16:51:01Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the [side] tag ==&lt;br /&gt;
&lt;br /&gt;
The [side] tag is used to describe a side in a particular scenario.&lt;br /&gt;
&lt;br /&gt;
The following keys are recognized:&lt;br /&gt;
&lt;br /&gt;
* '''side''': a number. The leader of this side is placed on the tile represented by this number (see [[BuildingMaps]]). When defining sides, they must be defined in order since the side number is checked against the number of sides seen so far. Currently, the Multiplayer server rejects entering a scenario with more than 9 sides, even if those extra sides are AI sides. &lt;br /&gt;
&lt;br /&gt;
* '''controller''': how moves for this side should be inputted.&lt;br /&gt;
** '''ai''': the Wesnoth AI makes this side's moves. This is the default setting.&lt;br /&gt;
** '''human''': a player controls this side's moves.&lt;br /&gt;
** '''null''': the side doesn't get a turn to move and doesn't have a leader generated from the contents of the [side] tag. (It still can get units from [unit] tags in the [side] tag.)&lt;br /&gt;
** '''a number''': {{DevFeature1.11}} gives this side's control to a side with '''side''' matching the number (multiplayer only).&lt;br /&gt;
&lt;br /&gt;
* '''no_leader''': if &amp;quot;no&amp;quot; (default), then keys describing a unit which will begin on the side's keep will be the remainder of the '''[side]''' tag, See [[SingleUnitWML]]. Note that if the keys '''x''', '''y''' are included, the leader will begin there regardless of keep location. If this side has a recall list from a previous level, then the recall list will be searched for a leader (using '''canrecruit=yes''') and if one is found it will be used instead of the one described in the '''[side]''' tag. Typical keys used for defining the leader unit are '''type''' (mandatory), '''id''', '''name''' and '''unrenamable=yes''', see [[SingleUnitWML]].&lt;br /&gt;
&lt;br /&gt;
* '''recruit''': a list of unit types. At the beginning of the scenario, the side gains recruitment of these units.&lt;br /&gt;
&lt;br /&gt;
* '''gold''': the starting gold for this side. Default 100. (If gold is carried over from a previous scenario, this value is the minimum starting gold.)&lt;br /&gt;
&lt;br /&gt;
* '''income''': the base income for this side, default 0. This is added to ''base_income'', '''[game_config]''' to determine the side's base income. (see [[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''hidden''': if 'yes', side is not shown in status table.&lt;br /&gt;
&lt;br /&gt;
* '''fog''': if 'yes', this side cannot see any tiles it is not within vision of, except at the start. Please note that the AI currently ignores the fog.&lt;br /&gt;
&lt;br /&gt;
* '''fog_data''': describes the area which this team has de-fogged, using the same format as shroud_data. (This is not particularly useful when defining a side, though, as the game will recalculate fog as turns begin and end. {{DevFeature1.11}}It is used in saved games.)&lt;br /&gt;
&lt;br /&gt;
* '''[fog_override]''' {{DevFeature1.11}} With keys x= and y=, this records the hexes that have been cleared (multiturn) with {{tag|DirectActionsWML|lift_fog}}.&lt;br /&gt;
&lt;br /&gt;
* '''shroud''': if 'yes', this side cannot see any tiles it has not moved within sight of. Please note that the AI currently ignores the shroud. NOTE: with shroud=no, this team *ignores* shroud, so it is not possible to modify it using place_shroud and remove_shroud tags. If you want to do so, use &amp;quot;shroud=yes&amp;quot; and place_shroud/remove_shroud tags.&lt;br /&gt;
&lt;br /&gt;
* '''shroud_data''': describes the area which this team has de-shrouded. An example:&lt;br /&gt;
 |&lt;br /&gt;
 |00011111000&lt;br /&gt;
:This would leave the first column on the map unaltered and would change the second column for 11 tiles. A '0' means: shrouded, '1' means unshrouded. You can either call an external file using {@filename}  (see [[PreprocessorRef]]) or place the data in quotes. For making an external file see [[BuildingScenariosShroudData]].&lt;br /&gt;
&lt;br /&gt;
* '''persistent''': whether the side exists in any other scenarios. If ''yes'', then ''save_id'' (see below) is used to identify the side in other scenarios. Defaults to ''yes'' for sides with a human controller, and ''no'' for ai controlled sides.&lt;br /&gt;
&lt;br /&gt;
* '''save_id''': defaults to the leader's ''id'' if available, 'Unknown' otherwise. The ID of the side with respect to the previous and next scenarios. Used to carry over the side's recall list (including the side's leader), recruitment list, and starting gold from scenario to scenario. Also used for the side's displayed name in the victory gold-calculation dialog. (For versions prior to 1.7.3, some extra effort to retrieve carryover information may be needed. See [[SideSwitchingWML]])&lt;br /&gt;
&lt;br /&gt;
* '''team_name''': a non translatable string representing the team's description. Sides with the same team_name are allied. Default ''side''. ''team_name'' is now a comma-separated list of teams that the side is on.&lt;br /&gt;
&lt;br /&gt;
* '''user_team_name''': a translatable string representing the team's description. This has no effect on alliances. Default ''team_name''.&lt;br /&gt;
&lt;br /&gt;
* '''current_player''': a translatable string representing the player's or leader's name. Defaults to the leader's id; if the side's leader is a human player in multiplayer, the default is the player's username.&lt;br /&gt;
&lt;br /&gt;
* '''color''': May be either a numeric color index or a color name (e.g. 'blue', 'purple', 'orange', etc.).  The numeric form is deprecated. The default list of numbers and corresponding colors can be found in data/core/team_colors.cfg.&lt;br /&gt;
&lt;br /&gt;
* '''flag''': a custom flag animation to use instead of the default one to mark captured villages. An automatic side-coloring is applied.&lt;br /&gt;
** Example animation that has three frames and loops every 750ms: ''flag=misc/myflag-1.png:250,misc/myflag-2.png:250,misc/myflag-3.png:250''&lt;br /&gt;
&lt;br /&gt;
* '''flag_icon''': a custom flag icon to indicate the side playing in the statusbar (a size of 24x16 is recommended). An automatic side-coloring is applied.&lt;br /&gt;
&lt;br /&gt;
* '''village_gold''': the amount of gold given to this side per village it controls per turn. Default specified in ''village_income'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''village_support''': {{DevFeature1.11}} the number of unit levels this side is able to support (does not pay upkeep on) per village it controls. Default specified in ''village_support'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''recall_cost''': the amount of gold it costs to recall a unit. Default specified in ''recall_cost'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''share_maps''': whether sides allied with this side see all terrains that this side sees, if they are on shroud.&lt;br /&gt;
&lt;br /&gt;
* '''share_view''': whether sides allied with this side see the units that this side sees, if they are on FoW (fog).&lt;br /&gt;
&lt;br /&gt;
* '''scroll_to_leader''': optional. If 'no', scroll to the leader is not performed on the start of each turn. (default: yes)&lt;br /&gt;
&lt;br /&gt;
* '''suppress_end_turn_confirmation''': {{DevFeature1.11}} If &amp;quot;yes&amp;quot;, then the player will not be asked to confirm ending their turn even if they have not done anything. This is provided for some (probably few) user-made scenarios in which players often skip their turns. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''[ai]''' if '''controller=ai''', gives parameters to the AI. See [[AiWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[village]''' describes a village the side begins in control of.&lt;br /&gt;
** ''x'', ''y'' the location of the village. If the pair of coordinates is not a village or is duplicated in another [village] tag, behaviour is undefined. Recent game engine or wmllint should warn about these.&lt;br /&gt;
&lt;br /&gt;
* '''[unit]''' describes a unit which begins on the side. See [[SingleUnitWML]]. If the side has a recall list and the unit is not given a location, it will start on the recall list. Note that the ''side'' attribute under '''[unit]''' will be ignored, as the side will come from the ''side'' attribute of '''[side]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following keys are multiplayer only:&lt;br /&gt;
&lt;br /&gt;
* '''allow_player''': if false then this side will not be allowed to be modified and will be hidden during game creation. Defaults to yes.&lt;br /&gt;
&lt;br /&gt;
* '''disallow_observers''': prevents observers from seeing this side turn. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''team_lock''': if true then this side's team is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''color_lock''': if true then this side's color is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''gold_lock''': if true then this side's gold is not allowed to be modified. &lt;br /&gt;
&lt;br /&gt;
* '''income_lock''': if true then this side's income is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction''': this lock this side to this faction.&lt;br /&gt;
&lt;br /&gt;
* '''faction_from_recruit''': if true then this side will be locked to the faction that matches the recruits better.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[EraWML]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignWML&amp;diff=52085</id>
		<title>CampaignWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignWML&amp;diff=52085"/>
		<updated>2013-09-21T16:23:10Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Documented &amp;quot;type&amp;quot;, &amp;quot;min_players&amp;quot; and &amp;quot;max_players&amp;quot; attributes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Dacyn and/or Invisible Philosopher -- please be careful&lt;br /&gt;
you don't reduce the signal-to-noise ratio on the WML pages&lt;br /&gt;
when editing!  Eg. knowing that a tag is translatable is _important_&lt;br /&gt;
for the 29 translations we have in progress. -- ott&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page describes how the campaign is displayed in the &amp;quot;Campaign&amp;quot; menu, and how it starts.&lt;br /&gt;
&lt;br /&gt;
==The [campaign] Tag==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[campaign]''' tags:&lt;br /&gt;
* '''id''': the internal campaign identifier used to classify saved games&lt;br /&gt;
* '''icon''': the image displayed in the campaign selection menu&lt;br /&gt;
* '''name''': (translatable) name displayed in the campaign selection menu&lt;br /&gt;
* '''abbrev''': (translatable) abbreviation used as a prefix for savefile names made from this campaign&lt;br /&gt;
* '''image''': the image shown in the information pane when this campaign is selected in the campaign selection menu (typically a transparent, 350×350 pixels portrait)&lt;br /&gt;
* '''description''': (translatable) text shown in the information pane when this campaign is selected in the campaign selection menu&lt;br /&gt;
* '''type''': {{DevFeature1.11}} campaign's type to specify if it should be visible in singleplayer, multiplayer or both. Possible values are &amp;quot;sp&amp;quot;, &amp;quot;mp&amp;quot; and &amp;quot;hybrid&amp;quot;. Defaults to &amp;quot;sp&amp;quot;.&lt;br /&gt;
* '''define'''='''''CAMPAIGN_SYMBOL''''' when this campaign is started, the preprocessor symbol '''''CAMPAIGN_SYMBOL''''' will be defined. See '''#ifdef''' in [[PreprocessorRef]] for how this can be used to isolate parts of the campaign file from other campaigns. Only the tags '''[campaign]''' and '''[binary_path]''' (see [[BinaryPathWML]]) should go outside of '''#ifdef ''CAMPAIGN_SYMBOL'''''. This symbol will be defined ''before'' any .cfg is preprocessed. Important note: starting with 1.7.13, [binary_path] does no longer need to be outside of the '''#ifdef ''CAMPAIGN_SYMBOL''''' block to make custom binary data available, which could easily cause overwrites. E.g. icon=data/add-ons/whatever/something.png is supposed to work. This seems to have been a bug since at least BfW 1.0 which means that practically all available examples of user made add-ons are wrong in this aspect.&lt;br /&gt;
* '''extra_defines''': a comma(''',''') separated list of preprocessor symbols. Those symbols will be defined ''before'' any .cfg is preprocessed. Currently supported extra_defines are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
;ENABLE_ARMAGEDDON_DRAKE&lt;br /&gt;
:allows the advancement ''Inferno Drake'' -&amp;gt; ''Armageddon Drake''&lt;br /&gt;
;ENABLE_DWARVISH_ARCANISTER&lt;br /&gt;
:allows the advancement ''Dwarvish Runemaster'' -&amp;gt; ''Dwarvish Arcanister''&lt;br /&gt;
;ENABLE_DWARVISH_RUNESMITH&lt;br /&gt;
:allows the advancement ''Dwarvish Fighter'' -&amp;gt; ''Dwarvish Runesmith''&lt;br /&gt;
;DISABLE_GRAND_MARSHAL&lt;br /&gt;
:disallows the advancement ''General'' -&amp;gt; ''Grand Marshal''&lt;br /&gt;
;ENABLE_ANCIENT_LICH&lt;br /&gt;
:allows the advancement ''Lich'' -&amp;gt; ''Ancient Lich''&lt;br /&gt;
;ENABLE_DEATH_KNIGHT&lt;br /&gt;
:allows the advancement ''Revenant'' -&amp;gt; ''Death Knight'&lt;br /&gt;
;ENABLE_TROLL_SHAMAN {{DevFeature1.11}}&lt;br /&gt;
:allows the advancement ''Troll Whelp'' -&amp;gt; ''Troll Shaman''&lt;br /&gt;
;ENABLE_WOLF_ADVANCEMENT {{DevFeature1.11}}&lt;br /&gt;
:allows the advancements ''Wolf'' -&amp;gt; ''Great Wolf'' -&amp;gt; ''Direwolf''&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
* '''difficulties''': a comma(''',''') separated list of preprocessor symbols, exactly one of which will be stored depending on the difficulty setting chosen when the campaign is started. The symbols '''EASY''', '''NORMAL''', and '''HARD''' are usually used, and there are several macros in utils.cfg (see [[UtilWML]]) which check for these values to set WML keys to different values depending on difficulty.  If you use different difficulty symbols, you may need to define your own versions of these macros.&lt;br /&gt;
* '''difficulty_descriptions''': the menu of difficulties; this is a list of descriptions (see [[DescriptionWML]]) that correspond to different difficulty levels. Since each description is a menu option for a difficulty level, this must provide the same number of descriptions as there are levels in the ''difficulties'' list.&lt;br /&gt;
* '''allow_difficulty_change''': {{DevFeature1.11}} Allows difficulty switching during an ongoing campaign. Default:yes&lt;br /&gt;
* '''first_scenario''': the ID of the first scenario in the campaign; see ''id'' in [[ScenarioWML]]&lt;br /&gt;
* '''rank''': a number that determines the order of campaigns in the campaign selection menu.  Lower ''rank'' campaigns appear earlier, with unranked campaigns at the end. Currently the mainline campaigns use multiples of 10 from 0 to 399, with 0-99 for Novice campaigns, 100-199 for Intermediate campaigns, and 200-399 for Expert campaigns; if you specify this, it should not be less than 400.  (Note: This replaces an older convention that topped out at 50.)&lt;br /&gt;
* '''[about]''': inserts your own credits into the game's list of credits. See below for syntax.&lt;br /&gt;
* '''end_credits''': {{DevFeature1.11}} Whether to display the credits screen at the end of the campaign. Defaults to ''yes''.&lt;br /&gt;
* '''end_text''': (translatable) Text that is shown centered in a black screen at the end of a campaign. Defaults to &amp;quot;The End&amp;quot;.&lt;br /&gt;
* '''end_text_duration''': Delay, in milliseconds, before displaying the game credits at the end of a campaign. In other words, for how much time '''end_text''' is displayed on screen. Defaults to 3500.&lt;br /&gt;
&lt;br /&gt;
The following keys are additionally recognized in multiplayer:&lt;br /&gt;
* '''min_players''': {{DevFeature1.11}} Minimum number of players campaign supports. Defaults to 2.&lt;br /&gt;
* '''max_players''': {{DevFeature1.11}} Maximum number of players campaign supports. Defaults to '''min_players'''.&lt;br /&gt;
&lt;br /&gt;
== Campaign credits ==&lt;br /&gt;
&lt;br /&gt;
The campaign's name automatically is inserted at the top of the rolling credits followed by title/text key pairs.  There can be any number of '''[about]''' tags inside a '''[campaign]''' tag, but none of them will display credits if there is no &amp;quot;id&amp;quot; key present inside [campaign] (see above). The '''[about]''' tag has the following keys:&lt;br /&gt;
* '''title''': (translatable) large text used to start a new subsection (writers, artists, units, balancing) in the rolling credits&lt;br /&gt;
* '''text''': (translatable, but you probably won't want to make it such) smaller text which is displayed before the contributor names&lt;br /&gt;
* '''[entry]''': Contains information about a single contributor. Only the ''name'' key will be used in-game, the other three keys are for display on the [[Credits]] page ('''note:''' the values of these keys will only display on the Credits page for mainline campaigns; they will not display for UMC campaigns)&lt;br /&gt;
** '''name''': The name of the contributor&lt;br /&gt;
** '''comment''': Optional short note about what that person did&lt;br /&gt;
** '''email''': Optional email address&lt;br /&gt;
** '''wikiuser''': Optional, the user name on the wiki&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[PreprocessorRef]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
* [[PblWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51561</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51561"/>
		<updated>2013-07-04T16:16:12Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes for multiplayer campaigns===&lt;br /&gt;
'''''Campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the minimum number of players&lt;br /&gt;
     # for multiplayers games.&lt;br /&gt;
     # Optional. 1 will be used as a default value.&lt;br /&gt;
     min_players=2&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the maximum number of players&lt;br /&gt;
     # for multiplayer games.&lt;br /&gt;
     # Optional. The value of 'min_players' or 1 will be used as a default value.&lt;br /&gt;
     max_players=3&lt;br /&gt;
     &lt;br /&gt;
     # Indicates whether to lock multiplayer game options.&lt;br /&gt;
     # Optional. 'no' will be used as a default value.&lt;br /&gt;
     lock_mp_options=yes&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed&lt;br /&gt;
         # to choose factions for this side.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify&lt;br /&gt;
         # an order of turns for the sides with 'yes' here.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turn=yes&lt;br /&gt;
         &lt;br /&gt;
         # These might be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by [multiplayer] tags which are guarded by 'MULTIPLAYER' define. That should be improved so that it would load multiplayer campaigns only with [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. This would simplify multiplayer campaign development and would allow to implement currently missing features.&lt;br /&gt;
&lt;br /&gt;
:The [multiplayer] tag and 'MULTIPLAYER' define would still be used, but would play a less important role i.e. tag would be only used for stand-alone multiplayer scenarios and define would be used to guard them and make adjustments between singleplayer and multiplayer in hybrid campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer campaign configs start to use CampaignWML and ScenarioWML, the old multiplayer campaigns would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
:The upgraded files should be stored in user's data directory and would be also cached for performance reasons. To determine whether particular add-on was updated and would need to be upgraded again, the version of current upgraded add-on and original add-on would be compared.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario] (for campaigns only)&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** attributes such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
:As these changes are a must for a good multiplayer campaign support and maintaining it afterwards, they would probably be implemented ahead of other improvements even though they are called ''Further new syntax support''.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is chosen. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times since scenarios contain far less data than campaigns.&lt;br /&gt;
&lt;br /&gt;
:However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that large campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and cause small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer savegame storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game.&lt;br /&gt;
&lt;br /&gt;
:In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases).&lt;br /&gt;
&lt;br /&gt;
:To make it convenient for the users to easily differentiate between campaigns and scenarios a new button would be implemented which would change &amp;quot;maps menu&amp;quot; from maps/scenarios to campaigns and vice-versa. The difficulties and chapter/scenario selection dialogs would be displayed after campaign is selected and launched. These changes would have a little effect on the visual UI part and would not interfere with lipkab's [http://forums.wesnoth.org/viewtopic.php?f=12&amp;amp;t=38748 plans].&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
&lt;br /&gt;
;Options window&lt;br /&gt;
:Multiplayer campaigns and scenarios might allow different options for players. Furthermore, some multiplayer campaigns are heavily story based and their authors would prefer for players to not change all or some of the options.&lt;br /&gt;
&lt;br /&gt;
:To address these things, the multiplayer game options which are currently in create window should be moved to a new window or dialog. This would let to avoid the problem that multiplayer campaigns are not parsed before selecting a difficulty. It would also make multiplayer create window more nicer and would allow to re-use the new options window in between multiplayer campaign scenarios.&lt;br /&gt;
&lt;br /&gt;
:Currently, lipkab has already separated game options from the multiplayer create window (see link above). I could collaborate with him to make the work to be finished faster and make the options window more modular i.e. allow to easily lock/unlock relevant options and display it between campaigns scenarios.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/commit/ab739ab550b8ce391a9988f062ec2076f52bfcee Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially). [https://github.com/thunders/wesnoth-old/commit/6ca07a094796dafe4e1a4cd58f1f4b7b70680021 Update]. [https://github.com/thunders/wesnoth-old/commit/ca32fb7a50b3212d0707c0cb3434f0c2440a4eeb Another update].&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new, further and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
''N.B. The progress is not currently marked here, because the expected goals, which are here, do not necessarily match the current goals I'm working on.''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to work properly with both [scenario] and [multiplayer] tags when used in multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time and implement checking mechanism to determine if upgraded add-on was updated.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement &amp;quot;Switch to&amp;quot; button to quickly switch between multiplayer maps/scenarios to campaigns and vice-versa.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a new dialog or tweak the existing one for chapter/scenario selection for multiplayer campaigns.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Options window&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Collaborate with lipkab to make the options window more modular.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements might sound like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Make it possible to change difficulty level between scenarios in multiplayer campaign.&lt;br /&gt;
* Split-And-Branch multiplayer campaigns: different next_scenarios for different sides. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p553085 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/9c4e4b1272eb6dccd9ff0298d6e21fef17b4cd45 9c4e4b1]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51144</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51144"/>
		<updated>2013-05-22T12:48:16Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: options window&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes for multiplayer campaigns===&lt;br /&gt;
'''''Campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the minimum number of players&lt;br /&gt;
     # for multiplayers games.&lt;br /&gt;
     # Optional. 1 will be used as a default value.&lt;br /&gt;
     min_players=2&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the maximum number of players&lt;br /&gt;
     # for multiplayer games.&lt;br /&gt;
     # Optional. The value of 'min_players' or 1 will be used as a default value.&lt;br /&gt;
     max_players=3&lt;br /&gt;
     &lt;br /&gt;
     # Indicates whether to lock multiplayer game options.&lt;br /&gt;
     # Optional. 'no' will be used as a default value.&lt;br /&gt;
     lock_mp_options=yes&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed&lt;br /&gt;
         # to choose factions for this side.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify&lt;br /&gt;
         # an order of turns for the sides with 'yes' here.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turn=yes&lt;br /&gt;
         &lt;br /&gt;
         # These might be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by [multiplayer] tags which are guarded by 'MULTIPLAYER' define. That should be improved so that it would load multiplayer campaigns only with [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. This would simplify multiplayer campaign development and would allow to implement currently missing features.&lt;br /&gt;
&lt;br /&gt;
:The [multiplayer] tag and 'MULTIPLAYER' define would still be used, but would play a less important role i.e. tag would be only used for stand-alone multiplayer scenarios and define would be used to guard them and make adjustments between singleplayer and multiplayer in hybrid campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer campaign configs start to use CampaignWML and ScenarioWML, the old multiplayer campaigns would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
:The upgraded files should be stored in user's data directory and would be also cached for performance reasons. To determine whether particular add-on was updated and would need to be upgraded again, the version of current upgraded add-on and original add-on would be compared.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario] (for campaigns only)&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** attributes such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
:As these changes are a must for a good multiplayer campaign support and maintaining it afterwards, they would probably be implemented ahead of other improvements even though they are called ''Further new syntax support''.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is chosen. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times since scenarios contain far less data than campaigns.&lt;br /&gt;
&lt;br /&gt;
:However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that large campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and cause small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer savegame storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game.&lt;br /&gt;
&lt;br /&gt;
:In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases).&lt;br /&gt;
&lt;br /&gt;
:To make it convenient for the users to easily differentiate between campaigns and scenarios a new button would be implemented which would change &amp;quot;maps menu&amp;quot; from maps/scenarios to campaigns and vice-versa. The difficulties and chapter/scenario selection dialogs would be displayed after campaign is selected and launched. These changes would have a little effect on the visual UI part and would not interfere with lipkab's [http://forums.wesnoth.org/viewtopic.php?f=12&amp;amp;t=38748 plans].&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
&lt;br /&gt;
;Options window&lt;br /&gt;
:Multiplayer campaigns and scenarios might allow different options for players. Furthermore, some multiplayer campaigns are heavily story based and their authors would prefer for players to not change all or some of the options.&lt;br /&gt;
&lt;br /&gt;
:To address these things, the multiplayer game options which are currently in create window should be moved to a new window or dialog. This would let to avoid the problem that multiplayer campaigns are not parsed before selecting a difficulty. It would also make multiplayer create window more nicer and would allow to re-use the new options window in between multiplayer campaign scenarios.&lt;br /&gt;
&lt;br /&gt;
:Currently, lipkab has already separated game options from the multiplayer create window (see link above). I could collaborate with him to make the work to be finished faster and make the options window more modular i.e. allow to easily lock/unlock relevant options and display it between campaigns scenarios.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/commit/ab739ab550b8ce391a9988f062ec2076f52bfcee Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially). [https://github.com/thunders/wesnoth-old/commit/6ca07a094796dafe4e1a4cd58f1f4b7b70680021 Update]. [https://github.com/thunders/wesnoth-old/commit/ca32fb7a50b3212d0707c0cb3434f0c2440a4eeb Another update].&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new, further and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to work properly with both [scenario] and [multiplayer] tags when used in multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time and implement checking mechanism to determine if upgraded add-on was updated.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement &amp;quot;Switch to&amp;quot; button to quickly switch between multiplayer maps/scenarios to campaigns and vice-versa.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a new dialog or tweak the existing one for chapter/scenario selection for multiplayer campaigns.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Options window&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Collaborate with lipkab to make the options window more modular.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements might sound like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Make it possible to change difficulty level between scenarios in multiplayer campaign.&lt;br /&gt;
* Split-And-Branch multiplayer campaigns: different next_scenarios for different sides. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p553085 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/9c4e4b1272eb6dccd9ff0298d6e21fef17b4cd45 9c4e4b1]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51143</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51143"/>
		<updated>2013-05-22T10:23:29Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: update future aspects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes for multiplayer campaigns===&lt;br /&gt;
'''''Campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the minimum number of players&lt;br /&gt;
     # for multiplayers games.&lt;br /&gt;
     # Optional. 1 will be used as a default value.&lt;br /&gt;
     min_players=2&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the maximum number of players&lt;br /&gt;
     # for multiplayer games.&lt;br /&gt;
     # Optional. The value of 'min_players' or 1 will be used as a default value.&lt;br /&gt;
     max_players=3&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed&lt;br /&gt;
         # to choose factions for this side.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify&lt;br /&gt;
         # an order of turns for the sides with 'yes' here.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turn=yes&lt;br /&gt;
         &lt;br /&gt;
         # These might be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by [multiplayer] tags which are guarded by 'MULTIPLAYER' define. That should be improved so that it would load multiplayer campaigns only with [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. This would simplify multiplayer campaign development and would allow to implement currently missing features.&lt;br /&gt;
&lt;br /&gt;
:The [multiplayer] tag and 'MULTIPLAYER' define would still be used, but would play a less important role i.e. tag would be only used for stand-alone multiplayer scenarios and define would be used to guard them and make adjustments between singleplayer and multiplayer in hybrid campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer campaign configs start to use CampaignWML and ScenarioWML, the old multiplayer campaigns would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
:The upgraded files should be stored in user's data directory and would be also cached for performance reasons. To determine whether particular add-on was updated and would need to be upgraded again, the version of current upgraded add-on and original add-on would be compared.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario] (for campaigns only)&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** attributes such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
:As these changes are a must for a good multiplayer campaign support and maintaining it afterwards, they would probably be implemented ahead of other improvements even though they are called ''Further new syntax support''.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is chosen. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times since scenarios contain far less data than campaigns.&lt;br /&gt;
&lt;br /&gt;
:However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that large campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and cause small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer savegame storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game.&lt;br /&gt;
&lt;br /&gt;
:In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases).&lt;br /&gt;
&lt;br /&gt;
:To make it convenient for the users to easily differentiate between campaigns and scenarios a new button would be implemented which would change &amp;quot;maps menu&amp;quot; from maps/scenarios to campaigns and vice-versa. The difficulties and chapter/scenario selection dialogs would be displayed after campaign is selected and launched. These changes would have a little effect on the visual UI part and would not interfere with lipkab's [http://forums.wesnoth.org/viewtopic.php?f=12&amp;amp;t=38748 plans].&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/commit/ab739ab550b8ce391a9988f062ec2076f52bfcee Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially). [https://github.com/thunders/wesnoth-old/commit/6ca07a094796dafe4e1a4cd58f1f4b7b70680021 Update]. [https://github.com/thunders/wesnoth-old/commit/ca32fb7a50b3212d0707c0cb3434f0c2440a4eeb Another update].&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new, further and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to work properly with both [scenario] and [multiplayer] tags when used in multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time and implement checking mechanism to determine if upgraded add-on was updated.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement &amp;quot;Switch to&amp;quot; button to quickly switch between multiplayer maps/scenarios to campaigns and vice-versa.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a new dialog or tweak the existing one for chapter/scenario selection for multiplayer campaigns.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements might sound like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Make it possible to change difficulty level between scenarios in multiplayer campaign.&lt;br /&gt;
* Split-And-Branch multiplayer campaigns: different next_scenarios for different sides. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p553085 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/9c4e4b1272eb6dccd9ff0298d6e21fef17b4cd45 9c4e4b1]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51107</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51107"/>
		<updated>2013-05-21T14:11:01Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Create window and demo update.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes for multiplayer campaigns===&lt;br /&gt;
'''''Campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the minimum number of players&lt;br /&gt;
     # for multiplayers games.&lt;br /&gt;
     # Optional. 1 will be used as a default value.&lt;br /&gt;
     min_players=2&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the maximum number of players&lt;br /&gt;
     # for multiplayer games.&lt;br /&gt;
     # Optional. The value of 'min_players' or 1 will be used as a default value.&lt;br /&gt;
     max_players=3&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed&lt;br /&gt;
         # to choose factions for this side.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify&lt;br /&gt;
         # an order of turns for the sides with 'yes' here.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turn=yes&lt;br /&gt;
         &lt;br /&gt;
         # These might be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by [multiplayer] tags which are guarded by 'MULTIPLAYER' define. That should be improved so that it would load multiplayer campaigns only with [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. This would simplify multiplayer campaign development and would allow to implement currently missing features.&lt;br /&gt;
&lt;br /&gt;
:The [multiplayer] tag and 'MULTIPLAYER' define would still be used, but would play a less important role i.e. tag would be only used for stand-alone multiplayer scenarios and define would be used to guard them and make adjustments between singleplayer and multiplayer in hybrid campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer campaign configs start to use CampaignWML and ScenarioWML, the old multiplayer campaigns would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
:The upgraded files should be stored in user's data directory and would be also cached for performance reasons. To determine whether particular add-on was updated and would need to be upgraded again, the version of current upgraded add-on and original add-on would be compared.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario] (for campaigns only)&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** attributes such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
:As these changes are a must for a good multiplayer campaign support and maintaining it afterwards, they would probably be implemented ahead of other improvements even though they are called ''Further new syntax support''.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is chosen. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times since scenarios contain far less data than campaigns.&lt;br /&gt;
&lt;br /&gt;
:However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that large campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and cause small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer savegame storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game.&lt;br /&gt;
&lt;br /&gt;
:In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases).&lt;br /&gt;
&lt;br /&gt;
:To make it convenient for the users to easily differentiate between campaigns and scenarios a new button would be implemented which would change &amp;quot;maps menu&amp;quot; from scenarios to campaigns and vice-versa. The difficulties and chapter/scenario selection dialogs would be displayed after campaign is selected and launched. These changes would have a little effect on the visual UI part and would not interfere with lipkab's [http://forums.wesnoth.org/viewtopic.php?f=12&amp;amp;t=38748 plans].&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/commit/ab739ab550b8ce391a9988f062ec2076f52bfcee Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially). [https://github.com/thunders/wesnoth-old/commit/6ca07a094796dafe4e1a4cd58f1f4b7b70680021 Update]. [https://github.com/thunders/wesnoth-old/commit/ca32fb7a50b3212d0707c0cb3434f0c2440a4eeb Another update].&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new, further and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to work properly with both [scenario] and [multiplayer] tags when used in multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time and implement checking mechanism to determine if upgraded add-on was updated.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement &amp;quot;Switch to&amp;quot; button to quickly switch between multiplayer maps/scenarios to campaigns and vice-versa.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a new dialog or tweak the existing one for chapter/scenario selection for multiplayer campaigns.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements might sound like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/9c4e4b1272eb6dccd9ff0298d6e21fef17b4cd45 9c4e4b1]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51102</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51102"/>
		<updated>2013-05-20T13:31:43Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: demo update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes for multiplayer campaigns===&lt;br /&gt;
'''''Campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the minimum number of players&lt;br /&gt;
     # for multiplayers games.&lt;br /&gt;
     # Optional. 1 will be used as a default value.&lt;br /&gt;
     min_players=2&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the maximum number of players&lt;br /&gt;
     # for multiplayer games.&lt;br /&gt;
     # Optional. The value of 'min_players' or 1 will be used as a default value.&lt;br /&gt;
     max_players=3&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed&lt;br /&gt;
         # to choose factions for this side.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify&lt;br /&gt;
         # an order of turns for the sides with 'yes' here.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turn=yes&lt;br /&gt;
         &lt;br /&gt;
         # These might be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by [multiplayer] tags which are guarded by 'MULTIPLAYER' define. That should be improved so that it would load multiplayer campaigns only with [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. This would simplify multiplayer campaign development and would allow to implement currently missing features.&lt;br /&gt;
&lt;br /&gt;
:The [multiplayer] tag and 'MULTIPLAYER' define would still be used, but would play a less important role i.e. tag would be only used for stand-alone multiplayer scenarios and define would be used to guard them and make adjustments between singleplayer and multiplayer in hybrid campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer campaign configs start to use CampaignWML and ScenarioWML, the old multiplayer campaigns would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
:The upgraded files should be stored in user's data directory and would be also cached for performance reasons. To determine whether particular add-on was updated and would need to be upgraded again, the version of current upgraded add-on and original add-on would be compared.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario] (for campaigns only)&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** attributes such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
:As these changes are a must for a good multiplayer campaign support and maintaining it afterwards, they would probably be implemented ahead of other improvements even though they are called ''Further new syntax support''.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is chosen. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times since scenarios contain far less data than campaigns.&lt;br /&gt;
&lt;br /&gt;
:However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that large campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and cause small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer savegame storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game.&lt;br /&gt;
&lt;br /&gt;
:In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
TODO: edit after GUI prototypes for new mp campaign create window are confirmed. Should not interfere with [http://forums.wesnoth.org/viewtopic.php?f=12&amp;amp;t=38748 lipkab's plans]&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with 'entry_points' has more than one attribute), all the scenarios should be displayed in the additional dialog if campaign is chose to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/commit/ab739ab550b8ce391a9988f062ec2076f52bfcee Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially). [https://github.com/thunders/wesnoth-old/commit/6ca07a094796dafe4e1a4cd58f1f4b7b70680021 Update].&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new, further and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to work properly with both [scenario] and [multiplayer] tags when used in multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|&amp;lt;strike&amp;gt;Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&amp;lt;/strike&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|TODO: edit after GUI prototypes. Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|TODO: edit after GUI prototypes. Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|TODO: edit after GUI prototypes. Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements might sound like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/9c4e4b1272eb6dccd9ff0298d6e21fef17b4cd45 9c4e4b1]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51090</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=51090"/>
		<updated>2013-05-19T18:33:24Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: New syntax support, formatting and other changes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes for multiplayer campaigns===&lt;br /&gt;
'''''Campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the minimum number of players&lt;br /&gt;
     # for multiplayers games.&lt;br /&gt;
     # Optional. 1 will be used as a default value.&lt;br /&gt;
     min_players=2&lt;br /&gt;
     &lt;br /&gt;
     # Indicates the maximum number of players&lt;br /&gt;
     # for multiplayer games.&lt;br /&gt;
     # Optional. The value of 'min_players' or 1 will be used as a default value.&lt;br /&gt;
     max_players=3&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed&lt;br /&gt;
         # to choose factions for this side.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify&lt;br /&gt;
         # an order of turns for the sides with 'yes' here.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turn=yes&lt;br /&gt;
         &lt;br /&gt;
         # These might be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by [multiplayer] tags which are guarded by 'MULTIPLAYER' define. That should be improved so that it would load multiplayer campaigns only with [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. This would simplify multiplayer campaign development and would allow to implement currently missing features.&lt;br /&gt;
&lt;br /&gt;
:The [multiplayer] tag and 'MULTIPLAYER' define would still be used, but would play a less important role i.e. tag would be only used for stand-alone multiplayer scenarios and define would be used to guard them and make adjustments between singleplayer and multiplayer in hybrid campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer campaign configs start to use CampaignWML and ScenarioWML, the old multiplayer campaigns would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
:The upgraded files should be stored in user's data directory and would be also cached for performance reasons. To determine whether particular add-on was updated and would need to be upgraded again, the version of current upgraded add-on and original add-on would be compared.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario] (for campaigns only)&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** attributes such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
:As these changes are a must for a good multiplayer campaign support and maintaining it afterwards, they would probably be implemented ahead of other improvements even though they are called ''Further new syntax support''.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is chosen. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times since scenarios contain far less data than campaigns.&lt;br /&gt;
&lt;br /&gt;
:However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that large campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and cause small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer savegame storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game.&lt;br /&gt;
&lt;br /&gt;
:In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
TODO: edit after GUI prototypes for new mp campaign create window are confirmed. Should not interfere with [http://forums.wesnoth.org/viewtopic.php?f=12&amp;amp;t=38748 lipkab's plans]&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with 'entry_points' has more than one attribute), all the scenarios should be displayed in the additional dialog if campaign is chose to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/commit/ab739ab550b8ce391a9988f062ec2076f52bfcee Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially).&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new, further and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to work properly with both [scenario] and [multiplayer] tags when used in multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|&amp;lt;strike&amp;gt;Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&amp;lt;/strike&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|TODO: edit after GUI prototypes. Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|TODO: edit after GUI prototypes. Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|TODO: edit after GUI prototypes. Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements might sound like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/9c4e4b1272eb6dccd9ff0298d6e21fef17b4cd45 9c4e4b1]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50975</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50975"/>
		<updated>2013-05-10T17:59:35Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
TODO: clarify eras role in WML parsing&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. The [multiplayer] tag would stop be to used. However 'MULTIPLAYER' define would still be used, but would play a less important role i.e. it would only be used to make adjustments between singleplayer and multiplayer in hybrid campaigns. Additionally, stand-alone multiplayer scenarios would remain the same, except that they would use [scenario] tag.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML. Additionally, the upgrader utility should also wrap eras around with unique defines to improve multiplayer loading time. The upgraded files should be stored in user's data directory and would be also cached for performance reasons.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario]&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** fields such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
:* [era]..[/era] -&amp;gt; #ifdef ERA_DEFINE [era]..[/era] #endif&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is created. The stand-alone multiplayer games would still be fully parsed with every other multiplayer game, but that would not drastically affect loading times, since scenarios contain far less data than campaigns. However, since game loading speed is still an important aspect, some adjustments would might have to be made; When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that big campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and causes small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer game saves storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with 'entry_points' has more than one attribute), all the scenarios should be displayed in the additional dialog if campaign is chose to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/tree/gsoc1 Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially).&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove [multiplayer] tag references in the code and adjust it to work with [scenario].&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50974</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50974"/>
		<updated>2013-05-10T16:05:39Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Goals, engine and wml syntax changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details omitted..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'hybrid'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # details omitted..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details omitted..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details omitted..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer necessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
TODO: clarify eras role in WML parsing&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and recognize what type of game it is by 'campaign_type' attribute. The [multiplayer] tag would stop be to used. However 'MULTIPLAYER' define would still be used, but would play a less important role i.e. it would only be used to make adjustments between singleplayer and multiplayer in hybrid campaigns. Additionally, stand-alone multiplayer scenarios would remain the same, except that they would use [scenario] tag.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at the loading time of game configs and upgrade all configs identified as an old multiplayer WML. Additionally, the upgrader utility should also wrap eras around with unique defines to improve multiplayer loading time. The upgraded files should be stored in user's data directory and would be also cached for performance reasons.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario]&lt;br /&gt;
:* #ifdef MULTIPLAYER .. #endif -&amp;gt; [campaign]..[/campaign] #ifdef CAMPAIGN_SYMBOL .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** fields such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
:* [era]..[/era] -&amp;gt; #ifdef ERA_DEFINE [era]..[/era] #endif&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. Additionally, part of multiplayer set-up logic could be moved to game_controller class. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is created. The stand-alone multiplayer games would still be fully parsed with every other multiplayer, but that would not drastically affect loading times, since scenarios contain far less data than campaigns. However, since game loading speed is still an important aspect, some adjustments would might have to be made. When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every add-on and using that path to load everything under that directory. Additionally, if it would appear that big campaigns would cause time-outs while they are parsed, the thread responsible for answering ping requests from the server could be created in order to avoid that.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and causes small, but important and undesirable gameplay changes (e.g. wrong carry-over or xp calculations). To address those issues, multiplayer game saves storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redundant. [https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b Already done.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with 'entry_points' has more than one attribute), all the scenarios should be displayed in the additional dialog if campaign is chose to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
:* [https://github.com/thunders/wesnoth-old/tree/gsoc1 Demo] to play SP campaigns as MP with no extra WML tweaking (works only partially).&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 15:&lt;br /&gt;
:* Game engine: save/restore issues, players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 15 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Refactor multiplayer&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor and move parts of multiplayer set-up logic in multiplayer.*pp to the game_controller.*pp.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable singleplayer campaigns to be played in multiplayer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove [multiplayer] tag references in the code and adjust it to work with [scenario].&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify the multiplayer's screen logic to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to correctly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definitely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect opportunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/0ac9f9c532bc9065943fbf2384a622a43b14466b 0ac9f9c]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=50952</id>
		<title>SideWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SideWML&amp;diff=50952"/>
		<updated>2013-05-07T11:52:55Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== the [side] tag ==&lt;br /&gt;
&lt;br /&gt;
The [side] tag is used to describe a side in a particular scenario.&lt;br /&gt;
&lt;br /&gt;
The following keys are recognized:&lt;br /&gt;
&lt;br /&gt;
* '''side''': a number. The leader of this side is placed on the tile represented by this number (see [[BuildingMaps]]). When defining sides, they must be defined in order since the side number is checked against the number of sides seen so far. Currently, the Multiplayer server rejects entering a scenario with more than 9 sides, even if those extra sides are AI sides. &lt;br /&gt;
&lt;br /&gt;
* '''controller''': how moves for this side should be inputted.&lt;br /&gt;
** '''ai''': the Wesnoth AI makes this side's moves. This is the default setting.&lt;br /&gt;
** '''human''': a player controls this side's moves.&lt;br /&gt;
** '''null''': the side doesn't get a turn to move and doesn't have a leader generated from the contents of the [side] tag. (It still can get units from [unit] tags in the [side] tag.)&lt;br /&gt;
&lt;br /&gt;
* '''no_leader''': if &amp;quot;no&amp;quot; (default), then keys describing a unit which will begin on the side's keep will be the remainder of the '''[side]''' tag, See [[SingleUnitWML]]. Note that if the keys '''x''', '''y''' are included, the leader will begin there regardless of keep location. If this side has a recall list from a previous level, then the recall list will be searched for a leader (using '''canrecruit=yes''') and if one is found it will be used instead of the one described in the '''[side]''' tag. Typical keys used for defining the leader unit are '''type''' (mandatory), '''id''', '''name''' and '''unrenamable=yes''', see [[SingleUnitWML]].&lt;br /&gt;
&lt;br /&gt;
* '''recruit''': a list of unit types. At the beginning of the scenario, the side gains recruitment of these units.&lt;br /&gt;
&lt;br /&gt;
* '''gold''': the starting gold for this side. Default 100. (If gold is carried over from a previous scenario, this value is the minimum starting gold.)&lt;br /&gt;
&lt;br /&gt;
* '''income''': the base income for this side, default 0. This is added to ''base_income'', '''[game_config]''' to determine the side's base income. (see [[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''hidden''': if 'yes', side is not shown in status table.&lt;br /&gt;
&lt;br /&gt;
* '''fog''': if 'yes', this side cannot see any tiles it is not within vision of, except at the start. Please note that the AI currently ignores the fog.&lt;br /&gt;
&lt;br /&gt;
* '''fog_data''': describes the area which this team has de-fogged, using the same format as shroud_data. (This is not particularly useful when defining a side, though, as the game will recalculate fog as turns begin and end. {{DevFeature1.11}}It is used in saved games.)&lt;br /&gt;
&lt;br /&gt;
* '''[fog_override]''' {{DevFeature1.11}} With keys x= and y=, this records the hexes that have been cleared (multiturn) with {{tag|DirectActionsWML|lift_fog}}.&lt;br /&gt;
&lt;br /&gt;
* '''shroud''': if 'yes', this side cannot see any tiles it has not moved within sight of. Please note that the AI currently ignores the shroud. NOTE: with shroud=no, this team *ignores* shroud, so it is not possible to modify it using place_shroud and remove_shroud tags. If you want to do so, use &amp;quot;shroud=yes&amp;quot; and place_shroud/remove_shroud tags.&lt;br /&gt;
&lt;br /&gt;
* '''shroud_data''': describes the area which this team has de-shrouded. An example:&lt;br /&gt;
 |&lt;br /&gt;
 |00011111000&lt;br /&gt;
:This would leave the first column on the map unaltered and would change the second column for 11 tiles. A '0' means: shrouded, '1' means unshrouded. You can either call an external file using {@filename}  (see [[PreprocessorRef]]) or place the data in quotes. For making an external file see [[BuildingScenariosShroudData]].&lt;br /&gt;
&lt;br /&gt;
* '''persistent''': whether the side exists in any other scenarios. If ''yes'', then ''save_id'' (see below) is used to identify the side in other scenarios. Defaults to ''yes'' for sides with a human controller, and ''no'' for ai controlled sides.&lt;br /&gt;
&lt;br /&gt;
* '''save_id''': defaults to the leader's ''id'' if available, 'Unknown' otherwise. The ID of the side with respect to the previous and next scenarios. Used to carry over the side's recall list (including the side's leader), recruitment list, and starting gold from scenario to scenario. Also used for the side's displayed name in the victory gold-calculation dialog. (For versions prior to 1.7.3, some extra effort to retrieve carryover information may be needed. See [[SideSwitchingWML]])&lt;br /&gt;
&lt;br /&gt;
* '''team_name''': a non translatable string representing the team's description. Sides with the same team_name are allied. Default ''side''. ''team_name'' is now a comma-separated list of teams that the side is on.&lt;br /&gt;
&lt;br /&gt;
* '''user_team_name''': a translatable string representing the team's description. This has no effect on alliances. Default ''team_name''.&lt;br /&gt;
&lt;br /&gt;
* '''current_player''': a translatable string representing the player's or leader's name. Defaults to the leader's id; if the side's leader is a human player in multiplayer, the default is the player's username.&lt;br /&gt;
&lt;br /&gt;
* '''color''': May be either a numeric color index or a color name (e.g. 'blue', 'purple', 'orange', etc.).  The numeric form is deprecated. The default list of numbers and corresponding colors can be found in data/core/team_colors.cfg.&lt;br /&gt;
&lt;br /&gt;
* '''flag''': a custom flag animation to use instead of the default one to mark captured villages. An automatic side-coloring is applied.&lt;br /&gt;
** Example animation that has three frames and loops every 750ms: ''flag=misc/myflag-1.png:250,misc/myflag-2.png:250,misc/myflag-3.png:250''&lt;br /&gt;
&lt;br /&gt;
* '''flag_icon''': a custom flag icon to indicate the side playing in the statusbar (a size of 24x16 is recommended). An automatic side-coloring is applied.&lt;br /&gt;
&lt;br /&gt;
* '''village_gold''': the amount of gold given to this side per village it controls per turn. Default specified in ''village_income'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''village_support''': {{DevFeature1.11}} the number of unit levels this side is able to support (does not pay upkeep on) per village it controls. Default specified in ''village_support'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''recall_cost''': the amount of gold it costs to recall a unit. Default specified in ''recall_cost'', '''[game_config]''' ([[GameConfigWML]]).&lt;br /&gt;
&lt;br /&gt;
* '''share_maps''': whether sides allied with this side see all terrains that this side sees, if they are on shroud.&lt;br /&gt;
&lt;br /&gt;
* '''share_view''': whether sides allied with this side see the units that this side sees, if they are on FoW (fog).&lt;br /&gt;
&lt;br /&gt;
* '''scroll_to_leader''': optional. If 'no', scroll to the leader is not performed on the start of each turn. (default: yes)&lt;br /&gt;
&lt;br /&gt;
* '''suppress_end_turn_confirmation''': {{DevFeature1.11}} If &amp;quot;yes&amp;quot;, then the player will not be asked to confirm ending their turn even if they have not done anything. This is provided for some (probably few) user-made scenarios in which players often skip their turns. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''[ai]''' if '''controller=ai''', gives parameters to the AI. See [[AiWML]].&lt;br /&gt;
&lt;br /&gt;
* '''[village]''' describes a village the side begins in control of.&lt;br /&gt;
** ''x'', ''y'' the location of the village. If the pair of coordinates is not a village or is duplicated in another [village] tag, behaviour is undefined. Recent game engine or wmllint should warn about these.&lt;br /&gt;
&lt;br /&gt;
* '''[unit]''' describes a unit which begins on the side. See [[SingleUnitWML]]. If the side has a recall list and the unit is not given a location, it will start on the recall list. Note that the ''side'' attribute under '''[unit]''' will be ignored, as the side will come from the ''side'' attribute of '''[side]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following keys are multiplayer only:&lt;br /&gt;
&lt;br /&gt;
* '''allow_player''': if false then this side will not be allowed to be modified and will be hidden during game creation. (default: no if controller is ai, otherwise yes)&lt;br /&gt;
&lt;br /&gt;
* '''disallow_observers''': prevents observers from seeing this side turn. (default: no)&lt;br /&gt;
&lt;br /&gt;
* '''team_lock''': if true then this side's team is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''color_lock''': if true then this side's color is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''gold_lock''': if true then this side's gold is not allowed to be modified. &lt;br /&gt;
&lt;br /&gt;
* '''income_lock''': if true then this side's income is not allowed to be modified.&lt;br /&gt;
&lt;br /&gt;
* '''faction''': this lock this side to this faction.&lt;br /&gt;
&lt;br /&gt;
* '''faction_from_recruit''': if true then this side will be locked to the faction that matches the recruits better.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[EraWML]]&lt;br /&gt;
* [[ScenarioWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=50951</id>
		<title>MultiplayerContent</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=50951"/>
		<updated>2013-05-07T11:51:30Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide is intended for version '''1.6.4 and higher'''.&lt;br /&gt;
&lt;br /&gt;
A forum thread about multiplayer campaigns in older versions can be found [http://www.wesnoth.org/forum/viewtopic.php?t=11349 here].&lt;br /&gt;
&lt;br /&gt;
= Building multiplayer campaigns =&lt;br /&gt;
&lt;br /&gt;
Both the stable and development versions of wesnoth have basic support for campaigns that can be played in multiplayer mode, with your friends, or even with an AI.  There will still be some things that don't work as expected as multiplayer campaigns are an area for exploration. While you can and should test your work in hotseat mode, there are a number of things that might behave differently under real network conditions (mostly affecting scenario and side parameters). Keep this in mind and make sure to test your campaign over the net, too.&lt;br /&gt;
This page only documents the differences between writing multiplayer campaigns and single player campaigns, so you might want to read up on [[BuildingCampaigns]] and [[BuildingMultiplayer]] first.&lt;br /&gt;
&lt;br /&gt;
== The campaign file ==&lt;br /&gt;
&lt;br /&gt;
Multiplayer campaigns do not use the [campaign] tag. As a result of this, multiplayer campaigns only support one difficulty level, though you could support more with enough WML, if you're feeling ambitious. The &amp;quot;campaign file&amp;quot; should look something like this:&lt;br /&gt;
&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~add-ons/My_Campaign/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 #Only needed if you have custom units&lt;br /&gt;
 [+units]&lt;br /&gt;
     {~add-ons/My_Campaign/units}&lt;br /&gt;
 [/units]&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Anything that you would normally put in the campaign tag now goes into the first scenario, if it's supported there. The order of scenarios is determined by next_scenario tags, just like in single player.&lt;br /&gt;
&lt;br /&gt;
== Scenarios ==&lt;br /&gt;
&lt;br /&gt;
A scenario in a multiplayer campaign is almost identical to a scenario in a single player campaign. You only need to change the following:&lt;br /&gt;
&lt;br /&gt;
* The [scenario] tag should be replaced with a [multiplayer] tag.&lt;br /&gt;
* The '''next_scenario''' key points to the id of the next scenario.&lt;br /&gt;
* Every scenario after the first should have '''allow_new_game=no''' inside the [multiplayer] tag. This will prevent it from showing up in the map selection menu. &lt;br /&gt;
* Each human-controlled side needs to have a '''controller=human''' key defined in their [side] tag to work in network mode.&lt;br /&gt;
* Each human-controlled side also needs to have a '''save_id''' defined inside their [side] tag. Each side's save_id should be unique, and it should be the same in every scenario. Without this, your recall lists and leaders will not carry over from one scenario to the next.&lt;br /&gt;
* If you want to carry over information for ai sides, they need to have a '''save_id''' defined and '''persistent=yes''' in their [side] tag.&lt;br /&gt;
* Each human-controlled side has to have a leader '''type=''' definition in every scenario except the first one . It doesn't matter which type you choose cause the type set here gets replaced by the actual leader in the recall list. &lt;br /&gt;
* If you want player's leaders to be recalled, you should either recall all units which can recruit or assign id attribute for them (unique for each leader, the same in each scenario - e.g. &amp;quot;p1&amp;quot; for leader of player 1, &amp;quot;p2&amp;quot; for leader of player 2). See [[http://forum.wesnoth.org/viewtopic.php?p=405807#p405807]] &lt;br /&gt;
* If you have a file containing macros, it must be referenced by every scenario, since there is no proper campaign file to include it from.&lt;br /&gt;
&lt;br /&gt;
== The first scenario ==&lt;br /&gt;
&lt;br /&gt;
* To ensure that your scenario settings are not overwritten by the settings from the multiplayer dialog, check '''use map settings''' when creating the game.&lt;br /&gt;
&lt;br /&gt;
* If any setttings are still taken from the multiplayer dialog, it is possible to overwrite them in the prestart event. Useful tags include [set_recruit], [modify_side], [modify_turns] and [remove_shroud]. There is currently no way to remove fog. You might also want to use ''experience_modifier=100'' in the [multiplayer] tag.&lt;br /&gt;
&lt;br /&gt;
* Deactivate the '''Quick replays''' setting (in the multiplayer lobby), or the [story] tags will not display for you.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.wesnoth.org/forum/viewtopic.php?t=11349 Multiplayer Campaigns HOWTO forum post]&lt;br /&gt;
* [[BuildingScenarios]]&lt;br /&gt;
* [[BuildingMultiplayer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Create]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50907</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50907"/>
		<updated>2013-05-04T20:37:52Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Specifies multiplayer campaign&lt;br /&gt;
     # starting points (scenarios) in order&lt;br /&gt;
     # they should appear to the user.&lt;br /&gt;
     entry_points = scenario_id1,scenario_id3,scenario_id5&lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
TODO: is it okay to re-parse WML when creating a mp game? if yes, how to boost the loading speed? if no, how to add properly working difficulties for mp without using defines?&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'entry_points' attributes. The [multiplayer] tag would be removed. However 'MULTIPLAYER' define would still be used, but would play a less important role i.e. it would only be used to make adjustements between singleplayer and multiplayer in hybrid campaigns. Additionally, stand-alone multiplayer scenarios would be treated as single scenario multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at a loading time of game configs and upgrade all configs identified as an old multiplayer WML. Additionally, the upgrader utility should also wrap eras around with unique defines.&lt;br /&gt;
&lt;br /&gt;
:TODO&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario]&lt;br /&gt;
:* #ifdef MULTIPLAYER -&amp;gt; [campaing]..[/campaign] #ifdef CAMPAIGN_NAME .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** entry_points would be populated by scenarios which would not have 'allow_new_game=no'&lt;br /&gt;
:** fields such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
:* [era]..[/era] -&amp;gt; #ifdef ERA_ID [era]..[/era] #endif&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is created. However, since game loading speed is very important for multiplayer games, some adjustments would have to be made. When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every campaign and using that path to load everything under that directory.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and causes small, but important and undesirable gameplay changes (e.g. wrong carryover or xp calculations). To address those issues, multiplayer game saves storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with 'entry_points' has more than one attribute), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify controllers to load multiplayer games using CampaignWML and ScenarioWML.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|&amp;lt;s&amp;gt;Remove 'scoped_preproc_define's for 'MULTIPLAYER'. All things which depend on it will break and have to be fixed and adjusted to work with the new syntax.&amp;lt;/s&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Game lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'entry_points' attributes. Multiplayer campaigns and scenarios would be separated as well. This modification would allow to display only relevent campaigns and scenarios in singleplayer and multiplayer game lists.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definetely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect oppurtunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50906</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50906"/>
		<updated>2013-05-04T20:21:09Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: timeline and game engine adjustments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save and restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
     # Specifies multiplayer campaign&lt;br /&gt;
     # starting points (scenarios) in order&lt;br /&gt;
     # they should appear to the user.&lt;br /&gt;
     entry_points = scenario_id1,scenario_id3,scenario_id5&lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAMPAIGN_SYMBOL&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 #endif&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
TODO: is it okay to re-parse WML when creating a mp game? if yes, how to boost the loading speed? if no, how to add properly working difficulties for mp without using defines?&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'entry_points' attributes. The [multiplayer] tag would be removed. However 'MULTIPLAYER' define would still be used, but would play a less important role i.e. it would only be used to make adjustements between singleplayer and multiplayer in hybrid campaigns. Additionally, stand-alone multiplayer scenarios would be treated as single scenario multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the utility responsible for upgrading old multiplayer games will have to be implemented. It should be called at a loading time of game configs and upgrade all configs identified as an old multiplayer WML. Additionally, the upgrader utility should also wrap eras around with unique defines.&lt;br /&gt;
&lt;br /&gt;
:TODO&lt;br /&gt;
:&amp;lt;u&amp;gt;Upgrader's functionality:&amp;lt;/u&amp;gt;&lt;br /&gt;
:* [multiplayer] -&amp;gt; [scenario]&lt;br /&gt;
:* #ifdef MULTIPLAYER -&amp;gt; [campaing]..[/campaign] #ifdef CAMPAIGN_NAME .. #endif (only in '_main.cfg')&lt;br /&gt;
:** campaign_type=&amp;quot;mp&amp;quot;&lt;br /&gt;
:** entry_points would be populated by scenarios which would not have 'allow_new_game=no'&lt;br /&gt;
:** fields such as 'id' and 'name' would be set up by path to campaign&lt;br /&gt;
:** all other non-mandatory fields would be left empty&lt;br /&gt;
:* [era]..[/era] -&amp;gt; #ifdef ERA_ID [era]..[/era] #endif&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. This would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Configs loading&lt;br /&gt;
:The game configs for all multiplayer games are currently loaded when &amp;quot;Multiplayer&amp;quot; option is chosen from the main menu. The proposed solution would allow to avoid that, because multiplayer campaigns would have their own campaign define and would be loaded with appropriate difficulty only once game is created. However, since game loading speed is very important for multiplayer games, some adjustments would have to be made. When creating a game, instead of loading all WML again, we would have to load only a particular campaign we are interested. This would be done by keeping track of path to '_main.cfg' for every campaign and using that path to load everything under that directory.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and causes small, but important and undesirable gameplay changes (e.g. wrong carryover or xp calculations). To address those issues, multiplayer game saves storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;dl/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with 'entry_points' has more than one attribute), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax. This is going to happen gradually, along with game engine improvements, but it should be finally ported and polished at this time.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks and/or tasks from [[SoC2013_thunderstruck_MP_Campaign_Support#Additional_Improvements|Additional Improvements]] section.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update relevant wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify controllers to load multiplayer games using CampaignWML and ScenarioWML.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|&amp;lt;s&amp;gt;Remove 'scoped_preproc_define's for 'MULTIPLAYER'. All things which depend on it will break and have to be fixed and adjusted to work with the new syntax.&amp;lt;/s&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Loading game configs&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve game configs loading time by introducing a loading mechanism which would only load configs under specific sub-directory (path to campaign's '_main.cfg').&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Game lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'entry_points' attributes. Multiplayer campaigns and scenarios would be separated as well. This modification would allow to display only relevent campaigns and scenarios in singleplayer and multiplayer game lists.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| style=white-space:nowrap | Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing in order to fix current issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definetely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
&amp;lt;!--* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect oppurtunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://github.com/wesnoth/wesnoth-old/commit/91faffb79fb18985aae7a6c582d908a074f401c5 91faffb]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50692</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50692"/>
		<updated>2013-04-30T19:28:40Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: added save/restore stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save/restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot; &lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
 &lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     # Indicates a stand-alone multiplayer scenario&lt;br /&gt;
     # or campaign entry point.&lt;br /&gt;
     # Optional. 'yes' will be used as a default value.&lt;br /&gt;
     allow_new_game=yes&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'allow_new_game' attributes.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the class responsible for upgrading old multiplayer games will have to be made. It should be called at loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. That would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:Wesnoth's multiplayer users experience several issues with save/restore games. Most of those issues are not immediately visible and causes small, but important and undesirable gameplay changes (e.g. wrong carryover or xp calculations). To address those issues, multiplayer game saves storing needs to be carefully reviewed and improved. Furthermore, the stricter check for OOS could be made to make it easier to notice save/restore issues.&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&lt;br /&gt;
:''after:''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with allow_new_game=yes), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks.&lt;br /&gt;
:* 'Additional Improvements'.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
TODO:more concrete descriptions, better ordering, more optional tasks&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify controllers to load multiplayer games using CampaignWML and ScenarioWML.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove scoped_preproc_define for 'MULTIPLAYER'. All things which depend on it will break and have to be fixed and adjusted to work with the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Re-enable multiplayer games to be started from command line.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Game lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'allow_new_game' attributes. Multiplayer campaigns and scenarios would be separated as well. This modification would allow to display only relevent campaigns and scenarios in singleplayer and multiplayer game lists.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it in create window.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the same window as a button. Add drop-down box or dialog for choosing difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Save and restore 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Identify current issues.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Save and restore 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Improve multiplayer save games storing.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Save and restore 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement stricter checks for OOS and fix any new observed issues.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
TODO:&amp;lt;br /&amp;gt;&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definetely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect oppurtunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50663</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50663"/>
		<updated>2013-04-30T08:10:17Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save/restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot; &lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
 &lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     # Indicates a stand-alone multiplayer scenario&lt;br /&gt;
     # or campaign entry point.&lt;br /&gt;
     # Optional. 'yes' will be used as a default value.&lt;br /&gt;
     allow_new_game=yes&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'allow_new_game' attributes.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the class responsible for upgrading old multiplayer games will have to be made. It should be called at loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. That would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:TODO:&lt;br /&gt;
*loading the game from the non-host won't let to finish scenario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;Multiplayer screens logic&amp;lt;/u&amp;gt;&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&lt;br /&gt;
:''after:''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with allow_new_game=yes), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Known Obstacles===&lt;br /&gt;
TODO:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks.&lt;br /&gt;
:* 'Additional Improvements'.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
TODO:more concrete descriptions, better ordering&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify controllers to load multiplayer games using CampaignWML and ScenarioWML.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove scoped_preproc_define for 'MULTIPLAYER'. All things which depend on it will break and have to be fixed and adjusted to work with the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Re-enable multiplayer games to be started from command line.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Game lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'allow_new_game' attributes. Multiplayer campaigns and scenarios would be separated as well. This modification would allow to display only relevent campaigns and scenarios in singleplayer and multiplayer game lists.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it create window.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the save window as a button. Add drop-down box/dialog for difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|TODO:Save/restore&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|desc&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
TODO:&amp;lt;br /&amp;gt;&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definetely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect oppurtunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50645</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50645"/>
		<updated>2013-04-29T20:43:52Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: update goals and other minor changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaign improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save/restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot; &lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
 &lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     # Indicates a stand-alone multiplayer scenario&lt;br /&gt;
     # or campaign entry point.&lt;br /&gt;
     # Optional. 'yes' will be used as a default value.&lt;br /&gt;
     allow_new_game=yes&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'allow_new_game' attributes.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the class responsible for upgrading old multiplayer games will have to be made. It should be called at loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. That would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:TODO:&lt;br /&gt;
*loading the game from the non-host won't let to finish scenario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
;'''''Multiplayer screens logic'''''&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&lt;br /&gt;
:''after:''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with allow_new_game=yes), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Known Obstacles===&lt;br /&gt;
TODO:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks.&lt;br /&gt;
:* 'Additional Improvements'.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
TODO:more concrete descriptions, better ordering&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify controllers to load multiplayer games using CampaignWML and ScenarioWML.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove scoped_preproc_define for 'MULTIPLAYER'. All things which depend on it will break and have to be fixed and adjusted to work with the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Re-enable multiplayer games to be started from command line.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Game lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'allow_new_game' attributes. Multiplayer campaigns and scenarios would be separated as well. This modification would allow to display only relevent campaigns and scenarios in singleplayer and multiplayer game lists.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it create window.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the save window as a button. Add drop-down box/dialog for difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|TODO:Save/restore&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|desc&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
TODO:&amp;lt;br /&amp;gt;&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definetely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect oppurtunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50563</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50563"/>
		<updated>2013-04-29T09:44:05Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaigns improvements (draft)&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save/restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot; &lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
 &lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     # Indicates a stand-alone multiplayer scenario&lt;br /&gt;
     # or campaign entry point.&lt;br /&gt;
     # Optional. 'yes' will be used as a default value.&lt;br /&gt;
     allow_new_game=yes&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'allow_new_game' attributes.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the class responsible for upgrading old multiplayer games will have to be made. It should be called at loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. That would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:TODO:&lt;br /&gt;
*loading the game from the non-host won't let to finish scenario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
;'''''Multiplayer screens logic'''''&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&lt;br /&gt;
:''after:''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with allow_new_game=yes), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Known Obstacles===&lt;br /&gt;
TODO:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Extensive testing of implemented things.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks.&lt;br /&gt;
:* 'Additional Improvements'.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
TODO:more concrete descriptions, better ordering&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable to load multiplayer games using CampaignWML and ScenarioWML. Involves tweaking playcampaign.cpp and game controllers.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Command line&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Re-enable multiplayer games to be started from command line.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Games lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'allow_new_game' attributes. Multiplayer campaigns and scenarios would be separated as well.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|GUI2 drop-down box&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;OPTIONAL&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a drop-down box for GUI2 in order to use it create window.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the save window as a button. Add drop-down box/dialog for difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|TODO:Save/restore&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|desc&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
TODO:&amp;lt;br /&amp;gt;&lt;br /&gt;
Since a whole dedicated summer for multiplayer improvements sounds like a lot, it definetely won't fix all things need to be fixed and won't implement all desirable features. So I think it is worth to note some thoughts on the possible significant (more or less) changes of multiplayer in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* Allow 2 or more players to play the same side by splitting units among them. Suggested [http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683#p551723 here].&lt;br /&gt;
* Enable communal choices. Suggested in the same post as above.&lt;br /&gt;
* Improve multiplayer loading time. The problem was described [https://gna.org/bugs/?11503 here].&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
===1) Basics===&lt;br /&gt;
'''1.1) Write a small introduction to yourself.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Hello, my name is Andrius Silinskas and I am an enthusiastic programmer. I would describe myself as a keen and curious person. I enjoy working in many areas of Computer Science but I have not yet found the one which interests me the most. My current goal is to find it and be great at it.&lt;br /&gt;
&lt;br /&gt;
'''1.2) State your preferred email address.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
silinskas.andrius [at] gmail [dot] com&lt;br /&gt;
&lt;br /&gt;
'''1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
'''1.4) Why do you want to participate in summer of code?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I like to solve problems. Summer of code seems a perfect oppurtunity for this, because then I would be able to dedicate my whole time for it and meanwhile I could also do something useful to others.&lt;br /&gt;
&lt;br /&gt;
'''1.5) What are you studying, subject, level and school?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have just finished my 2nd year at Heriot-Watt University in the United Kingdom. I am studying Computer Science there.&lt;br /&gt;
&lt;br /&gt;
'''1.6) What country are you from, at what time are you most likely to be able to join IRC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am from Lithuania, but I live in the UK now. I lurk on IRC all day, so that would be 7 - 23 in UTC.&lt;br /&gt;
&lt;br /&gt;
'''1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I don't have any other commitments, but I plan to go for a week or two to Lithuania. However, I would still be able to dedicate the required amount of time while being there.&lt;br /&gt;
&lt;br /&gt;
===2) Experience===&lt;br /&gt;
'''2.1) What programs/software have you worked on before?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Most of the programming I did was for university's assignments or my own small projects. Some of them:&lt;br /&gt;
* Whilst learning Python I developed a countdown timer with numerous features using Gtk+. &lt;br /&gt;
* For the Coursera's online course I wrote a lexer and parser for &amp;quot;COOL&amp;quot; programming language using Java.&lt;br /&gt;
* As an exercise I developed an audio recording/playing application using a low level API in C++.&lt;br /&gt;
* For the university's assignment I wrote a simple spell checker program with my own implemented Hash Table data structure in Java.&lt;br /&gt;
&lt;br /&gt;
'''2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I was developing software in a team for a few assignments at university. Although they didn't involve much work, I gained a good idea about developing a software in a team.&lt;br /&gt;
&lt;br /&gt;
'''2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, it is my first time.&lt;br /&gt;
&lt;br /&gt;
'''2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No, I am not.&lt;br /&gt;
&lt;br /&gt;
'''2.5) Gaming experience - Are you a gamer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I consider myself a casual gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.1) What type of gamer are you?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Usually, when I play games I tend to explore as much as possible and find a most efficient way to complete a certain level, mission or some task of the game. I guess that means that I am an exploring type of gamer.&lt;br /&gt;
&lt;br /&gt;
'''2.5.2) What type of games?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly prefer games which are rather simple in their rules, but allow great possibilities and complexity later on. As for now, World of Goo and Wesnoth (at least in principle) are the games which are like that. I also really enjoy playing a bord game GO, because of the same thing.&lt;br /&gt;
&lt;br /&gt;
'''2.5.3) What type of opponents do you prefer?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I prefer opponents whose behaviour is hard to predict, who sometimes do really good and who sometimes do mistakes. In other words, I like my opponents to be as similar to humans as possible.&lt;br /&gt;
&lt;br /&gt;
'''2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
As they are both vital to a good game, it is hard to tell which interests me more. But I would probably say story, because story alone is something (e.g. a book), while gameplay alone would get boring soon.&lt;br /&gt;
&lt;br /&gt;
'''2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Yes, I have. I know the game for about 2 years, but I haven't played it regularly all the time. Although I had peaks where I played Wesnoth quite a lot.&lt;br /&gt;
I would lean towards single player, because it has a better story and seems to be more finished.&lt;br /&gt;
&lt;br /&gt;
'''2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3769 #3769]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3777 #3777] (not reviewed yet)&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3844 #3844]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://gna.org/patch/?3862 #3862] (closed by my request, but it still shows my involvement in Wesnoth)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3) Communication skills===&lt;br /&gt;
'''3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My English grammar is still not perfect, but I don't have problems whatsoever while communicating in English.&lt;br /&gt;
&lt;br /&gt;
'''3.2) What spoken languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
English and Lithuanian.&lt;br /&gt;
&lt;br /&gt;
'''3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I am. I have been playing MMO games in the past and I was successful at interacting with other players. I've also been a game master for a MMORPG where I had to interact with the players and they were not always nice.&lt;br /&gt;
&lt;br /&gt;
'''3.4) Do you give constructive advice?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At least most of the time, yes. I always try to be positive when giving any sort of advice.&lt;br /&gt;
&lt;br /&gt;
'''3.5) Do you receive advice well?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I think I do. I tend to carefully listen to advice I get.&lt;br /&gt;
&lt;br /&gt;
'''3.6) Are you good at sorting useful criticisms from useless ones?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
That is hard to tell, but I always give a thought about criticism I receive and I think I cope well with it.&lt;br /&gt;
&lt;br /&gt;
'''3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I would say I am quite autonomous but I don't mind discussing with others when it is needed either. I tend to try to do things on my own as much as possible and then discuss what is not clear to me.&lt;br /&gt;
&lt;br /&gt;
===4) Project===&lt;br /&gt;
'''4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I've selected 'Game Engine: Improve Multiplayer Campaign Support' project.&lt;br /&gt;
&lt;br /&gt;
'''4.2) If you have invented your own project, please describe the project and the scope.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
'''4.3) Why did you choose this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
As I have already stated, I like solving problems. It seems that this project is rather an interesting problem due to lots of different aspects involved. And I would also like to make multiplayer better, since as I have already said that singleplayer surpasses multiplayer.&lt;br /&gt;
&lt;br /&gt;
'''4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#Timeline|Timeline]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.5) Include as much technical detail about your implementation as you can'''&amp;lt;br /&amp;gt;&lt;br /&gt;
See [[SoC2013_thunderstruck_MP_Campaign_Support#The_Project|The Project]] section.&lt;br /&gt;
&lt;br /&gt;
'''4.6) What do you expect to gain from this project?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Apart from gaining more experience and improving my technical skills, I expect to get involved in Open Source community and have a great time.&lt;br /&gt;
&lt;br /&gt;
'''4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
I probably risk to sound like a guy who is promising in order to be accepted, but I already feel like staying with Wesnoth from what I have already experienced.&lt;br /&gt;
&lt;br /&gt;
===5) Practical considerations===&lt;br /&gt;
'''5.1) Are you familiar with any of the following tools or languages?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
''Git (used for all commits)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I am new to Git and still learning, but I know my way around pretty well.&lt;br /&gt;
&lt;br /&gt;
''C++ (language used for all the normal source code)''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since C++ is such a big language, I can't say that I already know it very well, but I feel confident using it for this project.&lt;br /&gt;
&lt;br /&gt;
''STL, Boost, Sdl (C++ libraries used by Wesnoth)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have some experience with Boost and STL, but not Sdl.&lt;br /&gt;
&lt;br /&gt;
''Python (optional, mainly used for tools)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I haven't programmed with it recently, but I know it quite well.&lt;br /&gt;
&lt;br /&gt;
''build environments (eg cmake/scons)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I mostly use scons (for Wesnoth), but I have used cmake sometimes as well.&lt;br /&gt;
&lt;br /&gt;
''WML (the wesnoth specific scenario language)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I have learnt some of it while preparing my proposal, creating a few small scenarios for fun and while fixing some bugs. I think, I have a grasp of it.&lt;br /&gt;
&lt;br /&gt;
''Lua (used in combination with WML to create scenarios)''&amp;lt;br /&amp;gt;&lt;br /&gt;
I know basics.&lt;br /&gt;
&lt;br /&gt;
'''5.2) Which tools do you normally use for development? Why do you use them?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
At the moment, I am in transition to move from GUI development tools to Vim + terminal combination. Although I am still not as efficient as I would want to be, it works pretty well for me. My computer runs Linux.&lt;br /&gt;
&lt;br /&gt;
'''5.3) What programming languages are you fluent in?'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Java - mostly used in university.&amp;lt;br /&amp;gt;&lt;br /&gt;
C/C++ and Python - learned on my own.&amp;lt;br /&amp;gt;&lt;br /&gt;
PHP, JavaScript, Pascal - I know the basics and a bit more.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
No problem at all.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50486</id>
		<title>SoC2013 thunderstruck MP Campaign Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC2013_thunderstruck_MP_Campaign_Support&amp;diff=50486"/>
		<updated>2013-04-27T18:03:07Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Created page with '{{SoC2013Student}} Category:SoC Ideas Multiplayer Campaign Support 2013  ==Description== &amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaigns improvements (draft)&amp;lt;/h…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Andrius Silinskas (thunderstruck) - Multiplayer campaigns improvements (draft)&amp;lt;/h4&amp;gt;&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support. I propose a project to improve overall quality of multiplayer games by enabling singleplayer campaigns to be used as multiplayer campaigns and fixing most of the well known issues. The old multiplayer campaigns and scenarios should remain supported.&lt;br /&gt;
&lt;br /&gt;
==The Project==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The singleplayer campaign support surpasses multiplayer support because of the complexity involved in multiplayer codepath. As a result of this, not all important features are yet supported in multiplayer games and there are some blocking bugs which greatly affect the quality of the game. To address these issues, multiplayer campaigns should make use of CampaignWML and ScenarioWML. This use of new syntax would allow to use singleplayer campaigns and scenarios as multiplayer ones and vice versa. It would also make a ground to implement features missing in multiplayer e.g. difficulties and extra defines.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the relevant GUI elements should be improved and/or new ones introduced to cope with the game engine changes and allow better multiplayer experience from the user's perspective. The save/restore issues should be fixed as well and be of high priority since it is a problem for most of the multiplayer community.&lt;br /&gt;
&lt;br /&gt;
This approach would increase an overall quality of playing multiplayer games and developing or maintaining them. The LoW campaign would be ported to the new syntax during the project.&lt;br /&gt;
&lt;br /&gt;
===WML syntax changes===&lt;br /&gt;
'''''Multiplayer campaign file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~path/to/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 # details ommited..&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [campaign]&lt;br /&gt;
     # Indicates how campaign is allowed to play. Possible values: 'sp', 'mp', 'both'. &lt;br /&gt;
     # Optional. 'sp' will be used as a default value.&lt;br /&gt;
     campaign_type=&amp;quot;mp&amp;quot; &lt;br /&gt;
     &lt;br /&gt;
     # details ommited..&lt;br /&gt;
 [/campaign]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Scenario file'''''&lt;br /&gt;
----&lt;br /&gt;
''before:''&lt;br /&gt;
 [multiplayer]&lt;br /&gt;
 &lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
 [/multiplayer]&lt;br /&gt;
&lt;br /&gt;
''after:''&lt;br /&gt;
 [scenario]&lt;br /&gt;
     # details ommited..&lt;br /&gt;
     &lt;br /&gt;
     # Indicates a stand-alone multiplayer scenario&lt;br /&gt;
     # or campaign entry point.&lt;br /&gt;
     # Optional. 'yes' will be used as a default value.&lt;br /&gt;
     allow_new_game=yes&lt;br /&gt;
     &lt;br /&gt;
     [side]&lt;br /&gt;
         # details ommited..&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to choose factions.&lt;br /&gt;
         # Optional. 'yes' will be used as a default value. &lt;br /&gt;
         custom_side=no&lt;br /&gt;
         &lt;br /&gt;
         # Specifies whether players should be allowed to modify an order of turns for the sides.&lt;br /&gt;
         # Optional. 'no' will be used as a default value.&lt;br /&gt;
         custom_turns=yes&lt;br /&gt;
         &lt;br /&gt;
         # These should be no longer neccessary:&lt;br /&gt;
         # save_id=1&lt;br /&gt;
         # persistent=yes&lt;br /&gt;
     [/side]&lt;br /&gt;
 [/scenario]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Game Engine Improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
;New syntax support&lt;br /&gt;
:Currently, engine recognizes singleplayer games by [campaign] and [scenario] tags and multiplayer games by 'MULTIPLAYER' define and [multiplayer] tag respectively. It should be modified so that it would load multiplayer games with only [campaign] and [scenario] tags and sort out what type of game it is by 'campaign_type' and 'allow_new_game' attributes.&lt;br /&gt;
&lt;br /&gt;
;Old syntax support&lt;br /&gt;
:After multiplayer game configs start to use CampaignWML and ScenarioWML, the old multiplayer games would stop to be supported. To cope with this issue and to not introduce a new codepath just to support the old configs, the class responsible for upgrading old multiplayer games will have to be made. It should be called at loading time of game configs and upgrade all configs identified as an old multiplayer WML.&lt;br /&gt;
&lt;br /&gt;
;Further new syntax support&lt;br /&gt;
:To enable multiplayer games to use 'difficulties' and 'extra_defines' attributes from CampaignWML, some parts responsible for singleplayer and multiplayer game set up would have to be merged. That would allow re-parsing of game config file and also setting up binary paths when creating a multiplayer game.&lt;br /&gt;
&lt;br /&gt;
;Saving and restoring&lt;br /&gt;
:TODO:&lt;br /&gt;
*loading the game from the non-host won't let to finish scenario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Players management&lt;br /&gt;
:The game engine is currently able to provide only a basic players management and only during the connection phase of a multiplayer game. That means users don't have flexibility to change players between multiplayer campaign scenarios unless they reload the game. In order to improve the players management, the connection phase of the multiplayer game will have to be modified. It would have to lock some options to prevent changes if they haven't been allowed by campaign's developer (custom sides and turns). And most importantly, play campaign loop will have to be modified so that it is possible to go from the end of the scenario to the connect window. In addition, non-host players should also see similar connect window, instead of the current wait window, but only be able to modify their side settings. This would allow better user experience and would simplify the current multiplayer screens logic.&lt;br /&gt;
&lt;br /&gt;
;'''''Multiplayer screens logic'''''&lt;br /&gt;
:''before (taken from the multiplayer.cpp):''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; wait    &amp;lt;-&amp;gt; (game)&lt;br /&gt;
&lt;br /&gt;
:''after:''&lt;br /&gt;
 lobby &amp;lt;-&amp;gt; create &amp;lt;-&amp;gt; connect_host   &amp;lt;-&amp;gt; (game)&lt;br /&gt;
 lobby &amp;lt;------------&amp;gt; connect_player &amp;lt;-&amp;gt; (game)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Additional players management&lt;br /&gt;
:The game engine could be improved to automatically suggest appropriate sides for the players. It would benefit campaign players, because if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot. However, players would still be able to swap sides. Furthermore, the host could be able to kick and invite players during the connection phase.&lt;br /&gt;
;SideWML&lt;br /&gt;
:Default values for 'allow_player' attribute should be added to make SideWML less redudant.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI improvements===&lt;br /&gt;
====Important====&lt;br /&gt;
----&lt;br /&gt;
;Create game window&lt;br /&gt;
:The current window which lets user to create a new multiplayer game mix the all multiplayer campaigns and scenarios into one list. What is more, it won't display campaign's name in that list, but the first scenario of the campaign instead (or more scenarios in some cases). It could be fixed by displaying campaign as a single list item. For the cases when there are multiple starting points (scenarios with allow_new_game=yes), all the scenarios should be displayed in the additional dialog if campaign is chosed to be played. In addition, there should be two separate lists for campaigns and scenarios and the &amp;quot;Load game&amp;quot; option should be moved from the maps list and be represented as a button. Furthermore, additional option for difficulties should be added along other game options as a drop-down box.&lt;br /&gt;
&lt;br /&gt;
;Connect window&lt;br /&gt;
:The current connect window would need to be modified so that it would be possible to disable/enable options for a non-host player. In this way, the window could be used not for only host player. After those modifications, wait window would no longer be necessary.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Not-so-important====&lt;br /&gt;
----&lt;br /&gt;
;Connect window&lt;br /&gt;
:Additionally, connect window could include buttons/drop-down boxes for the host to invite/kick players.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Known Obstacles===&lt;br /&gt;
TODO:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Additional Improvements===&lt;br /&gt;
&lt;br /&gt;
[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 Some other things] not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
And also there are some [http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs] who would be worth looking at.&lt;br /&gt;
&lt;br /&gt;
==Timeline==&lt;br /&gt;
;May 3 - May 27 (pre-GSoC):&lt;br /&gt;
:* Work on things related to the project, but on those who could benefit users immediately even if the project is not going to be done at all.&lt;br /&gt;
:* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
:* Exam period at the University.&lt;br /&gt;
&lt;br /&gt;
;May 27 - June 17 (community bonding period):&lt;br /&gt;
:* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
:* Start coding.&lt;br /&gt;
&lt;br /&gt;
;June 17 - July 25:&lt;br /&gt;
:* Game engine: new and old syntax support, save/restore issues.&lt;br /&gt;
:* GUI: create game window.&lt;br /&gt;
&lt;br /&gt;
;July 25 - August 2 (midterm evaluation):&lt;br /&gt;
:* Testing.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
;August 2 - August 10:&lt;br /&gt;
:* Game engine: players management.&lt;br /&gt;
:* GUI: connect window.&lt;br /&gt;
&lt;br /&gt;
;August 10 - September 16:&lt;br /&gt;
:* Testing.&lt;br /&gt;
:* Code clean-up and polish.&lt;br /&gt;
:* Implementing 'not-so-important' tasks.&lt;br /&gt;
:* 'Additional Improvements'.&lt;br /&gt;
&lt;br /&gt;
;September 16 - September 27 (final evaluation):&lt;br /&gt;
:* Fix any left blocking bugs.&lt;br /&gt;
:* Write documentation.&lt;br /&gt;
:* Update wiki pages.&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! ID&lt;br /&gt;
! NAME&lt;br /&gt;
! PRIORITY&lt;br /&gt;
! DESCRIPTION&lt;br /&gt;
! STATUS&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable to load multiplayer games using CampaignWML and ScenarioWML. Involves tweaking playcampaign.cpp and game controllers.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Refactor game controller&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Refactor parts of game_controller.*pp to unify the set up of singleplayer and multiplayer games. That would enable to re-parse multiplayer game configs and set up binary paths when game is loaded.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Games lists&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Sort out between singleplayer and multiplayer games using 'campaign_type' and 'allow_new_game' attributes. Multiplayer campaigns and scenarios would be separated as well.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a utility class to upgrade old multiplayer WML configs to the new syntax.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Use upgrader class to upgrade all relevant configs at a loading time.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer WML upgrade 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Write a script which uses upgrader to permanently upgrade stuff in 'data/multiplayer/'.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Add a new list for games to play and move campaigns to it, leaving scenarios in the previous one.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Create window 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Remove &amp;quot;Load game&amp;quot; option from the scenarios list and place it in the save window as a button. Add drop-down box (ask mordante) for difficulties. Connect GUI changes with relevant code.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Milestone 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|TODO:Save/restore&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|desc&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Milestone 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by July 25.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 1&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Modify playcampaign.*pp and multiplayer.*pp to display multiplayer connect window between multiplayer scenarios. Tweak the connect window to corectly respond to the new changes.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 2&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Enable engine to display multiplayer connect window instead of wait for non-host players. &lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Tweak engine to disable/lock relevant connect window options for host and non-host players.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Multiplayer screens 4&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;MANDATORY&amp;lt;/p&amp;gt;&lt;br /&gt;
|Implement a simple &amp;quot;I'm ready&amp;quot; system for connect windows. It would decide when to enable/disable &amp;quot;I'm ready&amp;quot; buttons and when to start a scenario.&lt;br /&gt;
|n/a&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Milestone 3&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color:green&amp;quot;&amp;gt;MILESTONE&amp;lt;/p&amp;gt;&lt;br /&gt;
|Everything above to be done by August 10.&lt;br /&gt;
|n/a&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Future Aspects==&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50485</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50485"/>
		<updated>2013-04-27T17:59:29Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50391</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50391"/>
		<updated>2013-04-22T18:22:24Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC Ideas Multiplayer Campaign Support 2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
# Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
# Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
# Enable network players management between scenarios.&lt;br /&gt;
# Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
# Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
# Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC ([http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 forum members opinions]).&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at ([http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]).&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50390</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50390"/>
		<updated>2013-04-22T18:21:10Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Undo revision 50389 by Thunderstruck (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
# Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
# Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
# Enable network players management between scenarios.&lt;br /&gt;
# Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
# Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
# Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC ([http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 forum members opinions]).&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at ([http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]).&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50389</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50389"/>
		<updated>2013-04-22T18:20:19Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck - Improve Multiplayer Campaign Support&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
# Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
# Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
# Enable network players management between scenarios.&lt;br /&gt;
# Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
# Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
# Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC ([http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 forum members opinions]).&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at ([http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]).&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50385</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50385"/>
		<updated>2013-04-22T17:31:51Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
# Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
# Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
# Enable network players management between scenarios.&lt;br /&gt;
# Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
# Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
# Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC ([http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 forum members opinions]).&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at ([http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]).&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50384</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50384"/>
		<updated>2013-04-22T17:30:36Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
# Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
# Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
# Enable network players management between scenarios.&lt;br /&gt;
# Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks (listed by the order of implementation):&lt;br /&gt;
# In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
# Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
# Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC ([[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 forum members opinions]]).&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at ([[http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]]).&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50383</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50383"/>
		<updated>2013-04-22T17:23:51Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be mainly based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks:&lt;br /&gt;
# Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
# Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
# Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
# Enable network players management between scenarios.&lt;br /&gt;
# Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks:&lt;br /&gt;
# In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
# Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
# Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Subject to change)&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
[[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 ideas]]&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at: [[http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50382</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50382"/>
		<updated>2013-04-22T17:21:26Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would fix a lot of bugs related to multiplayer campaign support and would improve the overall quality of multiplayer games in Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
The multiplayer campaign support project would consist mainly of two parts: engine and GUI modifications. Those changes would be mainly based on WML syntax changes and some other general improvements of multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
The higher priority tasks would enable LoW campaign to be ported to a new syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML syntax modifications&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose multiplayer factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* 'save_id' attributes should be omitted from [side] tags.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create multiplayer campaigns and solve the most important issues of multiplayer campaigns.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks:&lt;br /&gt;
1. Proper filtering of singleplayer and multiplayer campaigns using 'campaign_type' attribute to display them in appropriate dialogs and adjusting multiplayer create window accordingly.&lt;br /&gt;
2. Enable multiplayer campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
3. Refactor or fix the current save/restore code of multiplayer campaigns to fix known problems.&lt;br /&gt;
4. Enable network players management between scenarios.&lt;br /&gt;
5. Enable 'extra_defines' attribute to work when used in multiplayer.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Add default values for 'allow_player' attributes to make SideWML less redundant.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
Higher priority tasks:&lt;br /&gt;
1. In the multiplayer game 'maps to play' list, users should see only one option for one multiplayer campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but multiplayer campaign's name in that list option.&lt;br /&gt;
2. Difficulties should be allowed to be chosen in the multiplayer game create window along with other options.&lt;br /&gt;
3. Between every multiplayer campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
&lt;br /&gt;
Lower priority tasks:&lt;br /&gt;
* Players should not be allowed to choose any multiplayer factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Technical Considerations&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Subject to change)&lt;br /&gt;
&lt;br /&gt;
Here are some implementation details of major engine modifications.&lt;br /&gt;
&lt;br /&gt;
Multiplayer create window:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Difficulties:&lt;br /&gt;
To allow the game engine to use difficulties for multiplayer campaigns in the same way as for singleplayer campaigns, multiplayer create window and game settings should be adjusted to include proper GUI elements to display difficulty options and store/retrieve them.&lt;br /&gt;
&lt;br /&gt;
Save/restore:&lt;br /&gt;
&lt;br /&gt;
Players management:&lt;br /&gt;
The new players management window should be created or the old one adjusted and be displayed between multiplayer campaign scenarios. The new window should let players to swap sides, kick/invite new players and possibly adjust other settings.&lt;br /&gt;
&lt;br /&gt;
Extra defines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Known Problems&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Custom turns can be hard to implement due to scenarios having events or code tied to the side number.&lt;br /&gt;
* Synchronization for some tags ?&lt;br /&gt;
* The multiplayer campaigns written in the old way should still be compatible. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Additional improvements&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some other things not mentioned in the project could also be implemented to improve multiplayer campaigns support. They are of lower priorities than tasks mentioned in above and would be done at the very end if there is time left or possibly after GSoC.&lt;br /&gt;
&lt;br /&gt;
[[http://forums.wesnoth.org/viewtopic.php?f=15&amp;amp;t=38683 ideas]]&lt;br /&gt;
&lt;br /&gt;
And also there are some bugs who would be worth looking at: [[http://forums.wesnoth.org/viewtopic.php?f=10&amp;amp;t=38487 bugs]&lt;br /&gt;
&lt;br /&gt;
=Timeline=&lt;br /&gt;
&lt;br /&gt;
Now - May 27 (pre-GSoC):&lt;br /&gt;
* Work on things related to project, but on those who could benefit users immediately even if the project would not be done at all.&lt;br /&gt;
* Do a further research on project's implementation and make notes on that.&lt;br /&gt;
&lt;br /&gt;
May 27 - June 17 (Community bonding period):&lt;br /&gt;
* Resolve any ambiguities and issues (if any) with the project's proposal.&lt;br /&gt;
* Start coding.&lt;br /&gt;
&lt;br /&gt;
June 17 - early August:&lt;br /&gt;
* Implementing high priority tasks.&lt;br /&gt;
&lt;br /&gt;
early August - mid August:&lt;br /&gt;
* Testing.&lt;br /&gt;
* Fixing introduced bugs.&lt;br /&gt;
* Port LoW to the new syntax.&lt;br /&gt;
&lt;br /&gt;
mid August - 16 September&lt;br /&gt;
* Implementing lower priority tasks.&lt;br /&gt;
&lt;br /&gt;
16 September - 23 September&lt;br /&gt;
* Write documentation.&lt;br /&gt;
* Fix wiki pages.&lt;br /&gt;
* More testing.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC_Information_for_Google&amp;diff=50324</id>
		<title>SoC Information for Google</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC_Information_for_Google&amp;diff=50324"/>
		<updated>2013-04-20T18:30:31Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:SoC2013}}&lt;br /&gt;
&lt;br /&gt;
== SoC Information for Google ==&lt;br /&gt;
This is the information that we submit to google as Application in Summer of Code (current status: 2013). The submitter automatically becomes primary Admin. Most entries are mandatory and have to be filled out before the application can be submitted.&lt;br /&gt;
&lt;br /&gt;
==== Organization id ====&lt;br /&gt;
wesnoth&lt;br /&gt;
&lt;br /&gt;
==== Organization Name ====&lt;br /&gt;
Battle for Wesnoth&lt;br /&gt;
&lt;br /&gt;
==== Organization description ====&lt;br /&gt;
&amp;lt;code type=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Battle for Wesnoth&amp;lt;/em&amp;gt;, or simply &amp;lt;em&amp;gt;Wesnoth&amp;lt;/em&amp;gt;, is a free, turn-based strategy game with role-playing elements that was designed in June 2003 by David White (Sirp).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Although the core rules are fairly simple and meant to be easily learned[1], they provide interesting gameplay and rich tactical options. A major strength of the project is the Wesnoth Markup Language (WML) for writing scenarios. Programming skills are not required to compose with it, and a large WML-modding community has generated a great deal of user-maintained content. We polish the best of this content and lift it into our official release tree.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The first stable release (1.0) was on October 2, 2005, and the latest stable release (1.10.6) happened in March 2013. Version 1.10 was released in January 2012,  while the current development branch is 1.11.2 that was released earlier this month.  We're later in our development cycle, but there are some good projects out there that students can work on.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Wesnoth&amp;lt;/em&amp;gt; is one of the most successful open-source game projects in existence, with an exceptionally large developer base and user community:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;According to Ohloh, a site that collects activity statistics on open-source projects, the ''Wesnoth'' development effort is in the top 2% of largest and most active projects&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;We support two multiplayer game servers (stable and development) with a usual minimum load of more than a hundred players&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;More than two thousand downloads a day&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;6 million downloads via SourceForge; many more via various mirrors of Linux distributions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Best rated game at the Linux Game Tome[2]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Game of the year 2007, 2008, 2009, 2010, 2011 and 2013 at LinuxQuestions.org[3][4]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In general, &amp;lt;em&amp;gt;Wesnoth&amp;lt;/em&amp;gt; tends to show up in the first or second position whenever anyone compiles a list of top open-source games&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Wesnoth&amp;lt;/em&amp;gt;'s most notable features include:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A mature project with continuing active development and frequent improvements after 10 years of development&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;High quality artwork: both original graphics and music&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Well&amp;amp;shy;-balanced by a tireless team of playtesters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fun, unique gameplay&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Even after nearly a decade of development and a very solid, fun product already created, there are still plenty of new developers; the frequency of commits to the repository is still increasing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Strong support of internationalization with many supported languages, thus experience in working with non-native English speakers. In fact, more than half of our developers are not native English speakers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For our Ideas page, please have a look at [5]. There you can find all information required to get you started working on Wesnoth.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[1] &amp;lt;a href=&amp;quot;http://www.wesnoth.org/wiki/WesnothPhilosophy&amp;quot;&amp;gt;http://www.wesnoth.org/wiki/WesnothPhilosophy&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[2] &amp;lt;a href=&amp;quot;http://www.happypenguin.org/list?sort=avg_rating&amp;quot;&amp;gt;http://www.happypenguin.org/list?sort=avg_rating&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[3] &amp;lt;a href=&amp;quot;http://www.linuxquestions.org/questions/linux-news-59/2009-linuxquestions.org-members-choice-award-winners-788028/&amp;quot;&amp;gt;http://www.linuxquestions.org/questions/linux-news-59/2009-linuxquestions.org-members-choice-award-winners-788028/&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[4] &amp;lt;a href=&amp;quot;http://www.linuxquestions.org/questions/2010-linuxquestions-org-members-choice-awards-93/open-source-game-of-the-year-855937/&amp;quot;&amp;gt;http://www.linuxquestions.org/questions/2010-linuxquestions-org-members-choice-awards-93/open-source-game-of-the-year-855937/&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[5] &amp;lt;a href=&amp;quot;http://wiki.wesnoth.org/SummerOfCodeIdeas&amp;quot;&amp;gt;http://wiki.wesnoth.org/SummerOfCodeIdeas&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Organization home page url ====&lt;br /&gt;
http://www.wesnoth.org/&lt;br /&gt;
&lt;br /&gt;
==== Main Organization License: ====&lt;br /&gt;
GNU General Public License version 2.0 (GPLv2) [Dropdown box answer!]&lt;br /&gt;
&lt;br /&gt;
==== Veteran/New ====&lt;br /&gt;
Veteran [Dropdown box answer!]&lt;br /&gt;
&lt;br /&gt;
==== Backup Admin ====&lt;br /&gt;
neuhausercova&lt;br /&gt;
&lt;br /&gt;
==== If you chose &amp;quot;veteran&amp;quot; in the dropdown above, please summarize your involvement and the successes and challenges of your participation. Please also list your pass/fail rate for each year. ====&lt;br /&gt;
&lt;br /&gt;
Since 2008 we have participated in 5 years of GSOC, with good results. With the exception of our first year, we pass approximately 75% of our students, and usually get some really interesting code from them. &lt;br /&gt;
&lt;br /&gt;
2008 results:&lt;br /&gt;
Wesnoth participated in GSoC 2008 with four students. Out of these, two were great successes (that is they became full-fledge developers before the actual start of GSoC), did huge improvement during GSoC (A new recruitment algorithm for the AI and the basic structure for a new map editor, the student finished this work after the summer), and are still active developers in the Wesnoth community, even after 5 years. Two others eventually failed, but we learned from them that while  great students should be left on their own,  average students should be monitored much more closely than we did. If things seems to start to go wrong, it's important to react very quick, to meet with other mentors and get things back on track early.&lt;br /&gt;
&lt;br /&gt;
Timezone problems were also a serious barrier for student/mentor communication, and we will take that more into account when pairing mentors and students.&lt;br /&gt;
&lt;br /&gt;
For our other students, multiple problems collectively led to failure:&lt;br /&gt;
* We should enforce IRC communication, E-mail is a barrier. This applies both for students and mentors. Both should be on IRC several hours a day, with overlapping hours.&lt;br /&gt;
* We should be more strict about mid-term evaluation. If the student is slightly lacking at mid-term we should give a clear message that he needs to get back on track.&lt;br /&gt;
&lt;br /&gt;
2009 results:&lt;br /&gt;
In 2009 we mentored 6 students as part of Summer of Code. Out of these 5 projects were a success. From those 5 developers 3 are still part of our core development group and still maintain and improve the work they submitted as part of Summer of Code. One of the students even became the &amp;quot;head&amp;quot; of our AI development department and mentored a student this year. For a summary of the 2009 results have a look at [1].&lt;br /&gt;
&lt;br /&gt;
2010 results:&lt;br /&gt;
In 2010 we mentored 4 students as part of Summer of Code, all the projects were a success. from those 4 developers, 1 is still part of our code development team and maintains the work he has done as part of Summer of Code.&lt;br /&gt;
&lt;br /&gt;
2011 results:&lt;br /&gt;
In 2011 we mentored 5 students, with four of those successfully completed their projects. Some continued the work polishing their projects a little further even after GSoC, one continues to actively polish his work and just released a new version of his WML Editor.&lt;br /&gt;
&lt;br /&gt;
2012 results&lt;br /&gt;
in 2012 we mentored five students with four of them completing their project successfully. Most were from a set list of ideas provided by the project, which were aimed at fixing or updating parts of the code that never seemed to get fixed. &lt;br /&gt;
&lt;br /&gt;
[1] http://forums.wesnoth.org/viewtopic.php?f=5&amp;amp;t=26955&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2008: 2/4&lt;br /&gt;
2009: 5/6&lt;br /&gt;
2010: 4/4&lt;br /&gt;
2011: 4/5&lt;br /&gt;
2012: 4/5&lt;br /&gt;
&lt;br /&gt;
==== If you chose &amp;quot;new&amp;quot; in the dropdown above, have you applied in the past? If so, for what year(s)? ====&lt;br /&gt;
[left empty]&lt;br /&gt;
&lt;br /&gt;
==== Why is your organization applying to participate in Google Summer of Code 2013? What do you hope to gain by participating? ====&lt;br /&gt;
Most of our developers have particular areas of interest in which they work. Though they are efficient in their areas, there are other, presently uncovered, areas of the code with a need for improvements but a high barrier to entry for casual contributors. By bringing new people in and allowing them to be actively responsible for an area of code, we hope to kickstart work in these areas and others that are lagging behind. Our previous SoC experience shows that a motivated, full-time, student can be brought up to date in any area fairly quickly. Our previous experiences has shown us that SoC developers tend to stay after the end of the Summer of Code and become valuable members of our community. Finally, we feel that it is part of our mandate is to provide a platform for motivated contributors to develop their skills in a positive learning environment.&lt;br /&gt;
&lt;br /&gt;
Overall GSOC has been a win for all parties and we want it to continue in the future.&lt;br /&gt;
&lt;br /&gt;
==== What is the URL for your Ideas list? ====&lt;br /&gt;
http://wiki.wesnoth.org/SummerOfCodeIdeas&lt;br /&gt;
&lt;br /&gt;
==== What is the main development mailing list for your organization? ====&lt;br /&gt;
wesnoth-dev@gna.org&lt;br /&gt;
&lt;br /&gt;
==== What is the main IRC channel for your organization? ====&lt;br /&gt;
 #wesnoth-dev on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
==== What criteria did you use to select your mentors for this year's program? Please be as specific as possible. ====&lt;br /&gt;
Our first criterion was that all the people had to be volunteers. According to other open source projects and our experience from the last two years, being a SoC mentor takes a lot of time and the person has to be ready to spend quite some time with the student.&lt;br /&gt;
&lt;br /&gt;
Iurii Chernyi (Crab) has joined the team in 2009, taking part in Google Summer of Code 2009, and staying with the project as a developer after successful completion of GSoC. He's an expert on all aspects of current Wesnoth AI codebase (having fully reorganized it as part of GSoC 2009), and has fixed numerous bugs all over Wesnoth. He was a GSoC mentor 2010 and 2011. In 2011 he was a  GCI mentor and administrator. He is experienced in teaching other people, in areas like programming languages and math.&lt;br /&gt;
&lt;br /&gt;
Mordante is one of the most active developers on our IRC channel. Not only has he done preliminary studies and coding in multiple areas that are candidates for Summer of Code ideas, he also is one of the coders with the best overview of the Wesnoth code. A large part of his work involves refactoring and polishing existing code. Next to that he's very active with fixing bugs which leads him to all areas in the code base. He is currently completing a rewrite of the Wesnoth GUI library, making all windows configurable through WML. This should make it easier to use Wesnoth on different resolutions, from small handheld devices to large 30 inch screens. Mordante has been a GSoC mentor for Wesnoth since 2008.&lt;br /&gt;
&lt;br /&gt;
All other developers listed in the ideas page are the leading capacities we do have for the respecting areas. Have a look at our list of &amp;quot;people who to contact&amp;quot; [1] for an easy reference. In general all our developers will mentor all students. That is, questions should just be asked in our IRC channel, where basically every developer who has an idea can and will directly answer.&lt;br /&gt;
&lt;br /&gt;
When choosing the mentors, we have kept in mind that most developers can answer most technical questions, and we have chosen people that are well known for interacting with new-comers/external developers and can provide general guidance and design advice, more than people with specific technical knowledge.&lt;br /&gt;
&lt;br /&gt;
[3] http://wiki.wesnoth.org/SoC_People_to_bug_on_IRC&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing students? ====&lt;br /&gt;
The first thing to do is to avoid this situation altogether. The key is identifying candidates with the right mix of skills and temperament. Wesnoth is a game, and as such has lots of developers that are not coders. In particular, artists are well known in the Wesnoth community for being very sensitive about criticism and our community is used to people being sensitive to critics. &lt;br /&gt;
&lt;br /&gt;
We try to choose students that accept criticism and are able to filter constructive criticism from useless one. The Wesnoth developer community is used to judging people according to these criteria and the special title we are going to give to applicants will allow us to easily spot any such problems and discuss them before they grow out of control.&lt;br /&gt;
&lt;br /&gt;
If a student disappears, their mentor are in charge of reconnecting the student to see what is going wrong (available time, tension with other developers, with members of the community etc...). Depending on the actual problem, the mentor and the student will have to agree on possible ways to resolve the problem.&lt;br /&gt;
&lt;br /&gt;
If a student disappears completely and there is no way to get back to them, there is little the project can do except salvaging whatever can be salvaged from the code (the students will have repository write access, so most of the work will be committed either to trunk or to a specific branch) and find a core developer to take on the job. This will probably be slower and less effective for the project, but it's the best we can do.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing mentors? ====&lt;br /&gt;
All our mentors are long time developers that volunteered for the job, so we don't expect that to happen. We observed in during the last years the amount of time required to mentor, and our mentors accepted the job knowing the amount of work it involved. All of this years mentors mentored last year as well, most have contributed since 2008, or been organizational admins. &lt;br /&gt;
&lt;br /&gt;
However, should it happen, we would continue to mentor as a developer community the student until we find a new &amp;quot;official&amp;quot; mentor to take on the job.&lt;br /&gt;
&lt;br /&gt;
==== What steps will you take to encourage students to interact with your project's community before and during the program? ====&lt;br /&gt;
Wesnoth has a particularly healthy community, both for developers and for players. &lt;br /&gt;
&lt;br /&gt;
Our general policy regarding new coders has always been &amp;quot;two (non trival) patches... you're in&amp;quot;. With other words, anybody that is able to get two non-trivial patches applied is offered commit privileges.&lt;br /&gt;
We have a developer responsible for applying patches and guiding new developers into our community. This is a well known and effective process we plan to apply to students, directing them to our EasyCoding pages [1] (these projects are usually a couple of hours long and hve been chosen to provide easy access to the respective area of code). This year, we also have added some simple coding tasks directly related to our GSoC ideas to be able to test students more specifically on their future project&lt;br /&gt;
&lt;br /&gt;
Usually, patches go back and forth a couple of times, to make sure that all secondary things are in place (indenting, coding style, modified buildfiles etc.) The idea is that coder education should take place before the coder gets commit rights, but that getting new coder in is one of the most important things to keep our project alive.&lt;br /&gt;
&lt;br /&gt;
If the student is proactive and ready to join IRC, all the developers are usually very welcoming, and good at directing newcomers to quickly give useful results.&lt;br /&gt;
&lt;br /&gt;
In previous years, all students that were accepted (and a couple more) managed to have commit access before the start of the coding phase. We consider that this policy was successful and we plan to keep it this year.&lt;br /&gt;
&lt;br /&gt;
We also plan to give a special forum title to any students. This will allow all forum members to tell them apart from normal users and give them read/write access to the developer only forums. This will also allow us to quickly spot any problem they might have interacting with the player community. We have a very mature developer community, but our player community is made of all sort of people of all age and education, and it can sometimes be rough.&lt;br /&gt;
&lt;br /&gt;
Last, our experience from previous years is that students that participate in the community during the evaluation period will stay active in the community after that period. In previous years this has been a discriminating criterias for students of similar level, and overall we never had problems of students working &amp;quot;behind a black wall.&amp;quot; Our selection process tend to favor students who participate, and participation hasn't been a problem so far.&lt;br /&gt;
&lt;br /&gt;
[1] http://wiki.wesnoth.org/EasyCoding&lt;br /&gt;
&lt;br /&gt;
==== What will you do to encourage that your accepted students stick with the project after Google Summer of Code concludes? ====&lt;br /&gt;
The steps meant to involve the students in the community are the same steps we use to make it easy and rewarding to stay with the community even after Summer of Code is over. We really try to make students feel part of the community, particularly as equal developers, rather than just students working a summer job. This, we think, make them feel empowered, and want to remain an important part of the community.&lt;br /&gt;
&lt;br /&gt;
==== Are you a new organization who has a Googler or other organization to vouch for you? If so, please list their name(s) here. ====&lt;br /&gt;
N/A&lt;br /&gt;
&lt;br /&gt;
==== Are you an established or larger organization who would like to vouch for a new organization applying this year? If so, please list their name(s) here. ====&lt;br /&gt;
[left empty]&lt;br /&gt;
&lt;br /&gt;
== Application template ==&lt;br /&gt;
This template is no longer asked for during the initial application. Listing it here so that we can still reference it later on.&lt;br /&gt;
&lt;br /&gt;
==== Does your organization have an application template you would like to see students use? ====&lt;br /&gt;
&lt;br /&gt;
Students wishing to participate in GSoC should copy the questions below to a new page and fill it with the answers. &lt;br /&gt;
&lt;br /&gt;
Please note that we generally plan to meet potential students through our IRC channel. So beside just answering these questions, potential candidates consider visiting us in IRC: #wesnoth-dev on irc.freenode.net. This is where most of our work takes place and participating in IRC is mandatory for GSoC students participating with Wesnoth. Our experience is that this is the easiest way to communicate and solve problems that come up.&lt;br /&gt;
&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school? &lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to join IRC?&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games? &lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer? &lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is the project's working language.  Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice? &lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well? &lt;br /&gt;
&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the scope.&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
* Git (used for all commits)&lt;br /&gt;
* C++ (language used for all the normal source code)&lt;br /&gt;
* STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
* Python (optional, mainly used for tools)&lt;br /&gt;
* build environments (eg cmake/scons)&lt;br /&gt;
* WML (the wesnoth specific scenario language)&lt;br /&gt;
* Lua (used in combination with WML to create scenarios)&lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!&lt;br /&gt;
&lt;br /&gt;
In general, students should be as verbose as possible in their answers and feel free to elaborate.&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=50309</id>
		<title>MultiplayerContent</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=MultiplayerContent&amp;diff=50309"/>
		<updated>2013-04-19T12:31:43Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide is intended for version '''1.6.4 and higher'''.&lt;br /&gt;
&lt;br /&gt;
A forum thread about multiplayer campaigns in older versions can be found [http://www.wesnoth.org/forum/viewtopic.php?t=11349 here].&lt;br /&gt;
&lt;br /&gt;
= Building multiplayer campaigns =&lt;br /&gt;
&lt;br /&gt;
Both the stable and development versions of wesnoth have basic support for campaigns that can be played in multiplayer mode, with your friends, or even with an AI.  There will still be some things that don't work as expected as multiplayer campaigns are an area for exploration. While you can and should test your work in hotseat mode, there are a number of things that might behave differently under real network conditions (mostly affecting scenario and side parameters). Keep this in mind and make sure to test your campaign over the net, too.&lt;br /&gt;
This page only documents the differences between writing multiplayer campaigns and single player campaigns, so you might want to read up on [[BuildingCampaigns]] and [[BuildingMultiplayer]] first.&lt;br /&gt;
&lt;br /&gt;
== The campaign file ==&lt;br /&gt;
&lt;br /&gt;
Multiplayer campaigns do not use the [campaign] tag. As a result of this, multiplayer campaigns only support one difficulty level, though you could support more with enough WML, if you're feeling ambitious. The &amp;quot;campaign file&amp;quot; should look something like this:&lt;br /&gt;
&lt;br /&gt;
 #ifdef MULTIPLAYER&lt;br /&gt;
 {~add-ons/My_Campaign/scenarios}&lt;br /&gt;
 &lt;br /&gt;
 #Only needed if you have custom units&lt;br /&gt;
 [+units]&lt;br /&gt;
     {~add-ons/My_Campaign/units}&lt;br /&gt;
 [/units]&lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Anything that you would normally put in the campaign tag now goes into the first scenario, if it's supported there. The order of scenarios is determined by next_scenario tags, just like in single player.&lt;br /&gt;
&lt;br /&gt;
== Scenarios ==&lt;br /&gt;
&lt;br /&gt;
A scenario in a multiplayer campaign is almost identical to a scenario in a single player campaign. You only need to change the following:&lt;br /&gt;
&lt;br /&gt;
* The [scenario] tag should be replaced with a [multiplayer] tag.&lt;br /&gt;
* The '''next_scenario''' key points to the id of the next scenario.&lt;br /&gt;
* Every scenario after the first should have '''allow_new_game=no''' inside the [multiplayer] tag. This will prevent it from showing up in the map selection menu. &lt;br /&gt;
* Each human-controlled side needs to have a '''controller=human''' key defined in their [side] tag to work in network mode.&lt;br /&gt;
* Each human-controlled side also needs to have a '''save_id''' defined inside their [side] tag. Each side's save_id should be unique, and it should be the same in every scenario. Without this, your recall lists and leaders will not carry over from one scenario to the next.&lt;br /&gt;
* If you want to carry over information for ai sides, they need to have a '''save_id''' defined and '''persistent=yes''' in their [side] tag.&lt;br /&gt;
* Each human-controlled side has to have a leader '''type=''' definition in every scenario except the first one . It doesn't matter which type you choose cause the type set here gets replaced by the actual leader in the recall list. &lt;br /&gt;
* If you want player's leaders to be recalled, you should either recall all units which can recruit or assign id attribute for them (unique for each leader, the same in each scenario - e.g. &amp;quot;p1&amp;quot; for leader of player 1, &amp;quot;p2&amp;quot; for leader of player 2). See [[http://forum.wesnoth.org/viewtopic.php?p=405807#p405807]] &lt;br /&gt;
* Each AI-controlled side should have '''allow_player=no''' in their [side] tag.&lt;br /&gt;
* If you have a file containing macros, it must be referenced by every scenario, since there is no proper campaign file to include it from.&lt;br /&gt;
&lt;br /&gt;
== The first scenario ==&lt;br /&gt;
&lt;br /&gt;
* To ensure that your scenario settings are not overwritten by the settings from the multiplayer dialog, check '''use map settings''' when creating the game.&lt;br /&gt;
&lt;br /&gt;
* If any setttings are still taken from the multiplayer dialog, it is possible to overwrite them in the prestart event. Useful tags include [set_recruit], [modify_side], [modify_turns] and [remove_shroud]. There is currently no way to remove fog. You might also want to use ''experience_modifier=100'' in the [multiplayer] tag.&lt;br /&gt;
&lt;br /&gt;
* Deactivate the '''Quick replays''' setting (in the multiplayer lobby), or the [story] tags will not display for you.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.wesnoth.org/forum/viewtopic.php?t=11349 Multiplayer Campaigns HOWTO forum post]&lt;br /&gt;
* [[BuildingScenarios]]&lt;br /&gt;
* [[BuildingMultiplayer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Create]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50238</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50238"/>
		<updated>2013-04-17T18:59:06Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would let to dispose of all or most current '#ifdefs' used to create multiplayer campaign or to enable singleplayer campaign to be used as multiplayer and would fix a lot of bugs &lt;br /&gt;
related to multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with MP campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose MP factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* The 'allow_player' attributes should be removed from the [side] tags. ?&lt;br /&gt;
* better [story] tag support?&lt;br /&gt;
* get rid of 'save_id' attribute inside [side] tags. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create MP campaigns and fix or refactor save/restore code to deal with the current issues.&lt;br /&gt;
&lt;br /&gt;
* Proper filtering of SP and MP campaigns using 'campaign_type' attribute.&lt;br /&gt;
* Enable MP campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Refactor or fix the current save/restore code to fix known related problems of MP campaigns.&lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
* In the MP game 'maps to play' list, users should see only one option for one MP campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but MP campaign's name in that list option.&lt;br /&gt;
* Difficulties should be allowed to be chosen in the MP game create window along with other options.&lt;br /&gt;
* Between every MP campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
* Players should not be allowed to choose any MP factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
&lt;br /&gt;
thunderstruck&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50237</id>
		<title>User:Thunderstruck</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Thunderstruck&amp;diff=50237"/>
		<updated>2013-04-17T18:58:11Z</updated>

		<summary type="html">&lt;p&gt;Thunderstruck: Created page with '{{SoC2013Student}} Category:SoC_Ideas_Your_Own_Ideas2013  =Description= &amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;  The current multiplayer campaign support from both UMC develo…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2013]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;thunderstruck's proposal draft&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current multiplayer campaign support from both UMC developers/maintainers and players perspective is far behind comparing to singleplayer support.&lt;br /&gt;
&lt;br /&gt;
I propose to make developing multiplayer campaigns as easy as singleplayer ones. I am going to do that by enabling Wesnoth's engine to handle [campaign] and [scenario] tag with their attributes when used for multiplayer campaigns with very little modification and implementing additional GUI elements to let users easily choose difficulties, save/restore games and manage network players.&lt;br /&gt;
&lt;br /&gt;
This approach would let to dispose of all or most current '#ifdefs' used to create multiplayer campaign or to enable singleplayer campaign to be used as multiplayer and would fix a lot of bugs &lt;br /&gt;
related to multiplayer campaign support.&lt;br /&gt;
&lt;br /&gt;
=The Project=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;WML&amp;lt;/h4&amp;gt;&lt;br /&gt;
Enable top-level [campaign] and [scenario] tags to work properly with MP campaigns.&lt;br /&gt;
&lt;br /&gt;
* [campaign] tag should contain an attribute called 'campaign_type' with a value of 'sp', 'mp' or 'both' to indicate the type of game campaign is made/adjusted for.&lt;br /&gt;
* [scenario] tag's attribute 'allow_new_game' should be used to define whether the scenario could be played anytime or just after completing particular scenario(s) as it was used in [multiplayer] tag.&lt;br /&gt;
* Extra boolean attribute 'custom_side' inside [side] tag to specify whether players should be able to choose MP factions or not.&lt;br /&gt;
* Extra boolean attribute in [scenario] tag called 'custom_turns' to specify whether players could swap not only the sides, but also the order of the turns of those sides.&lt;br /&gt;
* The 'allow_player' attributes should be removed from the [side] tags. ?&lt;br /&gt;
* better [story] tag support?&lt;br /&gt;
* get rid of 'save_id' attribute inside [side] tags. ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Engine&amp;lt;/h4&amp;gt;&lt;br /&gt;
Deal with all changes of WML while keeping support for old ways to create MP campaigns and fix or refactor save/restore code to deal with the current issues.&lt;br /&gt;
&lt;br /&gt;
* Proper filtering of SP and MP campaigns using 'campaign_type' attribute.&lt;br /&gt;
* Enable MP campaigns to use difficulty attributes inside [campaign] tag.&lt;br /&gt;
* Players' management window should suggest appropriate sides to the players (e.g. if the same side exists over multiple scenarios, the player who used to play for that side should be placed in relevant slot) if possible. However, players should still be able to swap sides. &lt;br /&gt;
* Refactor or fix the current save/restore code to fix known related problems of MP campaigns.&lt;br /&gt;
* Allow the game to be played in custom turns (specified not by the campaign's designer, but the players).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;GUI&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tinker to work well with changes made to the engine and implement new elements where needed.&lt;br /&gt;
&lt;br /&gt;
* In the MP game 'maps to play' list, users should see only one option for one MP campaign. Any chapters or scenarios which could be played without playing before should be displayed in additional dialog. Also users should see not the first scenario's name, but MP campaign's name in that list option.&lt;br /&gt;
* Difficulties should be allowed to be chosen in the MP game create window along with other options.&lt;br /&gt;
* Between every MP campaign's scenarios players should be displayed with manage players window.&lt;br /&gt;
* Players should not be allowed to choose any MP factions if campaign's designer specified so, in order to keep campaign well balanced.&lt;br /&gt;
* Players should be presented an option to modify turns of the sides.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
put ONLY your irc nickname in there. in case of alternate nicks, separate by ,&lt;br /&gt;
&lt;br /&gt;
Example content of this section: &amp;quot;user&amp;quot; &amp;quot;user1, user2&amp;quot; (without the quotes)&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
TODO: fill out the questionnaire, on your copy of this page. Question are here : [[SoC_Information_for_Google#Does your organization have an application template you would like to see students use?]]&lt;/div&gt;</summary>
		<author><name>Thunderstruck</name></author>
		
	</entry>
</feed>