SoC2013 Darius42

From The Battle for Wesnoth Wiki

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

This is a Summer of Code 2013 student page



darius42 - AI: Improve configuration and behavior in mainline campaigns

This is an idea suggested by Wesnoth developers. Main goal of the idea is to configure campaign AI to utilize new capabilities of the engine. For AI to utilize these capabilities, it is necessary to configure the AI with Lua snippets with which we can bind specific implementations of behaviour to the AI. This will be done manually for all campaings since AI requires scenario specific behaviour.





Write a small introduction to yourself.

I am a 20 year old student aspiring to become a professional programer. As a person with many hobbies I am constantly looking for challenges in programming, gaming, sports, music (guitar) etc. I like to involve myself in as much programming activities (mostly competitions) as I can since I learn so much from each one. This time I decided to go big and involve myself in an open-source project.

State your preferred email address.

Preferred email is

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

My chosen nick is darius42 for both IRC and Wesnoth forums.

Why do you want to participate in summer of code?

I believe that the most important thing for a student is to try and get as much practical experience as possible before setting out into the real world. That is why I am here, to learn as much as possible by involving myself in an open-source project, which happens to be a game I dearly love. I see summer of code as a structured entry point to becoming involved in an open-source project, without otherwise having to bang my head on where to start my involvement.

What are you studying, subject, level and school?

I am a 3rd year student at Faculty of Electrical Engineering and Computing, University of Zagreb, Croatia. My area of study is Software Engineering and I am about to finish my studies with a Bachelor's degree and start on my Master studies in autumn.

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

I am from Croatia and I will most likely be active from 9am UTC+1 till midnight but I can be made available at any time if needed.

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

Currently I have no other commitments apart from having Midterms from 17th June till 28th June.


What programs/software have you worked on before?

Apart from algorithmic competitions (Java, C/C++) and personal hobby projects (Java, Python, C/C++), I have worked on several web (Django, PHP, Java Servlet, .NET) and Android applications.

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

During my studies, I was assigned to a team several times on a software project, both for web and desktop. Apart from college team projects, I have been in a team of 3 during a Android/Web application for a competition and in a team of 5 in a student competition for Android applications.

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?

I have not participated.

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

I am currently not involved.

Gaming experience - Are you a gamer?

Yes I am.

What type of gamer are you?

I enjoy all kinds of games and have played most of the good games out there but I don't play as much as when I was younger, when I considered myself a hardcore gamer.

What type of games?

I think I spent most time playing RPG-s and MMORPG-s, because these types of games are really a time sink, but I definitely enjoy good turn based strategies and RTS games and it's a genre I have played the most games in. There are also competitive MOBA style games which I have played extensively in a clan. I consider some of the newer generation games to be more like interactive movies so I enjoy them equally as seeing a good movie.

What type of opponents do you prefer?

If I am playing competitively, I enjoy playing against challenging opponents, opponents that surpass my skill. There is always something to learn from such opponents and you get aware of the fact that no matter how good you are, in any field, there is always someone much better than you.

Are you more interested in story or gameplay?

I think I am more interested in gameplay. I can think of several games where the story is generic but the gameplay is so great that the game is considered a masterpiece (for example a game called FTL - Faster Than Light). But if the gameplay is not so great then the story can still make a game good, but in my experience it happens rarely.

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

I have played Wesnoth extensively both solo and with friends during several summers. I have equally enjoyed single player, where I played most of the campaings, and multiplayer where I played in hot-seat in co-op and versus a few friends.

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 haven't contributed yet.

Communication skills

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

What spoken languages are you fluent in?

Croatian, English.

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

I believe I have enough self-control to distance myself from unnecessary arguments and talk in a civilized manner with anyone who wants to do the same. I am more than aware of what people can be like on the internet, but I am happy to hear that the developer community is friendly.

Do you give constructive advice?

Constructive advice has helped me to learn alot about what I was doing wrong on my previous projects. I will always try to give constructive advice as I know from experienence that it is of immense help to a developer.

Do you receive advice well?

Advice is what I am building my experience on as a student so it is extremely important to me.

Are you good at sorting useful criticisms from useless ones?

