SoC2012 Ayne Multiplayer Engine Refactoring

From The Battle for Wesnoth Wiki

This page is related to Summer of Code 2012
See the list of Summer of Code 2012 Ideas

This is a Summer of Code 2012 student page


Anja Keicher - Improve wesnoth's engine to allow better transitions between scenarios

The idea is to clean up playcampaign.cpp and make loading/saving multiplayer campaigns more stable and less error prone. The code that handles transitions between scenarios should also be improved to make transfer of gold, units and recall lists easier for campaign designers. Other functionality, such as changes to difficulty between scenarios and interaction with GUI2 dialogs could also be added.


While improving the loading of savegames I will have to make sure that compatibility with old savegames remains. The same applies to the scenario transitions: current workarounds have to be supported as much as possible.



SoC Application

Submitted to google


1) Basics

1.1) Write a small introduction to yourself.

1) Basics

1.1) Write a small introduction to yourself.

My name is Anja Keicher. I'm a 21 year old student from Germany currently studying in the UK. I spent the first two years of my Bachelor degree at Hochschule Osnabrueck in Germany studying European Media Computer Science, then went to Edinburgh Napier University in Scotland to finish the degree in Games Development.

1.2) State your preferred email address.

I will put it in the GSoC application.

1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?


1.4) Why do you want to participate in summer of code?

It sounds like an excellent opportunity to do what I enjoy doing, work on a large community project, and collect a lot of valuable experience. It would also allow me to earn money to help fund my studies through working on something relevant to my studies.

1.5) What are you studying, subject, level and school?

That's a bit complicated. The short version is: Games Development as part of a Bachelor degree in Media Computer Science. I'm in the last semester of my Bachelor degree. The Games Development part is at Edinburgh Napier University in the UK, the Media Computer Science part at Hochschule Osnabrueck (University of Applied Sciences Osnabrueck) in Germany.

1.6) What country are you from, at what time are you most likely to be able to join IRC?

I currently live in the UK and would most likely be on IRC between 11am and 12am GMT.

1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.

I plan to take a vacation from the 3rd to 7th July. Other than that there will be one weekend in June and a few separate days in August where I will be unavailable (dates to be confirmed).

2) Experience

2.1) What programs/software have you worked on before?

University projects covering a wide range of subjects, including games using ActionScript3, XNA, Groovy and for Android devices, stock and database managing software, and websites.

2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)

The practical side of my studies in Germany was almost exclusively in teams. The teams I have worked in so far were generally 2 to 5 people.

2.3) Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?

This is my first time participating in GsoC.

2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.

This is the first time I'm involved in an open source project.

2.5) Gaming experience - Are you a gamer?

Definitely. Gaming is what got me interested in developing software rather than just using it in the first place.

2.5.1) What type of gamer are you?

Generally casual, though when I find a game I like I'll try to spend any time I can spare playing it. I'm a quality player rather than quantity, a game has to catch my attention, but if I like it I will play it thoroughly and several times to explore different aspects of the game.

2.5.2) What type of games?

Mostly single-player RPGs such as the Elder Scrolls series, Fallout, Dragon Age, Mass Effect etc; though I do enjoy puzzle games like Portal and strategy games like Age of Empires (or Wesnoth) as well.

2.5.3) What type of opponents do you prefer?

AI opponents. It allows me to play the way I want, and I actually stand a chance ;)

2.5.4) Are you more interested in story or gameplay?

I'm very story driven, but if I just wanted the story I'd read a book or watch a movie. The gameplay definitely is an important aspect as well, and has to be right, otherwise I can't enjoy the story. Not all games are the same though, with some the story is more important and with others the story is just an excuse the enjoy the gameplay.

2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.

I've started playing Wesnoth when I first saw it on the list of GsoC projects and have been playing it a bit every day since to get a feeling for it. I haven't really tried multiplayer yet, but usually I prefer playing single-player or multiplayer with the human players rather than against them.

2.6) If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our S­­V­­N (during the evaluation period or earlier) please state so.

3) Communication skills

3.1) Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.

I spent some time living in New Zealand and I currently live and study in Scotland. I haven't had problems communicating with anyone in many years. It's not perfect, but speaking or writing in English is definitely not a problem.

3.2) What spoken languages are you fluent in?

English, German

3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.

