SoC2014 youngoli UnifySPandMP

From The Battle for Wesnoth Wiki

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

This is a Summer of Code 2014 student page


  • This proposal is unfinished.

I've tried to add as much detail as I can with what I know of the project, but it's still vague. I will continue improving this page as I learn more about the code base and the needs of this project, and I can solidify my plan more.


youngoli - Unify SP and MP

Abstract: This proposal is intended to unify the separate code paths responsible for handling configuration files in single player and multiplayer. This will allow content that previously would only work in multiplayer to work in singleplayer as well.



The general plan for this proposal is as follows:

1. Isolate all the sections of code (which files, functions, etc.) that will have to be unified between single and multiplayer. Once a list is written, create a week by week plan for the final proposal.

2. Go through each of the listed sections, unifying code as appropriate and testing the improved code. Every week or so make sure to test with default and user-created campaigns, to make sure they still work properly.

3. Once all code paths are unified, go into serious testing. Test existing campaigns to make sure they work correctly. Test the various configuration options to avoid undesired interactions. Refactor code where necessary.

4. Add the GUI elements necessary to allow singleplayer to take advantage of previously multiplayer-only features. Test the GUI elements and the features they provide.

5. Finish any unfinished documentation. Scrub code. Prepare the code for integration into the master branch, if it is ready for that.






1) Basics

1.1) Write a small introduction to yourself.

Hello there. I'm Daniel Oliveira (screen name youngoli). I'm an aspiring game programmer, currently still learning programming in college. I have about a year's experience with C, 2 year's experience with C++, and most of my knowledge right now is of game engine architecture, physics, and data structures.

1.2) State your preferred email address.

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

IRC: Youngoli, Forums: youngoli

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

For the experience mostly. I've never contributed to open source software before, and GSoC seems like a good way for me to experience something new while at the same time learning more about programming than if I just try to teach myself all summer.

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

School: Digipen Institute of Technology

Level: Sophomore

Major: Bachelor's of Science in Computer Science in Real Time Interactive Simulation

Courses: I'll list out some of the major classes I've had so far.

  • Linear Algebra I and II
  • Calculus I and II
  • Physics I
  • Intro to C
  • Intro to C++ and Advanced C++
  • Data Structures
  • Operating Systems
  • 3D Graphics I and II
  • Assembly Programming (Intel x86)
  • Game Projects (A one year long team project where we build an entire game in C++ from scratch.)

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

US, West Coast. I'm most likely going to be on really late, from 8 PM to 2 AM Pacific Time, though I can certainly be on earlier if necessary.

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

At the moment I have no other commitments nor have I made any plans for vacation. If this changes I will make sure to notify everyone, but it doesn't seem likely.

2) Experience

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

I have not worked on any open source software. I've done a variety of school assignments, such as various data structures, a 3D polygon renderer "from scratch", and a memory manager. I've also worked on various game projects. My project this year is not public yet, although I'll be glad to provide a copy of it as well as code samples if anyone is curious. My project from last Spring is available here:

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

Yes! The previously mentioned game projects are all team projects. I've worked on a team with all programmers, and on a multidisciplinary team with artists and sound designers. I'm used to the responsibilities that come with team-based work, like weekly meetings, frequent reports, and constant communication.

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?


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


2.5) Gaming experience - Are you a gamer?


2.5.1) What type of gamer are you?

I consider myself a somewhat hardcore gamer.

2.5.2) What type of games?

My favorite genres are usually FPSes, RTSes, open-world RPGs, turn-based strategy, city-building, and recently MOBAs.

2.5.3) What type of opponents do you prefer?

I generally prefer human opponents, unless I'm still learning how to play.

2.5.4) Are you more interested in story or gameplay?

Gameplay for sure, though I'm not against a compelling story.

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 played a few missions into the beginner campaign a while ago (I think around a year ago). I would probably have played more if it wasn't for time constraints. I played one multiplayer game about a year ago as well, at the urging of a Steam friend who needed an extra player to join.

We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.

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

I have not committed anything yet, or gained commit access. I will update this as soon as that changes.

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 am very fluent in written English.

3.2) What spoken languages are you fluent in?

English and Portuguese

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 ever interacted directly with players as I've never been in the developer seat. However when interacting with others I always try to be polite, respectful, and honestly consider the opinions of others even if they seem ridiculous at first. Naturally, this would extend into interactions with the player community as well.

3.4) Do you give constructive advice?

I aim to make sure my advice is always constructive, but I also try to stick to only giving advice when it's wanted. I know that even the most constructive advice can be annoying when it's given with bad timing.

3.5) Do you receive advice well?

I believe so. I try to always genuinely consider advice and criticism leveled at me, especially when my gut reaction is to reject it.

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

Again, I believe so. I tend to consider a useful criticism as one that I actually come to agree with after some consideration, and a useless one as one that, even after actually thinking about it and considering it, I continue to disagree with.

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 am not very autonomous at all. I tend to spend a lot of time planning before I jump in. I tend to aim for one or two solid, well thought-out iterations on an idea rather than a series of small iterations. Not because I think that method is better, but just because I find that's how I work best.

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 selected the Unify Code for Singleplayer and Multiplayer project. For this I want to concentrate on consistency. Since the whole project is focused more on unifying underlying code than adding fancy features, I think it is worth spending the time to make sure the code works better, doesn't break anything, and ends up more consistent and therefore easier to navigate. As a plus this should also make the code extensible so that any new configuration settings can be easily applied to both single and multiplayer campaigns without a lot of headache.

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


4.3) Why did you choose this project?

Frankly, it just sounded interesting and I can't really say why. Maybe I just really love well-designed systems.

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".

Not finished yet. I'll update as soon as possible.

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

Not finished yet. I'll update as soon as possible.

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

Experience working on open source software, especially in code greatly different than my own.

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

Although I probably wouldn't be able to contribute during the next school year, if I find the project interesting and rewarding enough I'll probably try to contribute next summer as well, even if not in GSoC.

5) Practical considerations

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

  • Git - Barely, but I use Mercurial, which I hear is similar.
  • C++ - Yes, very much so
  • STL - Yes, very much so
  • Boost, Sdl - No
  • Python - Yes
  • build environments - Only premake on Windows
  • WML - No
  • Lua - No

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

  • I use Visual Studio C++ as I normally code on Windows. It has a pretty good Intellisense, and it is the best program I know of for debugging.
  • Sublime Text for text editing. I know shortcuts on it that improve my workflow.
  • Borland CodeGuard if I can get it to compile under the Borland compiler. It catches a lot of problems I would normally miss.

5.3) What programming languages are you fluent in?

C, C++

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'm fine with that. My phone number should be available in my google submission info.

This page was last edited on 19 March 2014, at 13:11.