Good criticism should point out what is wrong and why it is wrong. I can't do anything with the criticism that doesn't explain why is something bad in the first place. I believe that this filters out most of the useless criticism.

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 have done many hobby projects on my own so I can be very autonomous when developing and I usually code a proof of concept to see what are the problems I didn't predict.


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 have chosen a project with the title: "AI: Improve configuration and behaviour in mainline campaings". I would be really glad if I could do what the title says and improve the quality of AI in campaings. What I really want to learn from this is how does AI work in Wesnoth in general so that I can successfully implement what is needed in this project and continue contributing after GSoC.

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

I have not invented my own project.

Why did you choose this project?

I have been interested in AI for a long time and when I played Wesnoth a few years back I told myself that one day, when I become more experienced, that I will contribute to Wesnoth. This summer I believe I have enough experience to start contributing to Wesnoth and I believe that this project is an ideal starting place.

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 May 27:

  • Familiarize myself with Wesnoth source code in general
  • Learn how to commit patches to Wesnoth
  • Become active on Wesnoth developer IRC

May 27 - June 16:

  • Get to know my mentor and start discussing the project scope
  • Get up to speed by reading necessary documentation
  • Outlining what AI behaviours need to be configured for each campaign
  • Familiarize myself with Wesnoth AI by tweaking and testing the source code
  • Learn LUA

June 16 - June 28:

  • I have Midterms during this period so I will be unavailable

June 28 - July 8:

  • Begin implementing changes to mainline campaign AI
  • Code an initial implementation of the requested behaviours
  • Test the AI behaviour in simpler mainline campaigns

July 8 - July 29 (GSoC Midterm):

  • Implement more of the requested behaviours for the AI
  • Improve the code according to mentor advice
  • Test the AI behaviour in more complex mainline campaigns

August 1 - September 1:

  • Continue implementing requested scenario specific AI behaviours until all campaings are updated
  • Extensive testing of all changes to AI in campaings

September 1 - September 16:

  • Bug fixing, code improving and writing documentation

I plan to discuss every major change with my mentor so I can be sure I am on the right track and I will be available for discussion most of the development time.

Include as much technical detail about your implementation as you can

As I am yet to delve deep into Wesnoth source code I can't give explicit information about what needs to be done but I can give an outline. For each campaign there is specific behaviour that can be configured which can improve the overall quality of AI. These new behaviours are the result of engine improvements and require updating AI scripts by hand for each campaign. AI can be configured using Lua snippets and coding new behaviours can be achieved in either C++ or Lua. Configuration with Lua snippets creates an abstract layer above the actual implementation of the AI behaviour so the underlying code can be easily modified without modifying AI configuration.

What do you expect to gain from this project?

I expect to gain experience on working on a bigger project and confidence in my coding skills.

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

I am already planning to stay in the Wesnoth community as a contributor even after GSoC. This is because the community was friendly so far and I feel comfortable within the community.

Practical considerations

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

Git (used for all commits)

I have used Git extensively on most of my projects.

C++ (language used for all the normal source code)

I have been coding in C++ for about 4-5 years now.

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

I have used STL alot when coding in C++ but I have minimal experience in SDL and no experience in Boost.

Python (optional, mainly used for tools)

I spent most of my coding time in Python during the last year so I am more than familiar with it.

build environments (eg cmake/scons)

I have not used cmake/scons.

WML (the wesnoth specific scenario language)

I have not used WML.

Lua (used in combination with WML to create scenarios)

I have minimal knowledge of Lua.

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

For Java I am mostly using Eclipse Indigo IDE because of its stability, extendability and code autocompletion. For C/C++, Python, Perl and similar languages I use Sublime Text 2 as it is an incredibly powerful text editor and I can code extremely fast and be very productive. For PHP I mostly use NetBeans as it has some features I needed for PHP, like auto upload to a server. For C# I use Visual Studio 2012. For version control I am mostly familiar with Git but I have used Svn and TFS as well.

What programming languages are you fluent in?

C/C++, C#, Java, Python, PHP, JavaScript

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 would not mind at all.

This page was last edited on 3 May 2013, at 23:22.