I haven't interacted with the Wesnoth player community yet, but I generally don't have problems getting along with people, or staying calm and polite during conflicts.

3.4) Do you give constructive advice?

I try to give either constructive advice or none at all. If I can help someone or give them advice then I'm happy to do so.

3.5) Do you receive advice well?

As long as it's constructive I'm always grateful for pointers on how to improve my work.

3.6) Are you good at sorting useful criticisms from useless ones?

Generally, yes.

3.7) How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to "see how it turn out", taking the risk of having it thrown away if it doesn't match what the project want

I'm perfectly capable of making decisions myself, but if it's a major change I prefer to discuss it with other people first, especially if I'm new to a project. In my experience that's more efficient in the long run.

4) Project

4.1) Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?

I chose the project “Improve wesnoth's engine to allow better transitions between scenarios”. My first priority would be to clean up the code and add comments while I play the game some more to get a better idea of what could and what should be added to the transitions.

4.2) If you have invented your own project, please describe the project and the scope.


4.3) Why did you choose this project?

It looks like a nice mix of solid software engineering and games development that represents my studies and experience so far quite well. I think it would be a good introduction into the world of big community projects and open source development for me.

4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like "I booked holidays between A and B" and "I got an exam at ABC and won't be doing much then".

Before start of GSoC: I have my last exam on the 3rd May. In the 3 weeks between then and the beginning of GSoC I will have no lectures or other projects, so I will have time to focus on familiarizing myself with Wesnoth in general and especially the code I will work with, and to learn how creating multiplayer campaigns currently works so I can understand the problems from a campaign designer's point of view.

21st May - 15th June Rewrite the transitions between multiplayer campaign scenarios so that gold, units and recall lists etc. can be transferred properly and without the workarounds currently necessary.
16th June - 10th July Fix saving of multiplayer games so that savegames will no longer be corrupt.
03rd July - 07th July I will most likely be on holidays during this time.
11th July - 01st August Allow loading of old savegames as well as the new savegames by converting old savegames on load.
02nd August - 20th August0 Test, write documentation, fix any remaining issues with the code that has been created so far, add optional features if time allows.


Allow changing of difficulty between scenarios (custom lua support)

GUI2 interaction

Apart from one weekend in June, the 5 days in early July, and a few days in August (never more than two at a time) I should be available to work weekdays and weekends as I will finish uni in early May.

4.5) Include as much technical detail about your implementation as you can

I will have to move code to create a cleaner separation between code that handles things in a scenario and code that handles things outside of scenarios. For the scenario transitions I will have to determine exactly how the code is supposed to work, then recreate that with cleaner code. However, it will also be vital not to break support for the current workarounds or every multiplayer campaign ever written will become unusable. Code related to saving games will have to be moved and improved to stop savegames to be corrupted under certain conditions. Code related to loading games will have to be extended to allow loading of savegames from older versions of Battle of Wesnoth as well as savegames created by the new code. This will most likely require some kind of conversion or parsing of the old savegames.

4.6) What do you expect to gain from this project?

More programming experience, especially with large projects.

4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?

A friendly developing community and the feeling that I can continue to contribute to the project.

5) Practical considerations

5.1) Are you familiar with any of the following tools or languages?

Sub­­version (used for all commits) I have used Subclipse (Sub­­version plugin for Eclipse)

C++ (language used for all the normal source code) We mostly used C and C++ during my first 3 semesters at university. I'm a bit rusty, but it shouldn't take me long to remember all the things I learned.

STL, Boost, Sdl (C++ libraries used by Wesnoth) None

Python (optional, mainly used for tools) None

build environments (eg cmake/scons) Used cmake once, have written a few make files by hand

WML (the wesnoth specific scenario language) None

Lua (used in combination with WML to create scenarios) None

5.2) Which tools do you normally use for development? Why do you use them?

My preferred IDE is Eclipse, mostly because I had to use it for most of my modules at university and have gotten used to its features, keyboard shortcuts and GUI.

5.3) What programming languages are you fluent in?

Java, C++, C, C# I haven't used C and C++ much over the last year, but I think it wouldn't take me long to get the hang of it again.

5.4) Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of "there is no way to contact you" does arise!

I don't mind talking on the phone. I will add my phone number to the google application, and I can also provide my Skype details if necessary.

This page was last edited on 21 March 2013, at 03:12.