<?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=Lfernando</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=Lfernando"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/Special:Contributions/Lfernando"/>
	<updated>2026-05-03T10:06:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=36729</id>
		<title>InterfaceActionsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=36729"/>
		<updated>2010-06-03T13:51:25Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Interface actions ==&lt;br /&gt;
&lt;br /&gt;
Interface actions are actions that do not have an effect on gameplay;&lt;br /&gt;
instead, they show something to the player.  The main interface tags&lt;br /&gt;
are '''[message]''' and '''[objectives]''', but several other tags affect&lt;br /&gt;
the interface also.&lt;br /&gt;
&lt;br /&gt;
== [inspect] ==&lt;br /&gt;
This user interface action only works in debug mode. It displays the gamestate inspector dialog (the same one which can be brought up with '':inspect'' ), which can be used to inspect the values of WML variables, AI configuration, recall lists, and more.&lt;br /&gt;
&lt;br /&gt;
* '''name''': optional attribute to specify the name of this gamestate inspector dialog. It is just a label to help differentiate between different invocations of gamestate inspector dialog.&lt;br /&gt;
&lt;br /&gt;
== [message] ==&lt;br /&gt;
The most commonly used interface action is [message], which displays a message to the user in a dialog box. It can also be used to take input from the user.&lt;br /&gt;
&lt;br /&gt;
The following key/tags are accepted for [message]:&lt;br /&gt;
* [[StandardUnitFilter]]: The unit whose profile and name are displayed. Do not use a [filter] tag. If no unit matching this filter is found, the message is not displayed (The unit has probably been killed).&amp;lt;br&amp;gt;'''[message]''' elements should be constructed so that it is either guaranteed that a certain unit is alive, or so that dialog flows smoothly even if the message isn't displayed.&lt;br /&gt;
&lt;br /&gt;
* '''speaker''': an alternative to standard unit filter. You may specify as the value of the speaker attribute a unit id or any of the following special values:&lt;br /&gt;
** '''narrator''': the dialog box is displayed without a caption for the unit speaking or a unit image&lt;br /&gt;
** '''unit''': the primary unit for the event is speaking&lt;br /&gt;
** '''second_unit''': the secondary unit for the event is speaking&lt;br /&gt;
&lt;br /&gt;
* '''message''': (translatable) the text to display to the right of the image. ''message'' is sometimes multiple lines; if it is, be sure to use quotes(''' ' ''' or ''' &amp;quot; ''')&lt;br /&gt;
* '''[show_if]''': if present then this message will only be displayed if the conditional statement in this tag is passed (see [[ConditionalActionsWML#Condition_Tags|ConditionalActionsWML]])&lt;br /&gt;
* '''side_for''': (default: all sides) comma-separated list of sides for who message is shown.&lt;br /&gt;
* '''image''': (default: profile image of speaker) the image to display next to the message.&lt;br /&gt;
* '''caption''': (default: name of speaker) the caption to display beside the image. Name to be displayed.&lt;br /&gt;
* '''duration''': (default: 10) the minimum number of frames for this message to be displayed. (A frame lasts about 30 milliseconds.) During this time any dialog decisions will be disregarded.&lt;br /&gt;
* '''sound''': a sound effect (wav file) to play as the message is displayed. This can be a comma-separated list, from which one will be randomly chosen.&lt;br /&gt;
* '''[option]''': zero or more '''[option]''' elements may be present. If '''[option]''' elements are present, then each option will be displayed in a menu for the user to select one option.&lt;br /&gt;
** '''message''': (translatable) the text displayed for the option (see [[DescriptionWML]])&lt;br /&gt;
** '''[show_if]''': if present then this option will only be displayed if the conditional statement in this tag is passed (see [[InternalActionsWML]])&lt;br /&gt;
** '''[command]''': an element containing actions which are executed if the option is selected.&lt;br /&gt;
* '''[text_input]''': there can be only one [text_input] tag. this adds a text input field to the message.&lt;br /&gt;
** '''variable''': the variable that the user's input will be written to&lt;br /&gt;
** '''label''': a text label to the left of the input field&lt;br /&gt;
** '''max_chars''': the maximum number of characters that may be typed into the field&lt;br /&gt;
** '''text''': text that is written into the field in the beginning&lt;br /&gt;
* Check [[EventWML#Multiplayer_safety]] to find out in which events you can safely use '''[option]''' and '''[text_input]''' without causing OOS.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
In 1.8, [http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html Pango markup formatting codes] have been adopted for '''[message]'''. These can also be used in unit names (user_description), objectives, and such. Note that you'll probably want to use a single quote ' instead of a double quote &amp;quot; as double quotes cannot be escaped, otherwise the string will appear fragmented and you may also encounter errors. Running wmllint on your campaign will up-convert it, warning you about unusual cases you must fix by hand.&lt;br /&gt;
&lt;br /&gt;
For example, if you wanted to write &amp;quot;You are victorious!&amp;quot; in large, italic, gold letters, you might write it this way:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span color='#BCB088' size='large' font-style='italic'&amp;gt;You are victorious!&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the codes taken from the Pango markup formatting guide:&lt;br /&gt;
&lt;br /&gt;
*'''font''', '''font_desc''': A font description string, such as &amp;quot;Sans Italic 12&amp;quot;.&lt;br /&gt;
*'''font_family''', '''face''': A font family name.&lt;br /&gt;
*'''font_size''', '''size''': Font size in 1024ths of a point, or one of the absolute sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', or one of the relative sizes 'smaller' or 'larger'.&lt;br /&gt;
*'''font_style''', '''style''': One of 'normal', 'oblique', 'italic'.&lt;br /&gt;
*'''font_weight''', '''weight''': One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy', or a numeric weight.&lt;br /&gt;
*'''font_variant''', '''variant''': One of 'normal' or 'smallcaps'.&lt;br /&gt;
*'''font_stretch''', '''stretch''': One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded'.&lt;br /&gt;
*'''foreground''', '''fgcolor''', '''color''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''background, bgcolor''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''underline''': One of 'none', 'single', 'double', 'low', 'error'.&lt;br /&gt;
*'''underline_color''': The color of underlines; an RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''rise''': Vertical displacement, in 10000ths of an em. Can be negative for subscript, positive for superscript.&lt;br /&gt;
*'''strikethrough''': 'true' or 'false' whether to strike through the text.&lt;br /&gt;
*'''strikethrough_color''': The color of strikethrough lines; an RGB color specification such as '#00FF00' or a color name such as 'red'&lt;br /&gt;
*'''fallback''': 'true' or 'false' whether to enable fallback. If disabled, then characters will only be used from the closest matching font on the system. No fallback will be done to other fonts on the system that might contain the characters in the text. Fallback is enabled by default. Most applications should not disable fallback.&lt;br /&gt;
*'''letter_spacing''': Inter-letter spacing in 1024ths of a point.&lt;br /&gt;
*'''gravity''': One of 'south', 'east', 'north', 'west', 'auto'.&lt;br /&gt;
*'''gravity_hint''': One of 'natural', 'strong', 'line'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In 1.6, Wesnoth uses older text formatting options&lt;br /&gt;
* A tilde (~) as the first character causes the line to be boldfaced.&lt;br /&gt;
* An at symbol (@) as the first character causes the line to be green, as done with victory conditions.&lt;br /&gt;
* A pound symbol (#) as the first character causes the line to be red, as done with defeat conditions.&lt;br /&gt;
* An asterisk (*) as the first character causes the line to be bigger.&lt;br /&gt;
* A backquote (`) as the first character causes the line to be smaller.&lt;br /&gt;
* If used, the caption key text is boldfaced.&lt;br /&gt;
* An RGB colour code in the beginning causes the line to be the given colour. This can still be preceded by the above characters. Example: ''message=_&amp;quot;&amp;lt;255,0,0&amp;gt;Red!&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
== [objectives] ==&lt;br /&gt;
The other tag used for plot development is '''[objectives]'''.&lt;br /&gt;
The '''[objectives]''' tag overwrites any previously set objectives,&lt;br /&gt;
and displays text which should describe the objectives of the scenario.&lt;br /&gt;
Scenario objectives are displayed on the player's first turn after the tag is used,&lt;br /&gt;
or as part of the event if it triggers during that player's turn.&lt;br /&gt;
Objectives can also be accessed at any time in a scenario using the&lt;br /&gt;
&amp;quot;Scenario Objectives&amp;quot; game menu option, making this tag useful for&lt;br /&gt;
scenario-specific information that the player may need to refer to during play.&lt;br /&gt;
&lt;br /&gt;
This tag renders the ''objectives'' attribute of [scenario] obsolete (see ''objectives'', [[ScenarioWML]]).&lt;br /&gt;
Instead of using ''objectives'', use '''[objectives]''' to set scenario objectives inside a prestart event.&lt;br /&gt;
It can also be used to overwrite the starting objectives mid-scenario.&lt;br /&gt;
&lt;br /&gt;
Attributes of '''[objectives]''':&lt;br /&gt;
* '''side''': Default '0'. The side to set the objectives for. A value of 0 sets objectives for all sides.&lt;br /&gt;
* '''summary''': Displayed first in the objectives text, this should describe the basic objective for the overall scenario.  Can be omitted.&lt;br /&gt;
* '''note''': Displayed last in the objectives text, this is sometimes used for hints or additional information.  Can be omitted.&lt;br /&gt;
* '''victory_string''': Default ' _ &amp;quot;Victory:&amp;quot;', this text precedes the victory objectives.&lt;br /&gt;
* '''defeat_string''': Default ' _ &amp;quot;Defeat:&amp;quot;', this text precedes the defeat objectives.&lt;br /&gt;
* '''silent''': Default: not present. If set to &amp;quot;yes&amp;quot;, the objectives are silently changed. Else, they will be shown to the user when appropriate.&lt;br /&gt;
&lt;br /&gt;
Tags of '''[objectives]''':&lt;br /&gt;
* '''[objective]''': describes a win or loss condition. Most scenarios have multiple win or loss conditions, so use a separate [objective] subtag for each line; this helps with translations.&lt;br /&gt;
** '''description''': text for the specific win or loss condition.&lt;br /&gt;
** '''condition''': The color and placement of the text. Values are 'win'(colored green, placed after ''victory_string'') and 'lose'(colored red, placed after ''defeat_string'')&lt;br /&gt;
** '''[show_if]''': A condition that disables the objective if it doesn't hold. Conditional objectives are refreshed at '''[show_objectives]''' time only. {{DevFeature}}&lt;br /&gt;
&lt;br /&gt;
=== Macros ===&lt;br /&gt;
There are a few predefined macros for Objectives that you can use to shorten the code: [http://www.wesnoth.org/macro-reference.xhtml#SET_OBJECTIVES SET_OBJECTIVES], [http://www.wesnoth.org/macro-reference.xhtml#VICTORY_CONDITION VICTORY_CONDITION], and [http://www.wesnoth.org/macro-reference.xhtml#DEFEAT_CONDITION DEFEAT_CONDITION]. Follow the links for each one to see complete syntax and example usage.&lt;br /&gt;
&lt;br /&gt;
== [set_menu_item] ==&lt;br /&gt;
This tag is used to add a custom option in the right-click context menu which can then be used to trigger arbitrary WML commands.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Due to limitations in portable devices where there are no scroll bars for context menus, there is a hard-coded limit of 7 custom WML menu items. If you really need to have more than 7 menu items, try combining some of them in a submenu.&lt;br /&gt;
&lt;br /&gt;
* '''id''': the unique id for this menu item. If a menu item with this id already exists, it allows you to set specific changes to that item.&lt;br /&gt;
* '''description''': the in-game text that will appear for this item in the menu.&lt;br /&gt;
* '''image''': the image to display next to this item.&lt;br /&gt;
* '''needs_select''': if ''yes'' (default ''no''), then the latest select event (see [[EventWML]]) that triggered before this menu item was chosen will be transmitted over the network before this menu item action will be. This only has any effect in networked multiplayer, and is intended to allow more elaborate menu item behaviour there without causing out of sync errors. If you don't know what this means, just leave it false.&lt;br /&gt;
* '''[show_if]''': If present, the menu item will only be available if the conditional statement (see [[InternalActionsWML]]) within evaluates to true. When this is evaluated, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked, so it's possible to for example only enable the option on empty hexes or on a particular unit.&lt;br /&gt;
* '''[filter_location]''': contains a location filter similar to the one found inside Single Unit Filters (see [[FilterWML]]). The menu item will only be available on matching locations.&lt;br /&gt;
* '''[command]''': contains the WML actions to be executed when the menu item is selected. Again, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked on.&lt;br /&gt;
&lt;br /&gt;
== Other interface tags ==&lt;br /&gt;
&lt;br /&gt;
The following tags are also action tags:&lt;br /&gt;
* '''[item]''': makes a graphical item appear on a certain hex. Note this only places the graphics for an item. It does not make the item do anything. Use a moveto event to make moving onto the item do something. &amp;lt;tt&amp;gt;''('''Hint:''' There are a number of predefined items that are used in various campaigns that you can make use of. You can find [http://www.wesnoth.org/macro-reference.xhtml#file:items.cfg a list of them] if you look into the items.cfg file in the wesnoth install directory (under /data/core/macros))''&amp;lt;/tt&amp;gt;&lt;br /&gt;
** '''x''', '''y''': the location to place the item.&lt;br /&gt;
** '''image''': the image (in ''images/'' as .png) to place on the hex.&lt;br /&gt;
** '''halo''': an image to place centered on the hex. Use this instead of ''image'' if the image is bigger than the hex or if you want to animate an image. ''Example (where the integer after the colon is the duration of each frame): halo=scenery/fire1.png:100,scenery/fire2.png:100,scenery/fire3.png:100,scenery/fire4.png:100,scenery/fire5.png:100,scenery/fire6.png:100,scenery/fire7.png:100,scenery/fire8.png:100''&lt;br /&gt;
** '''team_name''': name of the team for which the item is to be displayed (hidden for others). For multiple teams just put all the names in one string, for example separated by commas.&lt;br /&gt;
** '''visible_in_fog''': whether the item should be visible through fog or not. Default yes.&lt;br /&gt;
* '''[removeitem]''': removes any graphical items on a given hex&lt;br /&gt;
** '''x''', '''y''': the hex to remove items off&lt;br /&gt;
** '''image''' if specified, only removes the given image item (This image name must include any [[ImagePathFunctionWML|image path functions]] appended to the original image name.)&lt;br /&gt;
* '''[print]''': displays a message across the screen. The message will disappear after a certain time.&lt;br /&gt;
** '''text''': (translatable) the text to display.&lt;br /&gt;
** '''size''': (default=12) the pointsize of the font to use&lt;br /&gt;
** '''duration''': (default=50) the length of time to display the text for. This is measured in the number of 'frames'. A frame in Wesnoth is usually displayed for around 30ms.&lt;br /&gt;
** '''red''', '''green''', '''blue''': (default=0,0,0) the color to display the text in. Values vary from 0-255.&lt;br /&gt;
* '''[move_unit_fake]''': moves an image of a unit along a certain path on the map. The path does not need to be a continuous list of adjacent hexes, so for example only the start and end points can be given, in which case the straightest line between those points will be calculated and used.&lt;br /&gt;
** '''type''': the type of the unit whose image to use&lt;br /&gt;
** '''x''': a comma-separated list of x locations to move along&lt;br /&gt;
** '''y''': a comma-separated list of y locations to move along (x and y values are matched pairs)&lt;br /&gt;
** '''side''': the side of the fake unit, used for team-coloring the fake unit&lt;br /&gt;
* '''[move_units_fake]''': {{DevFeature1.9}} moves multiple images of units along paths on the map. These units are moved in lockstep.&lt;br /&gt;
** '''[fake_unit]''': A fake unit to move&lt;br /&gt;
*** '''type''': the type of unit whose image to use&lt;br /&gt;
*** '''x''': a comma-separated list of x locations to move along&lt;br /&gt;
*** '''y''': a comma-separated list of y locations to move along (x and y values are matched pairs)&lt;br /&gt;
*** '''side''': the side of the fake unit, used for team-coloring the fake unit&lt;br /&gt;
*** '''skip_steps''': the number of steps to skip before this unit starts moving&lt;br /&gt;
* '''[hide_unit]''': makes the given unit become invisible. Useful in conjunction with '''[move_unit_fake]''': to move a leader unit into position on-screen. Each '''[hide_unit]''' tag only hides one unit.&lt;br /&gt;
** '''x''', '''y''': location of the unit to be hidden. (NOT a standard unit filter! Just x and y.)&lt;br /&gt;
* '''[unhide_unit]''': stops the currently hidden units from being hidden.&lt;br /&gt;
* '''[scroll]''': Scroll a certain number of pixels in a given direction. Useful for earthquake/shaking effects.&lt;br /&gt;
** '''x''', '''y''': the number of pixels to scroll along the x and y axis&lt;br /&gt;
* '''[scroll_to]''': Scroll to a given hex&lt;br /&gt;
** '''x''', '''y''': the hex to scroll to&lt;br /&gt;
** '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''true'' (don't scroll to fog) and ''false'' (scroll even to fog), with ''false'' as the default.&lt;br /&gt;
* '''[scroll_to_unit]''' Scroll to a given unit&lt;br /&gt;
** [[StandardUnitFilter]]&lt;br /&gt;
** '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''true'' (don't scroll to fog) and ''false'' (scroll even to fog), with ''false'' as the default.&lt;br /&gt;
* '''[sound]''': Plays a sound&lt;br /&gt;
** '''name''': the filename of the sound to play (in ''sounds/'' as .wav or .ogg)&lt;br /&gt;
** '''repeat''': repeats the sound for a specified additional number of times (default=0)&lt;br /&gt;
* '''[sound_source]''': Creates a sound source. &amp;quot;Sound sources&amp;quot; is a general name for a mechanism which makes possible for map elements to emit sounds according to some rules, where &amp;quot;map elements&amp;quot; can be specific locations or terrain types. For now, only sound sources tied to locations are supported.&lt;br /&gt;
** '''id''': a unique identification key of the sound source&lt;br /&gt;
** '''sounds''': a list of comma separated, randomly played sounds associated with the sound source&lt;br /&gt;
** '''delay''': a numerical value (in milliseconds) of the minimal delay between two playbacks of the source's sound if the source remains visible on the screen; if one scrolls out and back in, the source will be considered as ready to play&lt;br /&gt;
** '''chance''': a percentage (a value from 0 to 100) describing the chance of the source being activated every second after the delay has passed or when the source's location appears on the screen (note that it cannot play more than one file at the same time)&lt;br /&gt;
** '''check_fogged''': possible values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; - if true the source will not play if its locations are fogged&lt;br /&gt;
** '''check_shrouded''': {{DevFeature}} possible values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; - if true the source will not play if its locations are shrouded&lt;br /&gt;
** '''x,y''': a [[StandardLocationFilter]] for the locations associated with the sound source&lt;br /&gt;
** '''fade_range''' (default = 3): distance in hexes that determines a &amp;quot;circular&amp;quot; area around the one specified by '''full_range''' where sound volume fades out linearly&lt;br /&gt;
** '''full_range''' (default = 14): distance in hexes that determines a &amp;quot;circular&amp;quot; area where source plays with full volume, relative to screen center&lt;br /&gt;
** '''loop''': number of times a sound sample should be looped if it stays visible. -1 means infinite (~65000)&lt;br /&gt;
* '''[remove_sound_source]''': Removes a previously defined sound source.&lt;br /&gt;
** '''id''': the identification key of the sound source to remove&lt;br /&gt;
* '''[music]''': Switches to playing different music&lt;br /&gt;
** '''name''': the filename of the music to play (in ''music/'' as .ogg)&lt;br /&gt;
** see [[MusicListWML]] for the correct syntax&lt;br /&gt;
* '''[volume]''': {{DevFeature1.9}} Changes the game volume to a percent of the preferences volume for the game being played. Values can go from 0 to 100:  &lt;br /&gt;
** '''music''':  Changes the music volume.&lt;br /&gt;
** '''sound''':  Changes the sound volume.&lt;br /&gt;
* '''[colour_adjust]''': tints the colour of the screen.&lt;br /&gt;
** '''red''', '''green''', '''blue''': values from -255 to 255, the amount to tint by for each colour&lt;br /&gt;
* '''[delay]''': pauses the game&lt;br /&gt;
** '''time''': the time to pause in milliseconds&lt;br /&gt;
* '''[redraw]''': redraws the screen (this normally isn't done during events, although some of the other interface actions cause the screen or parts of it to be redrawn).&lt;br /&gt;
** '''side''': if used, recalculates fog and shroud for that side. Useful if you for example spawn friendly units in the middle of an event and want the shroud to update accordingly (otherwise units that spawn inside fog would remain invisible for the duration of the event, since the fog would not automatically get cleared around them).&lt;br /&gt;
* '''[unit_overlay]''': sets an image that will be drawn over a particular unit, and follow it around&lt;br /&gt;
** '''x''', '''y''': the location of the unit to overlay on&lt;br /&gt;
** '''image''': the image to place on the unit&lt;br /&gt;
* '''[remove_unit_overlay]''': removes a particular overlayed image from a unit&lt;br /&gt;
** '''x''', '''y''': the location of the unit to remove an overlay from&lt;br /&gt;
** '''image''': the image to remove from the unit&lt;br /&gt;
* '''[animate_unit]''': Uses an animation of a unit to animate it on screen (if the unit has the corresponding animation).&lt;br /&gt;
** '''flag''': The key to find the custom animation in the unit description (see the '''[extra_anim]''' description in [[AnimationWML]]). Standard animations can be triggered with the following keywords: ''leading recruited standing idling levelin levelout healing healed poisoned movement defend attack death victory pre_teleport post_teleport''&lt;br /&gt;
** '''[filter]''' with a [[StandardUnitFilter]] as argument, see [[FilterWML]]. By default, the unit at the event location will be animated. You can use this tag to choose any other unit to animate.&lt;br /&gt;
** '''[primary_attack]''': If this tag is not present, the filter for animation will be triggered with no attack. If it is here, all attacks from the unit will be filtered, and a matching one will be used to filter the animation. Takes a weapon filter as argument, see [[FilterWML]].&lt;br /&gt;
** '''[secondary_attack]''': Similar to '''[primary_attack]'''. May be needed to trigger a defense animation correctly, if there are more than one animations available for the defending unit.&lt;br /&gt;
** '''hits''': yes/no: which according variation of a attack/defense animation shall be chosen (required)&lt;br /&gt;
** '''text''': a text to hover during the animation &lt;br /&gt;
** '''red''': red value for the text color (0-255)&lt;br /&gt;
** '''green''': green value for the text color&lt;br /&gt;
** '''blue''': blue value for the text color&lt;br /&gt;
** '''with_bars''': yes/no: whether to display the status bars during the animation (e.g. the hitpoint bar)&lt;br /&gt;
** '''[animate]''': a sub block with the same syntax as '''[animate_unit]''' except that the '''[filter]''' block is mandatory to find the unit. This block will find and animate another unit simultaneously.&lt;br /&gt;
** '''[facing]''': a [[StandardLocationFilter]] specifying what direction the unit should be facing when animated&lt;br /&gt;
* '''[label]''' places a label on the map.&lt;br /&gt;
** '''x''', '''y''': the location of the label&lt;br /&gt;
** '''text''': what the label should say&lt;br /&gt;
** '''team_name''': if specified, the label will only be visible to the given team.&lt;br /&gt;
** '''colour''': color of the label. The format is r,g,b; r, g and b are numbers between 0 and 255. &lt;br /&gt;
** '''visible_in_fog''': whether the label should be visible through fog or not. Default yes.&lt;br /&gt;
** '''visible_in_shroud''': whether the label should be visible through shroud or not. Default no.&lt;br /&gt;
** '''immutable''': whether this label is protected from being removed or changed by players. Default yes. {{DevFeature1.9}}&lt;br /&gt;
* '''[deprecated_message]''' shows a deprecated message in the message area, this feature is only intended to be used to warn about deprecated macros in mainline. The message is not translatable.&lt;br /&gt;
** '''message''': the message to show.&lt;br /&gt;
* '''[wml_message]''' outputs a message to Wesnoth's console output. Intended for campaign designers to output silent text to the console, without annoying the player; then, that text might contain information useful for later bug-reporting. The log domain for it is '''wml''', and the '''debug/dbg''' log level is available for use with the '''logger''' attribute. Depending on the current log level ('''error''' by default), which may be changed with the in-game :log command, or the --log-&amp;lt;level&amp;gt;=wml command line switch, the messages are echoed to the in-game chat.&lt;br /&gt;
** '''message''': the message to show.&lt;br /&gt;
** '''logger''': the Wesnoth engine output logger that should catch the text; this might be 'err' (the errors log level), 'warn'/'wrn' (the warnings log level) or anything else (the information log level). Not all information will be displayed depending on the log level chosen when starting Wesnoth.&lt;br /&gt;
* '''[open_help]''' opens the in-game help.&lt;br /&gt;
** '''topic''': the id of the topic to open&lt;br /&gt;
* '''[show_objectives]''': {{DevFeature}} refreshes the objectives defined by [objectives] and its [show_if] tags, and displays them. (It is also called whenever the user explicitly asks for the objectives; this matters only if the tag was overridden by a [[LuaWML#register_wml_action|Lua]] script.)&lt;br /&gt;
** '''side''': the side to show the objectives. If not set, all sides are used.&lt;br /&gt;
&lt;br /&gt;
== Useful Macros ==&lt;br /&gt;
There are some predefined macros that you find useful for interface actions. You can find a complete list along with a detailed explanation of how they work [http://www.wesnoth.org/macro-reference.xhtml here].&lt;br /&gt;
* '''{FLOATING_TEXT}''' Float some text over a unit similar to the damage numbers.&lt;br /&gt;
* '''{HIGHLIGHT_UNIT}''' Highlight a unit on the map. Use this to show important units&lt;br /&gt;
* '''{HIGHLIGHT_IMAGE}''' Places and highlights an image on the map. Use this to show important items or locations&lt;br /&gt;
* '''{SET_IMAGE}''' Places an image on the map which has no other function.&lt;br /&gt;
* '''{QUAKE &amp;lt;soundfile&amp;gt;}''' Creates a tremor like screenshake and plays &amp;lt;soundfile&amp;gt;. ('''{TREMOR}''' is a deprecated version, equivalent to '''{QUAKE (rumble.ogg)}''')&lt;br /&gt;
* '''{FLASH_WHITE}''' Flash the screen white momentarily. You can also replace WHITE with RED, BLUE or GREEN for a different colour.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[DirectActionsWML]]&lt;br /&gt;
* [[InternalActionsWML]]&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;br /&gt;
[[Category: ActionsWML]]&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=36488</id>
		<title>InterfaceActionsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=36488"/>
		<updated>2010-05-11T21:47:37Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Interface actions ==&lt;br /&gt;
&lt;br /&gt;
Interface actions are actions that do not have an effect on gameplay;&lt;br /&gt;
instead, they show something to the player.  The main interface tags&lt;br /&gt;
are '''[message]''' and '''[objectives]''', but several other tags affect&lt;br /&gt;
the interface also.&lt;br /&gt;
&lt;br /&gt;
== [inspect] ==&lt;br /&gt;
This user interface action only works in debug mode. It displays the gamestate inspector dialog (the same one which can be brought up with '':inspect'' ), which can be used to inspect the values of WML variables, AI configuration, recall lists, and more.&lt;br /&gt;
&lt;br /&gt;
* '''name''': optional attribute to specify the name of this gamestate inspector dialog. It is just a label to help differentiate between different invocations of gamestate inspector dialog.&lt;br /&gt;
&lt;br /&gt;
== [message] ==&lt;br /&gt;
The most commonly used interface action is [message], which displays a message to the user in a dialog box. It can also be used to take input from the user.&lt;br /&gt;
&lt;br /&gt;
The following key/tags are accepted for [message]:&lt;br /&gt;
* [[StandardUnitFilter]]: The unit whose profile and name are displayed. Do not use a [filter] tag. If no unit matching this filter is found, the message is not displayed (The unit has probably been killed).&amp;lt;br&amp;gt;'''[message]''' elements should be constructed so that it is either guaranteed that a certain unit is alive, or so that dialog flows smoothly even if the message isn't displayed.&lt;br /&gt;
&lt;br /&gt;
* '''speaker''': an alternative to standard unit filter. You may specify as the value of the speaker attribute a unit id or any of the following special values:&lt;br /&gt;
** '''narrator''': the dialog box is displayed without a caption for the unit speaking or a unit image&lt;br /&gt;
** '''unit''': the primary unit for the event is speaking&lt;br /&gt;
** '''second_unit''': the secondary unit for the event is speaking&lt;br /&gt;
&lt;br /&gt;
* '''message''': (translatable) the text to display to the right of the image. ''message'' is sometimes multiple lines; if it is, be sure to use quotes(''' ' ''' or ''' &amp;quot; ''')&lt;br /&gt;
* '''[show_if]''': if present then this message will only be displayed if the conditional statement in this tag is passed (see [[ConditionalActionsWML#Condition_Tags|ConditionalActionsWML]])&lt;br /&gt;
* '''side_for''': (default: all sides) comma-separated list of sides for who message is shown.&lt;br /&gt;
* '''image''': (default: profile image of speaker) the image to display next to the message.&lt;br /&gt;
* '''caption''': (default: name of speaker) the caption to display beside the image. Name to be displayed.&lt;br /&gt;
* '''duration''': (default: 10) the minimum number of frames for this message to be displayed. (A frame lasts about 30 milliseconds.) During this time any dialog decisions will be disregarded.&lt;br /&gt;
* '''sound''': a sound effect (wav file) to play as the message is displayed. This can be a comma-separated list, from which one will be randomly chosen.&lt;br /&gt;
* '''[option]''': zero or more '''[option]''' elements may be present. If '''[option]''' elements are present, then each option will be displayed in a menu for the user to select one option.&lt;br /&gt;
** '''message''': (translatable) the text displayed for the option (see [[DescriptionWML]])&lt;br /&gt;
** '''[show_if]''': if present then this option will only be displayed if the conditional statement in this tag is passed (see [[InternalActionsWML]])&lt;br /&gt;
** '''[command]''': an element containing actions which are executed if the option is selected.&lt;br /&gt;
* '''[text_input]''': there can be only one [text_input] tag. this adds a text input field to the message.&lt;br /&gt;
** '''variable''': the variable that the user's input will be written to&lt;br /&gt;
** '''label''': a text label to the left of the input field&lt;br /&gt;
** '''max_chars''': the maximum number of characters that may be typed into the field&lt;br /&gt;
** '''text''': text that is written into the field in the beginning&lt;br /&gt;
* Check [[EventWML#Multiplayer_safety]] to find out in which events you can safely use '''[option]''' and '''[text_input]''' without causing OOS.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
In 1.8, [http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html Pango markup formatting codes] have been adopted for '''[message]'''. These can also be used in unit names (user_description), objectives, and such. Note that you'll probably want to use a single quote ' instead of a double quote &amp;quot; as double quotes cannot be escaped, otherwise the string will appear fragmented and you may also encounter errors. Running wmllint on your campaign will up-convert it, warning you about unusual cases you must fix by hand.&lt;br /&gt;
&lt;br /&gt;
For example, if you wanted to write &amp;quot;You are victorious!&amp;quot; in large, italic, gold letters, you might write it this way:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span color='#BCB088' size='large' font-style='italic'&amp;gt;You are victorious!&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the codes taken from the Pango markup formatting guide:&lt;br /&gt;
&lt;br /&gt;
*'''font''', '''font_desc''': A font description string, such as &amp;quot;Sans Italic 12&amp;quot;.&lt;br /&gt;
*'''font_family''', '''face''': A font family name.&lt;br /&gt;
*'''font_size''', '''size''': Font size in 1024ths of a point, or one of the absolute sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', or one of the relative sizes 'smaller' or 'larger'.&lt;br /&gt;
*'''font_style''', '''style''': One of 'normal', 'oblique', 'italic'.&lt;br /&gt;
*'''font_weight''', '''weight''': One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy', or a numeric weight.&lt;br /&gt;
*'''font_variant''', '''variant''': One of 'normal' or 'smallcaps'.&lt;br /&gt;
*'''font_stretch''', '''stretch''': One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded'.&lt;br /&gt;
*'''foreground''', '''fgcolor''', '''color''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''background, bgcolor''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''underline''': One of 'none', 'single', 'double', 'low', 'error'.&lt;br /&gt;
*'''underline_color''': The color of underlines; an RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''rise''': Vertical displacement, in 10000ths of an em. Can be negative for subscript, positive for superscript.&lt;br /&gt;
*'''strikethrough''': 'true' or 'false' whether to strike through the text.&lt;br /&gt;
*'''strikethrough_color''': The color of strikethrough lines; an RGB color specification such as '#00FF00' or a color name such as 'red'&lt;br /&gt;
*'''fallback''': 'true' or 'false' whether to enable fallback. If disabled, then characters will only be used from the closest matching font on the system. No fallback will be done to other fonts on the system that might contain the characters in the text. Fallback is enabled by default. Most applications should not disable fallback.&lt;br /&gt;
*'''letter_spacing''': Inter-letter spacing in 1024ths of a point.&lt;br /&gt;
*'''gravity''': One of 'south', 'east', 'north', 'west', 'auto'.&lt;br /&gt;
*'''gravity_hint''': One of 'natural', 'strong', 'line'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In 1.6, Wesnoth uses older text formatting options&lt;br /&gt;
* A tilde (~) as the first character causes the line to be boldfaced.&lt;br /&gt;
* An at symbol (@) as the first character causes the line to be green, as done with victory conditions.&lt;br /&gt;
* A pound symbol (#) as the first character causes the line to be red, as done with defeat conditions.&lt;br /&gt;
* An asterisk (*) as the first character causes the line to be bigger.&lt;br /&gt;
* A backquote (`) as the first character causes the line to be smaller.&lt;br /&gt;
* If used, the caption key text is boldfaced.&lt;br /&gt;
* An RGB colour code in the beginning causes the line to be the given colour. This can still be preceded by the above characters. Example: ''message=_&amp;quot;&amp;lt;255,0,0&amp;gt;Red!&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
== [objectives] ==&lt;br /&gt;
The other tag used for plot development is '''[objectives]'''.&lt;br /&gt;
The '''[objectives]''' tag overwrites any previously set objectives,&lt;br /&gt;
and displays text which should describe the objectives of the scenario.&lt;br /&gt;
Scenario objectives are displayed on the player's first turn after the tag is used,&lt;br /&gt;
or as part of the event if it triggers during that player's turn.&lt;br /&gt;
Objectives can also be accessed at any time in a scenario using the&lt;br /&gt;
&amp;quot;Scenario Objectives&amp;quot; game menu option, making this tag useful for&lt;br /&gt;
scenario-specific information that the player may need to refer to during play.&lt;br /&gt;
&lt;br /&gt;
This tag renders the ''objectives'' attribute of [scenario] obsolete (see ''objectives'', [[ScenarioWML]]).&lt;br /&gt;
Instead of using ''objectives'', use '''[objectives]''' to set scenario objectives inside a prestart event.&lt;br /&gt;
It can also be used to overwrite the starting objectives mid-scenario.&lt;br /&gt;
&lt;br /&gt;
Attributes of '''[objectives]''':&lt;br /&gt;
* '''side''': Default '0'. The side to set the objectives for. A value of 0 sets objectives for all sides.&lt;br /&gt;
* '''summary''': Displayed first in the objectives text, this should describe the basic objective for the overall scenario.  Can be omitted.&lt;br /&gt;
* '''note''': Displayed last in the objectives text, this is sometimes used for hints or additional information.  Can be omitted.&lt;br /&gt;
* '''victory_string''': Default ' _ &amp;quot;Victory:&amp;quot;', this text precedes the victory objectives.&lt;br /&gt;
* '''defeat_string''': Default ' _ &amp;quot;Defeat:&amp;quot;', this text precedes the defeat objectives.&lt;br /&gt;
* '''silent''': Default: not present. If set to &amp;quot;yes&amp;quot;, the objectives are silently changed. Else, they will be shown to the user when appropriate.&lt;br /&gt;
&lt;br /&gt;
Tags of '''[objectives]''':&lt;br /&gt;
* '''[objective]''': describes a win or loss condition. Most scenarios have multiple win or loss conditions, so use a separate [objective] subtag for each line; this helps with translations.&lt;br /&gt;
** '''description''': text for the specific win or loss condition.&lt;br /&gt;
** '''condition''': The color and placement of the text. Values are 'win'(colored green, placed after ''victory_string'') and 'lose'(colored red, placed after ''defeat_string'')&lt;br /&gt;
** '''[show_if]''': A condition that disables the objective if it doesn't hold. Conditional objectives are refreshed at '''[show_objectives]''' time only. {{DevFeature}}&lt;br /&gt;
&lt;br /&gt;
=== Macros ===&lt;br /&gt;
There are a few predefined macros for Objectives that you can use to shorten the code: [http://www.wesnoth.org/macro-reference.xhtml#SET_OBJECTIVES SET_OBJECTIVES], [http://www.wesnoth.org/macro-reference.xhtml#VICTORY_CONDITION VICTORY_CONDITION], and [http://www.wesnoth.org/macro-reference.xhtml#DEFEAT_CONDITION DEFEAT_CONDITION]. Follow the links for each one to see complete syntax and example usage.&lt;br /&gt;
&lt;br /&gt;
== [set_menu_item] ==&lt;br /&gt;
This tag is used to add a custom option in the right-click context menu which can then be used to trigger arbitrary WML commands.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Due to limitations in portable devices where there are no scroll bars for context menus, there is a hard-coded limit of 7 custom WML menu items. If you really need to have more than 7 menu items, try combining some of them in a submenu.&lt;br /&gt;
&lt;br /&gt;
* '''id''': the unique id for this menu item. If a menu item with this id already exists, it allows you to set specific changes to that item.&lt;br /&gt;
* '''description''': the in-game text that will appear for this item in the menu.&lt;br /&gt;
* '''image''': the image to display next to this item.&lt;br /&gt;
* '''needs_select''': if ''yes'' (default ''no''), then the latest select event (see [[EventWML]]) that triggered before this menu item was chosen will be transmitted over the network before this menu item action will be. This only has any effect in networked multiplayer, and is intended to allow more elaborate menu item behaviour there without causing out of sync errors. If you don't know what this means, just leave it false.&lt;br /&gt;
* '''[show_if]''': If present, the menu item will only be available if the conditional statement (see [[InternalActionsWML]]) within evaluates to true. When this is evaluated, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked, so it's possible to for example only enable the option on empty hexes or on a particular unit.&lt;br /&gt;
* '''[filter_location]''': contains a location filter similar to the one found inside Single Unit Filters (see [[FilterWML]]). The menu item will only be available on matching locations.&lt;br /&gt;
* '''[command]''': contains the WML actions to be executed when the menu item is selected. Again, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked on.&lt;br /&gt;
&lt;br /&gt;
== Other interface tags ==&lt;br /&gt;
&lt;br /&gt;
The following tags are also action tags:&lt;br /&gt;
* '''[item]''': makes a graphical item appear on a certain hex. Note this only places the graphics for an item. It does not make the item do anything. Use a moveto event to make moving onto the item do something. &amp;lt;tt&amp;gt;''('''Hint:''' There are a number of predefined items that are used in various campaigns that you can make use of. You can find [http://www.wesnoth.org/macro-reference.xhtml#file:items.cfg a list of them] if you look into the items.cfg file in the wesnoth install directory (under /data/core/macros))''&amp;lt;/tt&amp;gt;&lt;br /&gt;
** '''x''', '''y''': the location to place the item.&lt;br /&gt;
** '''image''': the image (in ''images/'' as .png) to place on the hex.&lt;br /&gt;
** '''halo''': an image to place centered on the hex. Use this instead of ''image'' if the image is bigger than the hex or if you want to animate an image. ''Example (where the integer after the colon is the duration of each frame): halo=scenery/fire1.png:100,scenery/fire2.png:100,scenery/fire3.png:100,scenery/fire4.png:100,scenery/fire5.png:100,scenery/fire6.png:100,scenery/fire7.png:100,scenery/fire8.png:100''&lt;br /&gt;
** '''team_name''': name of the team for which the item is to be displayed (hidden for others). For multiple teams just put all the names in one string, for example separated by commas.&lt;br /&gt;
** '''visible_in_fog''': whether the item should be visible through fog or not. Default yes.&lt;br /&gt;
* '''[removeitem]''': removes any graphical items on a given hex&lt;br /&gt;
** '''x''', '''y''': the hex to remove items off&lt;br /&gt;
** '''image''' if specified, only removes the given image item (This image name must include any [[ImagePathFunctionWML|image path functions]] appended to the original image name.)&lt;br /&gt;
* '''[print]''': displays a message across the screen. The message will disappear after a certain time.&lt;br /&gt;
** '''text''': (translatable) the text to display.&lt;br /&gt;
** '''size''': (default=12) the pointsize of the font to use&lt;br /&gt;
** '''duration''': (default=50) the length of time to display the text for. This is measured in the number of 'frames'. A frame in Wesnoth is usually displayed for around 30ms.&lt;br /&gt;
** '''red''', '''green''', '''blue''': (default=0,0,0) the color to display the text in. Values vary from 0-255.&lt;br /&gt;
* '''[move_unit_fake]''': moves an image of a unit along a certain path on the map. The path does not need to be a continuous list of adjacent hexes, so for example only the start and end points can be given, in which case the straightest line between those points will be calculated and used.&lt;br /&gt;
** '''type''': the type of the unit whose image to use&lt;br /&gt;
** '''x''': a comma-separated list of x locations to move along&lt;br /&gt;
** '''y''': a comma-separated list of y locations to move along (x and y values are matched pairs)&lt;br /&gt;
** '''side''': the side of the fake unit, used for team-coloring the fake unit&lt;br /&gt;
* '''[hide_unit]''': makes the given unit become invisible. Useful in conjunction with '''[move_unit_fake]''': to move a leader unit into position on-screen. Each '''[hide_unit]''' tag only hides one unit.&lt;br /&gt;
** '''x''', '''y''': location of the unit to be hidden. (NOT a standard unit filter! Just x and y.)&lt;br /&gt;
* '''[unhide_unit]''': stops the currently hidden units from being hidden.&lt;br /&gt;
* '''[scroll]''': Scroll a certain number of pixels in a given direction. Useful for earthquake/shaking effects.&lt;br /&gt;
** '''x''', '''y''': the number of pixels to scroll along the x and y axis&lt;br /&gt;
* '''[scroll_to]''': Scroll to a given hex&lt;br /&gt;
** '''x''', '''y''': the hex to scroll to&lt;br /&gt;
** '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''true'' (don't scroll to fog) and ''false'' (scroll even to fog), with ''false'' as the default.&lt;br /&gt;
* '''[scroll_to_unit]''' Scroll to a given unit&lt;br /&gt;
** [[StandardUnitFilter]]&lt;br /&gt;
** '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''true'' (don't scroll to fog) and ''false'' (scroll even to fog), with ''false'' as the default.&lt;br /&gt;
* '''[sound]''': Plays a sound&lt;br /&gt;
** '''name''': the filename of the sound to play (in ''sounds/'' as .wav or .ogg)&lt;br /&gt;
** '''repeat''': repeats the sound for a specified additional number of times (default=0)&lt;br /&gt;
* '''[sound_source]''': Creates a sound source. &amp;quot;Sound sources&amp;quot; is a general name for a mechanism which makes possible for map elements to emit sounds according to some rules, where &amp;quot;map elements&amp;quot; can be specific locations or terrain types. For now, only sound sources tied to locations are supported.&lt;br /&gt;
** '''id''': a unique identification key of the sound source&lt;br /&gt;
** '''sounds''': a list of comma separated, randomly played sounds associated with the sound source&lt;br /&gt;
** '''delay''': a numerical value (in milliseconds) of the minimal delay between two playbacks of the source's sound if the source remains visible on the screen; if one scrolls out and back in, the source will be considered as ready to play&lt;br /&gt;
** '''chance''': a percentage (a value from 0 to 100) describing the chance of the source being activated every second after the delay has passed or when the source's location appears on the screen (note that it cannot play more than one file at the same time)&lt;br /&gt;
** '''check_fogged''': possible values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; - if true the source will not play if its locations are fogged&lt;br /&gt;
** '''check_shrouded''': {{DevFeature}} possible values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; - if true the source will not play if its locations are shrouded&lt;br /&gt;
** '''x,y''': a [[StandardLocationFilter]] for the locations associated with the sound source&lt;br /&gt;
** '''fade_range''' (default = 3): distance in hexes that determines a &amp;quot;circular&amp;quot; area around the one specified by '''full_range''' where sound volume fades out linearly&lt;br /&gt;
** '''full_range''' (default = 14): distance in hexes that determines a &amp;quot;circular&amp;quot; area where source plays with full volume, relative to screen center&lt;br /&gt;
** '''loop''': number of times a sound sample should be looped if it stays visible. -1 means infinite (~65000)&lt;br /&gt;
* '''[remove_sound_source]''': Removes a previously defined sound source.&lt;br /&gt;
** '''id''': the identification key of the sound source to remove&lt;br /&gt;
* '''[music]''': Switches to playing different music&lt;br /&gt;
** '''name''': the filename of the music to play (in ''music/'' as .ogg)&lt;br /&gt;
** see [[MusicListWML]] for the correct syntax&lt;br /&gt;
* '''[volume]''': {{DevFeature}} Changes the game volume to a percent of the preferences volume for the game being played. Values can go from 0 to 100:  &lt;br /&gt;
** '''music''':  Changes the music volume.&lt;br /&gt;
** '''sound''':  Changes the sound volume.&lt;br /&gt;
* '''[colour_adjust]''': tints the colour of the screen.&lt;br /&gt;
** '''red''', '''green''', '''blue''': values from -255 to 255, the amount to tint by for each colour&lt;br /&gt;
* '''[delay]''': pauses the game&lt;br /&gt;
** '''time''': the time to pause in milliseconds&lt;br /&gt;
* '''[redraw]''': redraws the screen (this normally isn't done during events, although some of the other interface actions cause the screen or parts of it to be redrawn).&lt;br /&gt;
** '''side''': if used, recalculates fog and shroud for that side. Useful if you for example spawn friendly units in the middle of an event and want the shroud to update accordingly (otherwise units that spawn inside fog would remain invisible for the duration of the event, since the fog would not automatically get cleared around them).&lt;br /&gt;
* '''[unit_overlay]''': sets an image that will be drawn over a particular unit, and follow it around&lt;br /&gt;
** '''x''', '''y''': the location of the unit to overlay on&lt;br /&gt;
** '''image''': the image to place on the unit&lt;br /&gt;
* '''[remove_unit_overlay]''': removes a particular overlayed image from a unit&lt;br /&gt;
** '''x''', '''y''': the location of the unit to remove an overlay from&lt;br /&gt;
** '''image''': the image to remove from the unit&lt;br /&gt;
* '''[animate_unit]''': Uses an animation of a unit to animate it on screen (if the unit has the corresponding animation).&lt;br /&gt;
** '''flag''': The key to find the custom animation in the unit description (see the '''[extra_anim]''' description in [[AnimationWML]]). Standard animations can be triggered with the following keywords: ''leading recruited standing idling levelin levelout healing healed poisoned movement defend attack death victory pre_teleport post_teleport''&lt;br /&gt;
** '''[filter]''' with a [[StandardUnitFilter]] as argument, see [[FilterWML]]. By default, the unit at the event location will be animated. You can use this tag to choose any other unit to animate.&lt;br /&gt;
** '''[primary_attack]''': If this tag is not present, the filter for animation will be triggered with no attack. If it is here, all attacks from the unit will be filtered, and a matching one will be used to filter the animation. Takes a weapon filter as argument, see [[FilterWML]].&lt;br /&gt;
** '''[secondary_attack]''': Similar to '''[primary_attack]'''. May be needed to trigger a defense animation correctly, if there are more than one animations available for the defending unit.&lt;br /&gt;
** '''hits''': yes/no: whether the being-hit or being-not-hit variants of attack/defense animations are chosen&lt;br /&gt;
** '''text''': a text to hover during the animation&lt;br /&gt;
** '''red''': red value for the text color (0-255)&lt;br /&gt;
** '''green''': green value for the text color&lt;br /&gt;
** '''blue''': blue value for the text color&lt;br /&gt;
** '''with_bars''': yes/no: whether to display the status bars during the animation (e.g. the hitpoint bar)&lt;br /&gt;
** '''[animate]''': a sub block with the same syntax as '''[animate_unit]''' except that the '''[filter]''' block is mandatory to find the unit. This block will find and animate another unit simultaneously.&lt;br /&gt;
** '''[facing]''': a [[StandardLocationFilter]] specifying what direction the unit should be facing when animated&lt;br /&gt;
* '''[label]''' places a label on the map.&lt;br /&gt;
** '''x''', '''y''': the location of the label&lt;br /&gt;
** '''text''': what the label should say&lt;br /&gt;
** '''team_name''': if specified, the label will only be visible to the given team.&lt;br /&gt;
** '''colour''': color of the label. The format is r,g,b; r, g and b are numbers between 0 and 255. &lt;br /&gt;
** '''visible_in_fog''': whether the label should be visible through fog or not. Default yes.&lt;br /&gt;
** '''visible_in_shroud''': whether the label should be visible through shroud or not. Default no.&lt;br /&gt;
* '''[deprecated_message]''' shows a deprecated message in the message area, this feature is only intended to be used to warn about deprecated macros in mainline. The message is not translatable.&lt;br /&gt;
** '''message''': the message to show.&lt;br /&gt;
* '''[wml_message]''' outputs a message to Wesnoth's console output. Intended for campaign designers to output silent text to the console, without annoying the player; then, that text might contain information useful for later bug-reporting. The log domain for it is '''wml''', and the '''debug/dbg''' log level is available for use with the '''logger''' attribute. Depending on the current log level ('''error''' by default), which may be changed with the in-game :log command, or the --log-&amp;lt;level&amp;gt;=wml command line switch, the messages are echoed to the in-game chat.&lt;br /&gt;
** '''message''': the message to show.&lt;br /&gt;
** '''logger''': the Wesnoth engine output logger that should catch the text; this might be 'err' (the errors log level), 'warn'/'wrn' (the warnings log level) or anything else (the information log level). Not all information will be displayed depending on the log level chosen when starting Wesnoth.&lt;br /&gt;
* '''[open_help]''' opens the in-game help.&lt;br /&gt;
** '''topic''': the id of the topic to open&lt;br /&gt;
* '''[show_objectives]''': {{DevFeature}} refreshes the objectives defined by [objectives] and its [show_if] tags, and displays them. (It is also called whenever the user explicitly asks for the objectives; this matters only if the tag was overridden by a [[LuaWML#register_wml_action|Lua]] script.)&lt;br /&gt;
** '''side''': the side to show the objectives. If not set, all sides are used.&lt;br /&gt;
&lt;br /&gt;
== Useful Macros ==&lt;br /&gt;
There are some predefined macros that you find useful for interface actions. You can find a complete list along with a detailed explanation of how they work [http://www.wesnoth.org/macro-reference.xhtml here].&lt;br /&gt;
* '''{FLOATING_TEXT}''' Float some text over a unit similar to the damage numbers.&lt;br /&gt;
* '''{HIGHLIGHT_UNIT}''' Highlight a unit on the map. Use this to show important units&lt;br /&gt;
* '''{HIGHLIGHT_IMAGE}''' Places and highlights an image on the map. Use this to show important items or locations&lt;br /&gt;
* '''{SET_IMAGE}''' Places an image on the map which has no other function.&lt;br /&gt;
* '''{QUAKE &amp;lt;soundfile&amp;gt;}''' Creates a tremor like screenshake and plays &amp;lt;soundfile&amp;gt;. ('''{TREMOR}''' is a deprecated version, equivalent to '''{QUAKE (rumble.ogg)}''')&lt;br /&gt;
* '''{FLASH_WHITE}''' Flash the screen white momentarily. You can also replace WHITE with RED, BLUE or GREEN for a different colour.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[DirectActionsWML]]&lt;br /&gt;
* [[InternalActionsWML]]&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;br /&gt;
[[Category: ActionsWML]]&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=36288</id>
		<title>InterfaceActionsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=36288"/>
		<updated>2010-04-24T13:34:54Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Interface actions ==&lt;br /&gt;
&lt;br /&gt;
Interface actions are actions that do not have an effect on gameplay;&lt;br /&gt;
instead, they show something to the player.  The main interface tags&lt;br /&gt;
are '''[message]''' and '''[objectives]''', but several other tags affect&lt;br /&gt;
the interface also.&lt;br /&gt;
&lt;br /&gt;
== [inspect] ==&lt;br /&gt;
This user interface action only works in debug mode. It displays the gamestate inspector dialog (the same one which can be brought up with '':inspect'' ), which can be used to inspect the values of WML variables, AI configuration, recall lists, and more.&lt;br /&gt;
&lt;br /&gt;
* '''name''': optional attribute to specify the name of this gamestate inspector dialog. It is just a label to help differentiate between different invocations of gamestate inspector dialog.&lt;br /&gt;
&lt;br /&gt;
== [message] ==&lt;br /&gt;
The most commonly used interface action is [message], which displays a message to the user in a dialog box. It can also be used to take input from the user.&lt;br /&gt;
&lt;br /&gt;
The following key/tags are accepted for [message]:&lt;br /&gt;
* [[StandardUnitFilter]]: The unit whose profile and name are displayed. Do not use a [filter] tag. If no unit matching this filter is found, the message is not displayed (The unit has probably been killed).&amp;lt;br&amp;gt;'''[message]''' elements should be constructed so that it is either guaranteed that a certain unit is alive, or so that dialog flows smoothly even if the message isn't displayed.&lt;br /&gt;
&lt;br /&gt;
* '''speaker''': an alternative to standard unit filter. You may specify as the value of the speaker attribute a unit id or any of the following special values:&lt;br /&gt;
** '''narrator''': the dialog box is displayed without a caption for the unit speaking or a unit image&lt;br /&gt;
** '''unit''': the primary unit for the event is speaking&lt;br /&gt;
** '''second_unit''': the secondary unit for the event is speaking&lt;br /&gt;
&lt;br /&gt;
* '''message''': (translatable) the text to display to the right of the image. ''message'' is sometimes multiple lines; if it is, be sure to use quotes(''' ' ''' or ''' &amp;quot; ''')&lt;br /&gt;
* '''[show_if]''': if present then this message will only be displayed if the conditional statement in this tag is passed (see [[ConditionalActionsWML#Condition_Tags|ConditionalActionsWML]])&lt;br /&gt;
* '''side_for''': (default: all sides) comma-separated list of sides for who message is shown.&lt;br /&gt;
* '''image''': (default: profile image of speaker) the image to display next to the message.&lt;br /&gt;
* '''caption''': (default: name of speaker) the caption to display beside the image. Name to be displayed.&lt;br /&gt;
* '''duration''': (default: 10) the minimum number of frames for this message to be displayed. (A frame lasts about 30 milliseconds.) During this time any dialog decisions will be disregarded.&lt;br /&gt;
* '''sound''': a sound effect (wav file) to play as the message is displayed. This can be a comma-separated list, from which one will be randomly chosen.&lt;br /&gt;
* '''[option]''': zero or more '''[option]''' elements may be present. If '''[option]''' elements are present, then each option will be displayed in a menu for the user to select one option.&lt;br /&gt;
** '''message''': (translatable) the text displayed for the option (see [[DescriptionWML]])&lt;br /&gt;
** '''[show_if]''': if present then this option will only be displayed if the conditional statement in this tag is passed (see [[InternalActionsWML]])&lt;br /&gt;
** '''[command]''': an element containing actions which are executed if the option is selected.&lt;br /&gt;
* '''[text_input]''': there can be only one [text_input] tag. this adds a text input field to the message.&lt;br /&gt;
** '''variable''': the variable that the user's input will be written to&lt;br /&gt;
** '''label''': a text label to the left of the input field&lt;br /&gt;
** '''max_chars''': the maximum number of characters that may be typed into the field&lt;br /&gt;
** '''text''': text that is written into the field in the beginning&lt;br /&gt;
* Check [[EventWML#Multiplayer_safety]] to find out in which events you can safely use '''[option]''' and '''[text_input]''' without causing OOS.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
In 1.8, [http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html Pango markup formatting codes] have been adopted for '''[message]'''. These can also be used in unit names (user_description), objectives, and such. Note that you'll probably want to use a single quote ' instead of a double quote &amp;quot; as double quotes cannot be escaped, otherwise the string will appear fragmented and you may also encounter errors. Running wmllint on your campaign will up-convert it, warning you about unusual cases you must fix by hand.&lt;br /&gt;
&lt;br /&gt;
For example, if you wanted to write &amp;quot;You are victorious!&amp;quot; in large, italic, gold letters, you might write it this way:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span color='#BCB088' size='large' font-style='italic'&amp;gt;You are victorious!&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the codes taken from the Pango markup formatting guide:&lt;br /&gt;
&lt;br /&gt;
*'''font''', '''font_desc''': A font description string, such as &amp;quot;Sans Italic 12&amp;quot;.&lt;br /&gt;
*'''font_family''', '''face''': A font family name.&lt;br /&gt;
*'''font_size''', '''size''': Font size in 1024ths of a point, or one of the absolute sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', or one of the relative sizes 'smaller' or 'larger'.&lt;br /&gt;
*'''font_style''', '''style''': One of 'normal', 'oblique', 'italic'.&lt;br /&gt;
*'''font_weight''', '''weight''': One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy', or a numeric weight.&lt;br /&gt;
*'''font_variant''', '''variant''': One of 'normal' or 'smallcaps'.&lt;br /&gt;
*'''font_stretch''', '''stretch''': One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded'.&lt;br /&gt;
*'''foreground''', '''fgcolor''', '''color''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''background, bgcolor''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''underline''': One of 'none', 'single', 'double', 'low', 'error'.&lt;br /&gt;
*'''underline_color''': The color of underlines; an RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''rise''': Vertical displacement, in 10000ths of an em. Can be negative for subscript, positive for superscript.&lt;br /&gt;
*'''strikethrough''': 'true' or 'false' whether to strike through the text.&lt;br /&gt;
*'''strikethrough_color''': The color of strikethrough lines; an RGB color specification such as '#00FF00' or a color name such as 'red'&lt;br /&gt;
*'''fallback''': 'true' or 'false' whether to enable fallback. If disabled, then characters will only be used from the closest matching font on the system. No fallback will be done to other fonts on the system that might contain the characters in the text. Fallback is enabled by default. Most applications should not disable fallback.&lt;br /&gt;
*'''letter_spacing''': Inter-letter spacing in 1024ths of a point.&lt;br /&gt;
*'''gravity''': One of 'south', 'east', 'north', 'west', 'auto'.&lt;br /&gt;
*'''gravity_hint''': One of 'natural', 'strong', 'line'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In 1.6, Wesnoth uses older text formatting options&lt;br /&gt;
* A tilde (~) as the first character causes the line to be boldfaced.&lt;br /&gt;
* An at symbol (@) as the first character causes the line to be green, as done with victory conditions.&lt;br /&gt;
* A pound symbol (#) as the first character causes the line to be red, as done with defeat conditions.&lt;br /&gt;
* An asterisk (*) as the first character causes the line to be bigger.&lt;br /&gt;
* A backquote (`) as the first character causes the line to be smaller.&lt;br /&gt;
* If used, the caption key text is boldfaced.&lt;br /&gt;
* An RGB colour code in the beginning causes the line to be the given colour. This can still be preceded by the above characters. Example: ''message=_&amp;quot;&amp;lt;255,0,0&amp;gt;Red!&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
== [objectives] ==&lt;br /&gt;
The other tag used for plot development is '''[objectives]'''.&lt;br /&gt;
The '''[objectives]''' tag overwrites any previously set objectives,&lt;br /&gt;
and displays text which should describe the objectives of the scenario.&lt;br /&gt;
Scenario objectives are displayed on the player's first turn after the tag is used,&lt;br /&gt;
or as part of the event if it triggers during that player's turn.&lt;br /&gt;
Objectives can also be accessed at any time in a scenario using the&lt;br /&gt;
&amp;quot;Scenario Objectives&amp;quot; game menu option, making this tag useful for&lt;br /&gt;
scenario-specific information that the player may need to refer to during play.&lt;br /&gt;
&lt;br /&gt;
This tag renders the ''objectives'' attribute of [scenario] obsolete (see ''objectives'', [[ScenarioWML]]).&lt;br /&gt;
Instead of using ''objectives'', use '''[objectives]''' to set scenario objectives inside a prestart event.&lt;br /&gt;
It can also be used to overwrite the starting objectives mid-scenario.&lt;br /&gt;
&lt;br /&gt;
Attributes of '''[objectives]''':&lt;br /&gt;
* '''side''': Default '0'. The side to set the objectives for. A value of 0 sets objectives for all sides.&lt;br /&gt;
* '''summary''': Displayed first in the objectives text, this should describe the basic objective for the overall scenario.  Can be omitted.&lt;br /&gt;
* '''note''': Displayed last in the objectives text, this is sometimes used for hints or additional information.  Can be omitted.&lt;br /&gt;
* '''victory_string''': Default ' _ &amp;quot;Victory:&amp;quot;', this text precedes the victory objectives.&lt;br /&gt;
* '''defeat_string''': Default ' _ &amp;quot;Defeat:&amp;quot;', this text precedes the defeat objectives.&lt;br /&gt;
* '''silent''': Default: not present. If set to &amp;quot;yes&amp;quot;, the objectives are silently changed. Else, they will be shown to the user when appropriate.&lt;br /&gt;
&lt;br /&gt;
Tags of '''[objectives]''':&lt;br /&gt;
* '''[objective]''': describes a win or loss condition. Most scenarios have multiple win or loss conditions, so use a separate [objective] subtag for each line; this helps with translations.&lt;br /&gt;
** '''description''': text for the specific win or loss condition.&lt;br /&gt;
** '''condition''': The color and placement of the text. Values are 'win'(colored green, placed after ''victory_string'') and 'lose'(colored red, placed after ''defeat_string'')&lt;br /&gt;
** '''[show_if]''': A condition that disables the objective if it doesn't hold. Conditional objectives are refreshed at '''[show_objectives]''' time only. {{DevFeature}}&lt;br /&gt;
&lt;br /&gt;
=== Macros ===&lt;br /&gt;
There are a few predefined macros for Objectives that you can use to shorten the code: [http://www.wesnoth.org/macro-reference.xhtml#SET_OBJECTIVES SET_OBJECTIVES], [http://www.wesnoth.org/macro-reference.xhtml#VICTORY_CONDITION VICTORY_CONDITION], and [http://www.wesnoth.org/macro-reference.xhtml#DEFEAT_CONDITION DEFEAT_CONDITION]. Follow the links for each one to see complete syntax and example usage.&lt;br /&gt;
&lt;br /&gt;
== [set_menu_item] ==&lt;br /&gt;
This tag is used to add a custom option in the right-click context menu which can then be used to trigger arbitrary WML commands.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Due to limitations in portable devices where there are no scroll bars for context menus, there is a hard-coded limit of 7 custom WML menu items. If you really need to have more than 7 menu items, try combining some of them in a submenu.&lt;br /&gt;
&lt;br /&gt;
* '''id''': the unique id for this menu item. If a menu item with this id already exists, it allows you to set specific changes to that item.&lt;br /&gt;
* '''description''': the in-game text that will appear for this item in the menu.&lt;br /&gt;
* '''image''': the image to display next to this item.&lt;br /&gt;
* '''needs_select''': if ''yes'' (default ''no''), then the latest select event (see [[EventWML]]) that triggered before this menu item was chosen will be transmitted over the network before this menu item action will be. This only has any effect in networked multiplayer, and is intended to allow more elaborate menu item behaviour there without causing out of sync errors. If you don't know what this means, just leave it false.&lt;br /&gt;
* '''[show_if]''': If present, the menu item will only be available if the conditional statement (see [[InternalActionsWML]]) within evaluates to true. When this is evaluated, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked, so it's possible to for example only enable the option on empty hexes or on a particular unit.&lt;br /&gt;
* '''[filter_location]''': contains a location filter similar to the one found inside Single Unit Filters (see [[FilterWML]]). The menu item will only be available on matching locations.&lt;br /&gt;
* '''[command]''': contains the WML actions to be executed when the menu item is selected. Again, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked on.&lt;br /&gt;
&lt;br /&gt;
== Other interface tags ==&lt;br /&gt;
&lt;br /&gt;
The following tags are also action tags:&lt;br /&gt;
* '''[item]''': makes a graphical item appear on a certain hex. Note this only places the graphics for an item. It does not make the item do anything. Use a moveto event to make moving onto the item do something. &amp;lt;tt&amp;gt;''('''Hint:''' There are a number of predefined items that are used in various campaigns that you can make use of. You can find [http://www.wesnoth.org/macro-reference.xhtml#file:items.cfg a list of them] if you look into the items.cfg file in the wesnoth install directory (under /data/core/macros))''&amp;lt;/tt&amp;gt;&lt;br /&gt;
** '''x''', '''y''': the location to place the item.&lt;br /&gt;
** '''image''': the image (in ''images/'' as .png) to place on the hex.&lt;br /&gt;
** '''halo''': an image to place centered on the hex. Use this instead of ''image'' if the image is bigger than the hex or if you want to animate an image. ''Example (where the integer after the colon is the duration of each frame): halo=scenery/fire1.png:100,scenery/fire2.png:100,scenery/fire3.png:100,scenery/fire4.png:100,scenery/fire5.png:100,scenery/fire6.png:100,scenery/fire7.png:100,scenery/fire8.png:100''&lt;br /&gt;
** '''team_name''': name of the team for which the item is to be displayed (hidden for others). For multiple teams just put all the names in one string, for example separated by commas.&lt;br /&gt;
** '''visible_in_fog''': whether the item should be visible through fog or not. Default yes.&lt;br /&gt;
* '''[removeitem]''': removes any graphical items on a given hex&lt;br /&gt;
** '''x''', '''y''': the hex to remove items off&lt;br /&gt;
** '''image''' if specified, only removes the given image item (This image name must include any [[ImagePathFunctionWML|image path functions]] appended to the original image name.)&lt;br /&gt;
* '''[print]''': displays a message across the screen. The message will disappear after a certain time.&lt;br /&gt;
** '''text''': (translatable) the text to display.&lt;br /&gt;
** '''size''': (default=12) the pointsize of the font to use&lt;br /&gt;
** '''duration''': (default=50) the length of time to display the text for. This is measured in the number of 'frames'. A frame in Wesnoth is usually displayed for around 30ms.&lt;br /&gt;
** '''red''', '''green''', '''blue''': (default=0,0,0) the color to display the text in. Values vary from 0-255.&lt;br /&gt;
* '''[move_unit_fake]''': moves an image of a unit along a certain path on the map. The path does not need to be a continuous list of adjacent hexes, so for example only the start and end points can be given, in which case the straightest line between those points will be calculated and used.&lt;br /&gt;
** '''type''': the type of the unit whose image to use&lt;br /&gt;
** '''x''': a comma-separated list of x locations to move along&lt;br /&gt;
** '''y''': a comma-separated list of y locations to move along (x and y values are matched pairs)&lt;br /&gt;
** '''side''': the side of the fake unit, used for team-coloring the fake unit&lt;br /&gt;
* '''[hide_unit]''': makes the given unit become invisible. Useful in conjunction with '''[move_unit_fake]''': to move a leader unit into position on-screen. Each '''[hide_unit]''' tag only hides one unit.&lt;br /&gt;
** '''x''', '''y''': location of the unit to be hidden. (NOT a standard unit filter! Just x and y.)&lt;br /&gt;
* '''[unhide_unit]''': stops the currently hidden units from being hidden.&lt;br /&gt;
* '''[scroll]''': Scroll a certain number of pixels in a given direction. Useful for earthquake/shaking effects.&lt;br /&gt;
** '''x''', '''y''': the number of pixels to scroll along the x and y axis&lt;br /&gt;
* '''[scroll_to]''': Scroll to a given hex&lt;br /&gt;
** '''x''', '''y''': the hex to scroll to&lt;br /&gt;
** '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''true'' (don't scroll to fog) and ''false'' (scroll even to fog), with ''false'' as the default.&lt;br /&gt;
* '''[scroll_to_unit]''' Scroll to a given unit&lt;br /&gt;
** [[StandardUnitFilter]]&lt;br /&gt;
** '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''true'' (don't scroll to fog) and ''false'' (scroll even to fog), with ''false'' as the default.&lt;br /&gt;
* '''[sound]''': Plays a sound&lt;br /&gt;
** '''name''': the filename of the sound to play (in ''sounds/'' as .wav or .ogg)&lt;br /&gt;
** '''repeat''': repeats the sound for a specified additional number of times (default=0)&lt;br /&gt;
* '''[sound_source]''': Creates a sound source. &amp;quot;Sound sources&amp;quot; is a general name for a mechanism which makes possible for map elements to emit sounds according to some rules, where &amp;quot;map elements&amp;quot; can be specific locations or terrain types. For now, only sound sources tied to locations are supported.&lt;br /&gt;
** '''id''': a unique identification key of the sound source&lt;br /&gt;
** '''sounds''': a list of comma separated, randomly played sounds associated with the sound source&lt;br /&gt;
** '''delay''': a numerical value (in milliseconds) of the minimal delay between two playbacks of the source's sound if the source remains visible on the screen; if one scrolls out and back in, the source will be considered as ready to play&lt;br /&gt;
** '''chance''': a percentage (a value from 0 to 100) describing the chance of the source being activated every second after the delay has passed or when the source's location appears on the screen (note that it cannot play more than one file at the same time)&lt;br /&gt;
** '''check_fogged''': possible values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; - if true the source will not play if its locations are fogged&lt;br /&gt;
** '''check_shrouded''': {{DevFeature}} possible values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; - if true the source will not play if its locations are shrouded&lt;br /&gt;
** '''x,y''': a [[StandardLocationFilter]] for the locations associated with the sound source&lt;br /&gt;
** '''fade_range''' (default = 3): distance in hexes that determines a &amp;quot;circular&amp;quot; area around the one specified by '''full_range''' where sound volume fades out linearly&lt;br /&gt;
** '''full_range''' (default = 14): distance in hexes that determines a &amp;quot;circular&amp;quot; area where source plays with full volume, relative to screen center&lt;br /&gt;
** '''loop''': number of times a sound sample should be looped if it stays visible. -1 means infinite (~65000)&lt;br /&gt;
* '''[remove_sound_source]''': Removes a previously defined sound source.&lt;br /&gt;
** '''id''': the identification key of the sound source to remove&lt;br /&gt;
* '''[music]''': Switches to playing different music&lt;br /&gt;
** '''name''': the filename of the music to play (in ''music/'' as .ogg)&lt;br /&gt;
** see [[MusicListWML]] for the correct syntax&lt;br /&gt;
* '''[music_volume]''': {{DevFeature}} Changes the music volume.&lt;br /&gt;
** '''value''':  Changes the volume to this. Goes from 0 to 128.&lt;br /&gt;
** '''relative''': Changes volume based on a percentage of the current value. For example, relative = 50 changes music volume to 50% of its value, while relative = 200 makes it double the volume.&lt;br /&gt;
* '''[colour_adjust]''': tints the colour of the screen.&lt;br /&gt;
** '''red''', '''green''', '''blue''': values from -255 to 255, the amount to tint by for each colour&lt;br /&gt;
* '''[delay]''': pauses the game&lt;br /&gt;
** '''time''': the time to pause in milliseconds&lt;br /&gt;
* '''[redraw]''': redraws the screen (this normally isn't done during events, although some of the other interface actions cause the screen or parts of it to be redrawn).&lt;br /&gt;
** '''side''': if used, recalculates fog and shroud for that side. Useful if you for example spawn friendly units in the middle of an event and want the shroud to update accordingly (otherwise units that spawn inside fog would remain invisible for the duration of the event, since the fog would not automatically get cleared around them).&lt;br /&gt;
* '''[unit_overlay]''': sets an image that will be drawn over a particular unit, and follow it around&lt;br /&gt;
** '''x''', '''y''': the location of the unit to overlay on&lt;br /&gt;
** '''image''': the image to place on the unit&lt;br /&gt;
* '''[remove_unit_overlay]''': removes a particular overlayed image from a unit&lt;br /&gt;
** '''x''', '''y''': the location of the unit to remove an overlay from&lt;br /&gt;
** '''image''': the image to remove from the unit&lt;br /&gt;
* '''[animate_unit]''': Uses an animation of a unit to animate it on screen (if the unit has the corresponding animation).&lt;br /&gt;
** '''flag''': The key to find the custom animation in the unit description (see the '''[extra_anim]''' description in [[AnimationWML]]). Standard animations can be triggered with the following keywords: ''leading recruited standing idling levelin levelout healing healed poisoned movement defend attack death victory pre_teleport post_teleport''&lt;br /&gt;
** '''[filter]''' with a [[StandardUnitFilter]] as argument, see [[FilterWML]]. By default, the unit at the event location will be animated. You can use this tag to choose any other unit to animate.&lt;br /&gt;
** '''[primary_attack]''': If this tag is not present, the filter for animation will be triggered with no attack. If it is here, all attacks from the unit will be filtered, and a matching one will be used to filter the animation. Takes a weapon filter as argument, see [[FilterWML]].&lt;br /&gt;
** '''[secondary_attack]''': Similar to '''[primary_attack]'''. May be needed to trigger a defense animation correctly, if there are more than one animations available for the defending unit.&lt;br /&gt;
** '''hits''': yes/no: whether the being-hit or being-not-hit variants of attack/defense animations are chosen&lt;br /&gt;
** '''text''': a text to hover during the animation&lt;br /&gt;
** '''red''': red value for the text color (0-255)&lt;br /&gt;
** '''green''': green value for the text color&lt;br /&gt;
** '''blue''': blue value for the text color&lt;br /&gt;
** '''with_bars''': yes/no: whether to display the status bars during the animation (e.g. the hitpoint bar)&lt;br /&gt;
** '''[animate]''': a sub block with the same syntax as '''[animate_unit]''' except that the '''[filter]''' block is mandatory to find the unit. This block will find and animate another unit simultaneously.&lt;br /&gt;
** '''[facing]''': a [[StandardLocationFilter]] specifying what direction the unit should be facing when animated&lt;br /&gt;
* '''[label]''' places a label on the map.&lt;br /&gt;
** '''x''', '''y''': the location of the label&lt;br /&gt;
** '''text''': what the label should say&lt;br /&gt;
** '''team_name''': if specified, the label will only be visible to the given team.&lt;br /&gt;
** '''colour''': color of the label. The format is r,g,b; r, g and b are numbers between 0 and 255. &lt;br /&gt;
** '''visible_in_fog''': whether the label should be visible through fog or not. Default yes.&lt;br /&gt;
** '''visible_in_shroud''': whether the label should be visible through shroud or not. Default no.&lt;br /&gt;
* '''[deprecated_message]''' shows a deprecated message in the message area, this feature is only intended to be used to warn about deprecated macros in mainline. The message is not translatable.&lt;br /&gt;
** '''message''': the message to show.&lt;br /&gt;
* '''[wml_message]''' outputs a message to Wesnoth's console output. Intended for campaign designers to output silent text to the console, without annoying the player; then, that text might contain information useful for later bug-reporting. The log domain for it is '''wml''', and the '''debug/dbg''' log level is available for use with the '''logger''' attribute. Depending on the current log level ('''error''' by default), which may be changed with the in-game :log command, or the --log-&amp;lt;level&amp;gt;=wml command line switch, the messages are echoed to the in-game chat.&lt;br /&gt;
** '''message''': the message to show.&lt;br /&gt;
** '''logger''': the Wesnoth engine output logger that should catch the text; this might be 'err' (the errors log level), 'warn'/'wrn' (the warnings log level) or anything else (the information log level). Not all information will be displayed depending on the log level chosen when starting Wesnoth.&lt;br /&gt;
* '''[open_help]''' opens the in-game help.&lt;br /&gt;
** '''topic''': the id of the topic to open&lt;br /&gt;
* '''[show_objectives]''': {{DevFeature}} refreshes the objectives defined by [objectives] and its [show_if] tags, and displays them. (It is also called whenever the user explicitly asks for the objectives; this matters only if the tag was overridden by a [[LuaWML#register_wml_action|Lua]] script.)&lt;br /&gt;
** '''side''': the side to show the objectives. If not set, all sides are used.&lt;br /&gt;
&lt;br /&gt;
== Useful Macros ==&lt;br /&gt;
There are some predefined macros that you find useful for interface actions. You can find a complete list along with a detailed explanation of how they work [http://www.wesnoth.org/macro-reference.xhtml here].&lt;br /&gt;
* '''{FLOATING_TEXT}''' Float some text over a unit similar to the damage numbers.&lt;br /&gt;
* '''{HIGHLIGHT_UNIT}''' Highlight a unit on the map. Use this to show important units&lt;br /&gt;
* '''{HIGHLIGHT_IMAGE}''' Places and highlights an image on the map. Use this to show important items or locations&lt;br /&gt;
* '''{SET_IMAGE}''' Places an image on the map which has no other function.&lt;br /&gt;
* '''{QUAKE &amp;lt;soundfile&amp;gt;}''' Creates a tremor like screenshake and plays &amp;lt;soundfile&amp;gt;. ('''{TREMOR}''' is a deprecated version, equivalent to '''{QUAKE (rumble.ogg)}''')&lt;br /&gt;
* '''{FLASH_WHITE}''' Flash the screen white momentarily. You can also replace WHITE with RED, BLUE or GREEN for a different colour.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[DirectActionsWML]]&lt;br /&gt;
* [[InternalActionsWML]]&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;br /&gt;
[[Category: ActionsWML]]&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36040</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36040"/>
		<updated>2010-04-12T19:56:28Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Posted a prototype implementation of SP persistency at https://gna.org/patch/?1620. A previous small example of that is on http://wesnoth.pastebin.com/sHSrCPqW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
*RebelsxDrakes.cfg&lt;br /&gt;
*LoyalistsxNortherners.cfg&lt;br /&gt;
*KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
*./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
*lfernando joins the lobby.&lt;br /&gt;
*lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
*lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
*lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
Players can join the games, and all data collected goes to the database.&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36005</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36005"/>
		<updated>2010-04-11T17:18:12Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Questionnaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/sHSrCPqW.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
*RebelsxDrakes.cfg&lt;br /&gt;
*LoyalistsxNortherners.cfg&lt;br /&gt;
*KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
*./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
*lfernando joins the lobby.&lt;br /&gt;
*lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
*lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
*lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
Players can join the games, and all data collected goes to the database.&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36003</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36003"/>
		<updated>2010-04-11T16:30:20Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
*RebelsxDrakes.cfg&lt;br /&gt;
*LoyalistsxNortherners.cfg&lt;br /&gt;
*KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
*./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
*lfernando joins the lobby.&lt;br /&gt;
*lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
*lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
*lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
Players can join the games, and all data collected goes to the database.&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36002</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36002"/>
		<updated>2010-04-11T16:29:03Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
*RebelsxDrakes.cfg&lt;br /&gt;
*LoyalistsxNortherners.cfg&lt;br /&gt;
*KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
*./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
*lfernando joins the lobby.&lt;br /&gt;
*lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
*lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
*lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36001</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36001"/>
		<updated>2010-04-11T16:28:43Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
*RebelsxDrakes.cfg&lt;br /&gt;
*LoyalistsxNortherners.cfg&lt;br /&gt;
*KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
*lfernando joins the lobby.&lt;br /&gt;
*lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
*lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
*lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36000</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=36000"/>
		<updated>2010-04-11T16:28:17Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
*RebelsxDrakes.cfg&lt;br /&gt;
*LoyalistsxNortherners.cfg&lt;br /&gt;
*KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
lfernando joins the lobby.&lt;br /&gt;
lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35999</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35999"/>
		<updated>2010-04-11T16:27:41Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Gamemaster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Playerless Persistency and the Gamemaster==&lt;br /&gt;
&lt;br /&gt;
Implementing SP and MP player persistency is just a matter of recording game values somewhere. Implementing MP playerless persistency, however, is trickier, since we need another place to store our data which is not on user data.&lt;br /&gt;
&lt;br /&gt;
We plan to make a MP bot called a gamemaster. It can create games on demand, and watch their status. So, we want to make the GM able to launch several &amp;quot;headless&amp;quot; wesnoth instances on MP.&lt;br /&gt;
&lt;br /&gt;
Storing the data in simple WML files as we want to do on SP and player MP persistency can lead to some problems. Most of them are related to concurrent operations. If more than one game writes to a same file, it could lead to possible mismatches if it is not handled properly. So one solution would be handling concurrent operations in a ad-hoc way, making special code to deal with it.&lt;br /&gt;
&lt;br /&gt;
A better one would be using a database to store the variables. So, on GM mode launch, we would simultaneously launch a database, and all data operations that concern the gamemaster player would be done on this database. A relational or key-value database would do the trick here. &lt;br /&gt;
&lt;br /&gt;
So, this &amp;quot;gamemaster&amp;quot; here is less of a guy who interferes with the gameworld (&amp;quot;Behold! All goblins were turned to frogs by the Gamemaster!&amp;quot;) and more like a special observer that can record game values. The interefering gamemaster is already supported and made possible by the events engine.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
So, suppose we want to host that world war add-on. We have 3 scenarios:&lt;br /&gt;
&lt;br /&gt;
RebelsxDrakes.cfg&lt;br /&gt;
LoyalistsxNortherners.cfg&lt;br /&gt;
KnalganxUndead.cfg &lt;br /&gt;
&lt;br /&gt;
First I launch wesnoth on gamemaster mode.&lt;br /&gt;
&lt;br /&gt;
./wesnoth --gm&lt;br /&gt;
&lt;br /&gt;
That launches the database too. And once I connect on the MP server, my GM will connect as well.&lt;br /&gt;
&lt;br /&gt;
lfernando joins the lobby.&lt;br /&gt;
lfernando-GM joins the lobby.&lt;br /&gt;
&lt;br /&gt;
So, I ask my GM to create a couple of games.&lt;br /&gt;
&lt;br /&gt;
lfernando: /w lfernando-GM create KnalganxUndead.cfg &lt;br /&gt;
lfernando: /w lfernando-GM create RebelsxDrakes.cfg&lt;br /&gt;
&lt;br /&gt;
This idea is still subject to further changes, and we want to fine-tune the details as we discuss it more.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35980</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35980"/>
		<updated>2010-04-10T19:37:06Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* [Sample File] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===Sample File===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35979</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35979"/>
		<updated>2010-04-10T19:36:55Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* WML Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
===[Sample File]===&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35978</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35978"/>
		<updated>2010-04-10T19:35:27Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* [clear_global_variable] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax. Here goes an example:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35977</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35977"/>
		<updated>2010-04-10T19:33:52Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* [get_global_variable] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
&lt;br /&gt;
On default, the player is the one who's playing the turn. There should be a special side value for storing data on the server/gamemaster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''namespace''': Used for determining from which file this variable should be loaded.&lt;br /&gt;
&lt;br /&gt;
As for now, we want to use different namespaces for different add-ons, and different files for different namespaces. On default it should write to the file of the add-on being played. But we want to maintain flexibility, especially regarding the &amp;quot;default&amp;quot; namespace, which should store the &amp;quot;real global&amp;quot; variables.&lt;br /&gt;
&lt;br /&gt;
It still can support things like &amp;quot;On add-on A, load this variable from add-on B and save it on add-on C.&amp;quot; But it should be some kind of &amp;quot;unholy&amp;quot; operation and not be encouraged unless you really know what you're doing. =)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''from_global''': Determines the name of the global variable that is loaded.&lt;br /&gt;
&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35976</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35976"/>
		<updated>2010-04-10T19:14:26Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency is very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage. This kind of MP persistency involves data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency, and it should allow a kind of scenario that &amp;quot;changes&amp;quot; as different users  play it.&lt;br /&gt;
&lt;br /&gt;
Here is an example of this kind of application by Crab_: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Imagine a game where there's a 'game master' - who creates a scenario, where you, for example, as a captain of a royal army, play for loyalists vs orcs. and then, if you win, the 'game master' changes the 'geopolitical map' to represent the fact that the border was defended, and orcs were defeated. Or imagine several games played in parallel, where you can transition from one game to another 'right-in-the-middle' (e..g, the gamemaster can store your units in one game and spawn them in another). and, it will not be hardcoded in c++ code. Every rule, every fantasy, can be achieved in wml, if we give a 'language' for it and implement engine support. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
So, my project would be to:&lt;br /&gt;
&lt;br /&gt;
# Implement SP persistency. &lt;br /&gt;
# Implement MP player persistency.&lt;br /&gt;
# Implement MP playerless persistency.&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35975</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35975"/>
		<updated>2010-04-10T18:51:21Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For example, you could use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there, along with any items he had and quests he did. And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous games.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency would be very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
The second kind of MP persistency would involve data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency. &lt;br /&gt;
&lt;br /&gt;
*To be continued...&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35974</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35974"/>
		<updated>2010-04-10T17:16:57Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For examples, you use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there (along with any items and quests he did, for example). And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous matches.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency would be very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be relatively straightforward.&lt;br /&gt;
&lt;br /&gt;
The second kind of MP persistency would involve data being with the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency. &lt;br /&gt;
&lt;br /&gt;
*To be continued...&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35973</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35973"/>
		<updated>2010-04-10T17:16:00Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For examples, you use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there (along with any items and quests he did, for example). And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you developed from previous matches.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency would be very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be relatively straightforward.&lt;br /&gt;
&lt;br /&gt;
The second kind of MP persistency would involve data being in the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency. &lt;br /&gt;
&lt;br /&gt;
*To be continued...&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35972</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35972"/>
		<updated>2010-04-10T17:14:52Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 Implement persistent storage of gameworld data between semi-related scenarios]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
On multiplayer, we desire to support two different uses for global variables. The first would be player persistency, where you store the desired data in one(or all) of the players user data.&lt;br /&gt;
&lt;br /&gt;
For examples, you use it to have an RPG-style UMC. You start with a hero, and you make adventures with him/her. The next time you started playing, your hero would be there (along with any items and quests he did, for example). And since this data would be stored in your computer, when you joined games with different players, you could reuse the same hero that you devoloped from previous matches.&lt;br /&gt;
&lt;br /&gt;
Conceptually, MP player persistency would be very similar to SP persistency. So, other than handling OOS errors and some MP specific problems, implementing MP player persistency from SP persistency would be relatively straightforward.&lt;br /&gt;
&lt;br /&gt;
The second kind of MP persistency would involve data being in the &amp;quot;map&amp;quot;, instead of with the &amp;quot;players&amp;quot;. We will call it MP playerless persistency. &lt;br /&gt;
&lt;br /&gt;
*To be continued...&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35864</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35864"/>
		<updated>2010-04-09T18:10:05Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 t127068199898]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I already knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35863</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35863"/>
		<updated>2010-04-09T18:09:29Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 t127068199898]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java and can be found at www.nics.unicamp.br.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
On Chord Jammer I worked solo for the majority of the time, so I never really participated in a project with more than 10 members on it. Working in a big project, maintained by many people worldwide, that appealed on me greatly when I first thought of applying to SoC and diving in an open source project. &lt;br /&gt;
&lt;br /&gt;
So, why not that FLOSS game that I knew and enjoyed? ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35815</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35815"/>
		<updated>2010-04-09T01:37:51Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Project Schedule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 t127068199898]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed feedback from my peers and people more experienced than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the gamemaster for MP. And maybe some MP scenario using the work done if we have the time/help.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35814</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35814"/>
		<updated>2010-04-09T01:36:07Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Gamemaster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 t127068199898]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed feedback from my peers and people more experienced than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store MP data on a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP. And maybe some showcase MP scenario if we have the help/time.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35810</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35810"/>
		<updated>2010-04-09T00:18:21Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 t127068199898]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed feedback from my peers and people more experienced than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug [https://gna.org/bugs/?14114 #14114], on patch [https://gna.org/patch/?1538 #1538].&lt;br /&gt;
&lt;br /&gt;
Reported minor bug [https://gna.org/bugs/?15601 #15601], and fixed it on patch [https://gna.org/patch/?1525 #1525].&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store to store MP data in a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP. And maybe some showcase MP scenario if we have the help/time.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35797</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35797"/>
		<updated>2010-04-08T19:51:39Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student_2|lfernando|SoC Ideas Persistent Gameworld}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=SoC Application=&lt;br /&gt;
[http://socghop.appspot.com/gsoc/student_proposal/review/google/gsoc2010/lfernando/t127068199898 t127068199898]&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed feedback from my peers and people more experienced than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug #14114, on patch #1538.&lt;br /&gt;
&lt;br /&gt;
Reported minor bug #15601, and fixed it on patch #1525.&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a very simple task I'll do it myself. If it's not the expected result, I'll just redo it the right way.&lt;br /&gt;
&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as I can.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
See project description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
More on that on the project description.&lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is my Master thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. So while I'm on this project, it'll be first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I guess that after you start developing, things just aren't the same again. When you see a bug it's not &amp;quot;Cr**, another bug screwed my game. I hope they fix it on next patch.&amp;quot; anymore. Your attitude becomes more hands-on, you know you can try fixing it if you want to.&lt;br /&gt;
 &lt;br /&gt;
As for me, it's too early to say. My first impression of the community was very good, though. Also, the code definitely has some programming depth, and I could say I was having fun while I was fixing the bugs. So, that could convince me to lend some more work here whenever I want to help an open source community. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store to store MP data in a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP. And maybe some showcase MP scenario if we have the help/time.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35658</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35658"/>
		<updated>2010-04-07T23:40:49Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed technical feedback from my peers and more experienced people than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug #14114, on patch #1538.&lt;br /&gt;
&lt;br /&gt;
Reported minor bug #15601, and fixed it on patch #1525.&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I'm not a native, but I think my english reading/writing skills are on a good level.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Project described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP.And maybe some MP add-on/map that uses this system. &lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is working on my Master Thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. While I'm doing this project, it'll be my first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See it on project description below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
The other goal of this project is to not only make users, but also multiplayer scenarios capable of handling persistent storage.&lt;br /&gt;
&lt;br /&gt;
Since currently there are no ways to store to store MP data in a server, implementing it is tricky and requires some tweaking and working around. Fortunately, the workaround is doable by this persistency system.&lt;br /&gt;
&lt;br /&gt;
Suppose you want to make a sequence of multiplayer games so that one game stores data that other games can retrieve. You put in those games an extra, virtual player called a &amp;quot;gamemaster&amp;quot; whose sole purpose is to maintain a set of game variables, (he can do that, because he is a player) manage them during gameplay, and after the game is done, participate on another game with the changed values. It is a system with limitations (for example, games happening in parallel can't share variables between them) but it leads to a lot of interesting scenario possibilities.&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation happening in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate. Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP. And maybe some showcase MP scenario if we have the help/time.&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35657</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35657"/>
		<updated>2010-04-07T22:37:25Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed technical feedback from my peers and more experienced people than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug #14114, on patch #1538.&lt;br /&gt;
&lt;br /&gt;
Reported minor bug #15601, and fixed it on patch #1525.&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I think my written english is almost on fluent level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Project described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP.And maybe some MP add-on/map that uses this system. &lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is working on my Master Thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. While I'm doing this project, it'll be my first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See it on project description below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [get_global_variable] and [set_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [get_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/get_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [set_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/set_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [clear_global_variable]&lt;br /&gt;
    side=1&lt;br /&gt;
    namespace=my_addon&lt;br /&gt;
    global=foo&lt;br /&gt;
  [/clear_global_variable]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[get_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''namespace''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[set_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
===[clear_global_variable]===&lt;br /&gt;
Deletes a global variable with name foo on namespace. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    crafted_scepter=0&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
*Game master description&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation to happen in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate(me =) ). Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP. And maybe some showcase MP scenario if we have the help/time.&lt;br /&gt;
&lt;br /&gt;
If you want to help, drop us a line!&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35655</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35655"/>
		<updated>2010-04-07T20:14:14Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [save_global_variable] and [load_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my major regrets from the above mentioned projects is that I didn't had the chance to work as a team, as most of the time I was a lone programmer in a musician's world. It wasn't bad at all, but I missed technical feedback from my peers and more experienced people than me(at least technically).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(Final Fantasy series, Chrono Trigger, Fallout, World of Warcraft, lots of other japanese rpgs), action games(Mario, Castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug #14114, on patch #1538.&lt;br /&gt;
&lt;br /&gt;
Reported minor bug #15601, and fixed it on patch #1525.&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I think my written english is almost on fluent level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Project described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP.And maybe some MP add-on/map that uses this system. &lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is working on my Master Thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. While I'm doing this project, it'll be my first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See it on project description below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is introducing variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [save_global_variable] and [load_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those ones &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [load_global_variable]&lt;br /&gt;
    side=side1&lt;br /&gt;
    persist_id=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/load_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [save_global_variable]&lt;br /&gt;
    side=side1&lt;br /&gt;
    persist_id=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/save_global_variable]&lt;br /&gt;
&lt;br /&gt;
===[load_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''persist_id''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[save_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
*Game master description&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
We are imagining this project implementation to happen in three separate phases:&lt;br /&gt;
&lt;br /&gt;
Phase one should be the implementation of persistency WML for singleplayer.&lt;br /&gt;
&lt;br /&gt;
Phase two should be the extension of that for multiplayer.&lt;br /&gt;
&lt;br /&gt;
Phase three should be the implementation of the &amp;quot;playerless persistency&amp;quot; via the gamemaster concept.&lt;br /&gt;
&lt;br /&gt;
So, more specifically, phase one will happen in the beginning of the project alongside with the studying of WML and wesnoth code by the candidate(me =) ). Especially code for WML implementation and save games file structure. That should take roughly three weeks.&lt;br /&gt;
&lt;br /&gt;
Implementation of phase two will happen afterwards, and should be done at the same time that we resolve any bug or issue left from phase 1. Phase two should take roughly three weeks too.&lt;br /&gt;
&lt;br /&gt;
Finally, there are some scenario makers interested for the content for phase 3. In the middle of playerless persistency implementation, we'll contact them and try to build a scenario that uses this concept. It should work as both a showcase and a testcase for our ideas. Phase three should be the most time expensive one, featuring a lot of dish cleaning and feature polishing. It should take about one month and a half or two to get it done.&lt;br /&gt;
&lt;br /&gt;
So, for a timeline, we should expect something along this way:&lt;br /&gt;
&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP. And maybe some showcase MP scenario if we have the help/time.&lt;br /&gt;
&lt;br /&gt;
If you want to help, drop us a line!&lt;br /&gt;
&lt;br /&gt;
Luiz Fernando&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35649</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35649"/>
		<updated>2010-04-07T19:28:20Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
*In Progress&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my main complaint from the above mentioned projects is that I had to do it by myself &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(final fantasy series, chrono trigger, fallout, world of warcraft, lots of other japanese rpgs), action games(mario, castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug #14114, on patch #1538.&lt;br /&gt;
&lt;br /&gt;
Reported minor bug #15601, and fixed it on patch #1525.&lt;br /&gt;
&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I think my written english is almost on fluent level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Project described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP.And maybe some MP add-on/map that uses this system. &lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is working on my Master Thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. While I'm doing this project, it'll be my first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See it on project description below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;br /&gt;
&lt;br /&gt;
=Project Description=&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The general idea of this project is to introduce variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.&lt;br /&gt;
&lt;br /&gt;
Global variables will be stored and retrieved using two special tags, [save_global_variable] and [load_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those &amp;quot;local&amp;quot; variables) should be saved to/loaded from an external source.  &lt;br /&gt;
&lt;br /&gt;
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WML Syntax==&lt;br /&gt;
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.&lt;br /&gt;
&lt;br /&gt;
  [load_global_variable]&lt;br /&gt;
    side=side1&lt;br /&gt;
    persist_id=my_addon&lt;br /&gt;
    from_global=my_variable_name&lt;br /&gt;
    to_local=foo&lt;br /&gt;
  [/load_global_variable]&lt;br /&gt;
&lt;br /&gt;
  [save_global_variable]&lt;br /&gt;
    side=side1&lt;br /&gt;
    persist_id=my_addon&lt;br /&gt;
    from_local=my_variable_name&lt;br /&gt;
    to_global=foo&lt;br /&gt;
  [/save_global_variable]&lt;br /&gt;
&lt;br /&gt;
===[load_global_variable]===&lt;br /&gt;
Creates a local variable from the value of a global variable.&lt;br /&gt;
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.&lt;br /&gt;
*'''persist_id''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)&lt;br /&gt;
*'''from_global''': Determines the global value from which the variable is loaded.&lt;br /&gt;
*'''to_local''': Determines the name of the local variable that receives the loaded value.&lt;br /&gt;
&lt;br /&gt;
===[save_global_variable]===&lt;br /&gt;
Stores a local variable as a global variable.&lt;br /&gt;
&lt;br /&gt;
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Global variable files should have very simple wml syntax:&lt;br /&gt;
&lt;br /&gt;
  [variables]&lt;br /&gt;
    tutorial_completed=1&lt;br /&gt;
    betrayed_darken_volk=1&lt;br /&gt;
    dragons_slain=2&lt;br /&gt;
    king_of_wesnoth=1&lt;br /&gt;
    ...&lt;br /&gt;
  [/variables]&lt;br /&gt;
&lt;br /&gt;
==Gamemaster==&lt;br /&gt;
&lt;br /&gt;
*Game master description&lt;br /&gt;
&lt;br /&gt;
==Project Schedule==&lt;br /&gt;
&lt;br /&gt;
*To do&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35641</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35641"/>
		<updated>2010-04-07T16:39:31Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Questionnaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
*In Progress&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =). &lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my main complaint from the above mentioned projects is that I had to do it by myself &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(final fantasy series, chrono trigger, fallout, world of warcraft, lots of other japanese rpgs), action games(mario, castlevania), shooters (Half-Life, Quake),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fix for bug #14114, on patch #1538.&lt;br /&gt;
Reported minor bug #15601, and fixed it on patch #1525.&lt;br /&gt;
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I think my written english is almost on fluent level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's the advice is constructive, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Project described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*April 26 - May 17: Make persistence work for singleplayer.&lt;br /&gt;
*May 15 - June 4: Make persistence work for multiplayer.&lt;br /&gt;
*June 6 - August 6: Finish the &amp;quot;gamemaster&amp;quot; for MP.And maybe some MP add-on/map that uses this system. &lt;br /&gt;
&lt;br /&gt;
Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is working on my Master Thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. While I'm doing this project, it'll be my first priority to finish it on time.   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
See it on project description below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming in the small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35629</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35629"/>
		<updated>2010-04-07T04:47:39Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
*In Progress&lt;br /&gt;
&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
June - August period is winter in Brazil, so no candy =) . I plan to take two weeks vacation by the end of august.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(final fantasy series, chrono trigger, fallout, world of warcraft, lots of other japanese rpgs), action games(mario, castlevania),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
*Listing patches tomorrow*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I think my written english is almost on fluent level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable but I can handle trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's constructive advice, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in a example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*Project stuff only tomorrow!*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have invented your own project, please describe the project and the scope.&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present, and when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*To do with project description tomorrow*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
*To do tomorrow*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. World peace. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming at small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35628</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35628"/>
		<updated>2010-04-07T04:46:48Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2010Student}}&lt;br /&gt;
[[Category:SoC Ideas Persistent Gameworld]]&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&amp;lt;h4&amp;gt;lfernando - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/h4&amp;gt;&lt;br /&gt;
*to do*&lt;br /&gt;
=IRC=&lt;br /&gt;
lfernando&lt;br /&gt;
&lt;br /&gt;
=Questionnaire=&lt;br /&gt;
&amp;lt;h3&amp;gt;Basics&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Write a small introduction to yourself.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;State your preferred email address.&amp;lt;/h4&amp;gt;&lt;br /&gt;
lucifernando@gmail.com&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/h4&amp;gt;&lt;br /&gt;
lfernando&lt;br /&gt;
&amp;lt;h4&amp;gt;Why do you want to participate in summer of code?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.      &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What are you studying, subject, level and school?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&amp;lt;/h4&amp;gt;&lt;br /&gt;
June - August period is winter in Brazil, so no candy =) . I plan to take two weeks vacation by the end of august.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Experience&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What programs/software have you worked on before?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/h4&amp;gt;&lt;br /&gt;
No! That's one of my main interests to participating on this project, to know how it is to work on a big project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Never participated on any Summer of Code project. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/h4&amp;gt;&lt;br /&gt;
My first experience with open source is Battle for Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yeah!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of gamer are you?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.   &lt;br /&gt;
&amp;lt;h4&amp;gt;What type of games?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(final fantasy series, chrono trigger, fallout, world of warcraft, lots of other japanese rpgs), action games(mario, castlevania),   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What type of opponents do you prefer?&amp;lt;/h4&amp;gt;&lt;br /&gt;
The clever, unpredictable ones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you more interested in story or gameplay?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Tough question! But I guess videogames are all about &amp;quot;playing&amp;quot;, and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/h4&amp;gt;&lt;br /&gt;
I played mainly singleplayer campaigns on Wesnoth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/h4&amp;gt;&lt;br /&gt;
*Listing patches tomorrow*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3) Communication skills&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
I think my written english is almost on fluent level.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What spoken languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Portuguese and English. I know a little bit of French and Japanese.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, I prefer when the conversation is enjoyable but I can handle trolling too if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you give constructive advice?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Of course.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Do you receive advice well?&amp;lt;/h4&amp;gt;&lt;br /&gt;
I think so. If it's constructive advice, I'm very attentious.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
If it's a simple task I'll do it myself.&lt;br /&gt;
If it's a bit more complicated, sometimes I'll sketch my idea in a example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.&lt;br /&gt;
&amp;lt;h3&amp;gt;Project&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*Project stuff only tomorrow!*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;If you have invented your own project, please describe the project and the scope.&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Why did you choose this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
First of all because I enjoyed playing the game =). Also, it is &amp;quot;minimalist&amp;quot; and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present, and when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
*To do with project description tomorrow*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/h4&amp;gt;&lt;br /&gt;
*To do tomorrow*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What do you expect to gain from this project?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. World peace. =)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Yes, It'll be a pleasure to help the project whenever I have spare time =)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Practical considerations&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    * Subversion (used for all commits)&lt;br /&gt;
Yes.&lt;br /&gt;
    * C++ (language used for all the normal source code)&lt;br /&gt;
Yes.&lt;br /&gt;
    * STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
STL and some Boost. Never worked with Sdl before. &lt;br /&gt;
    * Python (optional, mainly used for tools)&lt;br /&gt;
Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.&lt;br /&gt;
    * build environments (eg cmake/autotools/scons)&lt;br /&gt;
I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.&lt;br /&gt;
    * WML (the wesnoth specific scenario language)&lt;br /&gt;
Started learning it and guess I know it well enough to understand this problem.&lt;br /&gt;
    * Lua (used in combination with WML to create scenarios)&lt;br /&gt;
No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/h4&amp;gt;&lt;br /&gt;
Eclipse. Gedit for programming at small.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;h4&amp;gt;What programming languages are you fluent in?&amp;lt;/h4&amp;gt;&lt;br /&gt;
C, C++, Java.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;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;/h4&amp;gt;&lt;br /&gt;
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35626</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35626"/>
		<updated>2010-04-07T01:48:18Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;b&amp;gt;This page is related to Summer of Code 2010&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;/SummerOfCodeIdeas&amp;quot; title=&amp;quot;SummerOfCodeIdeas&amp;quot;&amp;gt;See the list of Summer of Code 2010 Ideas&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt; &amp;lt;b&amp;gt;This is a Summer of Code 2010 student page&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot; summary=&amp;quot;Contents&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Contents&amp;lt;/h2&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Description&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Description&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#lfernando_-_Implement_persistent_storage_of_gameworld_data_between_semi-related_scenarios&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;1.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Alexander Vishnevskiy - Implement persistent storage of gameworld data between semi-related scenarios&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#IRC&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;IRC&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Questionnaire&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Questionnaire&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Basics&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Basics&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Write_a_small_introduction_to_yourself.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Write a small introduction to yourself.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#State_your_preferred_email_address.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;State your preferred email address.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#If_you_have_chosen_a_nick_for_IRC_and_Wesnoth_forums.2C_what_is_it.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;If you have chosen a nick for IRC and Wesnoth forums, what is it?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Why_do_you_want_to_participate_in_summer_of_code.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.4&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Why do you want to participate in summer of code?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_are_you_studying.2C_subject.2C_level_and_school.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.5&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What are you studying, subject, level and school?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_country_are_you_from.2C_at_what_time_are_you_most_likely_to_be_able_to_join_IRC.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.6&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What country are you from, at what time are you most likely to be able to join IRC?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Do_you_have_other_commitments_for_the_summer_period_.3F_Do_you_plan_to_take_any_vacations_.3F_If_yes.2C_when.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.1.7&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Do you have other commitments for the summer period&amp;amp;nbsp;? Do you plan to take any vacations&amp;amp;nbsp;? If yes, when.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Experience&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Experience&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_programs.2Fsoftware_have_you_worked_on_before.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What programs/software have you worked on before?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Have_you_developed_software_in_a_team_environment_before.3F_.28As_opposed_to_hacking_on_something_on_your_own.29&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Have you developed software in a team environment before? (As opposed to hacking on something on your own)&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Have_you_participated_to_the_Google_Summer_of_Code_before.3F_As_a_mentor_or_a_student.3F_In_what_project.3F_Were_you_successful.3F_If_not.2C_why.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;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;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Are_you_already_involved_with_any_open_source_development_projects.3F_If_yes.2C_please_describe_the_project_and_the_scope_of_your_involvement.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.4&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Gaming_experience_-_Are_you_a_gamer.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.5&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Gaming experience - Are you a gamer?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_type_of_gamer_are_you.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.6&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What type of gamer are you?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_type_of_games.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.7&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What type of games?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_type_of_opponents_do_you_prefer.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.8&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What type of opponents do you prefer?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Are_you_more_interested_in_story_or_gameplay.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.9&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Are you more interested in story or gameplay?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Have_you_played_Wesnoth.3F_If_so.2C_tell_us_roughly_for_how_long_and_whether_you_lean_towards_single_player_or_multiplayer.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.10&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#If_you_have_contributed_any_patches_to_Wesnoth.2C_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_SVN_.28during_the_evaluation_period_or_earlier.29_please_state_so.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.2.11&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;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 SVN (during the evaluation period or earlier) please state so.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#3.29_Communication_skills&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;3) Communication skills&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Though_most_of_our_developers_are_not_native_English_speakers.2C_English_is_the_project.27s_working_language._Describe_your_fluency_level_in_written_English.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;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;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_spoken_languages_are_you_fluent_in.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What spoken languages are you fluent in?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Are_you_good_at_interacting_with_other_players.3F_Our_developer_community_is_friendly.2C_but_the_player_community_can_be_a_bit_rough.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Do_you_give_constructive_advice.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.4&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Do you give constructive advice?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Do_you_receive_advice_well.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.5&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Do you receive advice well?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Are_you_good_at_sorting_useful_criticisms_from_useless_ones.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.6&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Are you good at sorting useful criticisms from useless ones?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#How_autonomous_are_you_when_developing_.3F_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_.22see_how_it_turn_out.22.2C_taking_the_risk_of_having_it_thrown_away_if_it_doesn.27t_match_what_the_project_want&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.3.7&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;How autonomous are you when developing&amp;amp;nbsp;? 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;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Project&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Project&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Did_you_select_a_project_from_our_list.3F_If_that_is_the_case.2C_what_project_did_you_select.3F_What_do_you_want_to_especially_concentrate_on.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;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;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#If_you_have_invented_your_own_project.2C_please_describe_the_project_and_the_scope.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;If you have invented your own project, please describe the project and the scope.&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Why_did_you_choose_this_project.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Why did you choose this project?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Include_an_estimated_timeline_for_your_work_on_the_project._Don.27t_forget_to_mention_special_things_like_.22I_booked_holidays_between_A_and_B.22_and_.22I_got_an_exam_at_ABC_and_won.27t_be_doing_much_then.22.&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.4&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;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;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Include_as_much_technical_detail_about_your_implementation_as_you_can&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.5&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Include as much technical detail about your implementation as you can&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_do_you_expect_to_gain_from_this_project.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.6&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What do you expect to gain from this project?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_would_make_you_stay_in_the_Wesnoth_community_after_the_conclusion_of_SOC.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.4.7&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What would make you stay in the Wesnoth community after the conclusion of SOC?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Practical_considerations&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.5&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Practical considerations&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Are_you_familiar_with_any_of_the_following_tools_or_languages.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.5.1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Are you familiar with any of the following tools or languages?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Which_tools_do_you_normally_use_for_development.3F_Why_do_you_use_them.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.5.2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;Which tools do you normally use for development? Why do you use them?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#What_programming_languages_are_you_fluent_in.3F&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.5.3&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;What programming languages are you fluent in?&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li class=&amp;quot;toclevel-3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#Would_you_mind_talking_with_your_mentor_on_telephone_.2F_internet_phone.3F_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.2C_please_do_list_a_phone_number_.28including_international_code.29_so_that_we_are_able_to_contact_you._You_should_probably_.2Aonly.2A_add_this_number_in_the_application_for_you_submit_to_google_since_the_info_in_the_wiki_is_available_in_public._We_will_.2Anot.2A_make_any_use_of_your_number_unless_some_case_of_.22there_is_no_way_to_contact_you.22_does_arise.21&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tocnumber&amp;quot;&amp;gt;3.5.4&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;toctext&amp;quot;&amp;gt;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;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; if (window.showTocToggle) { var tocShowText = &amp;quot;show&amp;quot;; var tocHideText = &amp;quot;hide&amp;quot;; showTocToggle(); } &amp;lt;/script&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35625</id>
		<title>SummerOfCodeProposal lfernando</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SummerOfCodeProposal_lfernando&amp;diff=35625"/>
		<updated>2010-04-07T01:45:33Z</updated>

		<summary type="html">&lt;p&gt;Lfernando: Lfernando's proposal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Luiz Fernando - Teste&lt;br /&gt;
Test Page!&lt;br /&gt;
See SummerOfCodeProposal Luiz Fernando for more information.&lt;/div&gt;</summary>
		<author><name>Lfernando</name></author>
		
	</entry>
</feed>