Map Editor Ilor

From The Battle for Wesnoth Wiki

This project was accepted for the 2008 Google Summer of Code and completed successfully, status at Editor2. It became the official map editor in later 1.5 developemnt versions of Wesnoth and in Wesnoth 1.6, completely replacing the old editor.

About me

My name is Tomasz Śniatowski, ilor on irc/gna/forums/wiki, I'm a software engineering student in the Wroclaw University of Technology in Poland. My preferred e-mail adress is kailoran(at] I would like to participate in GSoC to do some useful work in an open source project, perhaps eventually get involved in the general development of it. Getting paid means that I will feel obliged to devote a significant amount of time to the project, which should benefit everyone.

I chose Wesnoth because I am intersted in game development and I like the fact that it is both a fully functional game but still actively developed, unlike many other open source games which tend to be only one of these things.


I have submitted:

  • patch #1024 (cancel orders option in load game dialog) [[1]]
  • patch #1036 (:command autogenerated help and refactoring) [[2]]
  • patch #1027 (small correctness bugfix) [[3]]
  • patch #1038 (debug log performace tweaks) [[4]]

After I got commit access, I committed the two of the above patches and also a small fix to one that's been commited earlier by someone else. Then worked some more on :commands and /commands.

I enjoy writing code that helps people save time. This includes myself, and often I will code a small tool to automate something even if overall I don't gain much - I just don't like manually doing repetetive things. I learned a fair bit of shell scripting and python that way.

A few years back I wrote a (now defunct, but useful for a long time) helper utility for a browser based strategy game ([5]) that automated some tedious tasks. Unfortunately that was before I knew c++ :) Recently I got a bit involved in another browser based game, a local text MMORPG under construction ([6]). I wrote several helpful Greasemonkey scripts, such as a simple ajax-ification of part of the game, that I hope will be integrated into the game someday. I also had some chats with the game developer and helped him with some PHP and database stuff. I'm not more involved there because the developer wants to keep it a one man job for now.

Other than that, I know a fair bit of PHP and (My)SQL (a bit above the "select * from table" level), and have coded some websites as a kind of part-time job. This included using an established framework (Zend) and adapting and maintainng open-source software installations (oscommerce).

I have mostly worked on my own, though once or twice I coded something with 2 or 3 friends. I have not participatd in GSoC before, and have not participated in open source projects apart from some bug report here or there.

I prefer a buzzword-free development method, first take some time to come up with a reasonable basic design, then get a working prototype as a milestone and gradually improve on that. "Iterative" is probably the right word. Automated tests are useful but it might be difficult to make them exhaustive, as the project is in large part about the user interface.

As for gaming, I played lots of various games, from strategies both real-time and turn-based to shooters and RPGs. I tend to play mostly singleplayer, and like a good story in a game, though some games, like racing sims, don't really need one. I also think that bad gameplay can kill a game regardless of story. I have played Wesnoth (singleplayer) some time ago for a while, and got back to it recently.

Communication skills

English is my second language -- my first is Polish. I have no trouble communicating in English in any way. I consider myself fairly good at interacting with other players and developers. I try to give advice when I can and when I am fairly confident it will be correct. I don't really like people who keep giving "advice" despite not knowing much. I'm perfectly fine with receiving advice. Sometimes I ask for help, sometimes I make it a point to figure out stuff by myself.


I chose the map editor because I feel it is a task that one person can reasonably get to a decent state within the time of GSoC, and it is also an important tool that currently is not in good shape. Apart from the features mentioned on the project idea page, I think solid internal structure of the editor should be the focus of the project. For instance, some sort of multiple document interface should be easy to do code-wise, even if that particular idea is not used. The code should be clear and documented enough to allow someone else to maintain it even if I stay with the project after GSoC.

I think the editor should be written in C++ and should reuse portions of the game sources, to avoid duplicatng effort. I would like to emphasise a modular design in the code, so starting from scratch and using code from the current editor only as a rough reference for one way of doing things seems reasonable. Obviously, where the code is good enough, it could be simply adjusted to the new design to save time.

Some features I would like to implement are:

  • multi-level undo
  • allow mulitiple maps to be open at the same time with working copy-paste between them
  • a well defined api for map generators (generate entire map, randomize selected area etc) so that no generator is hardcoded
  • "templates" -- user-defined map chunks ready to be placed (a standard keep for example)
  • tasks or macros photoshop/gimp-like are an interesting idea (possibly related to undo). It might be too difficult to finish during GSoC though.

Rough timeline/milestones:

  • Get the design and a working prototype (basic map display and edit terrain) ready by May 26.
  • I will have some exams in June but I don't think that it will be a major obstacle, at most a week or two of downtime.
  • Reimplement most if not all of current editor's features by 7 July, i.e. before midterm deadline. There should be a workable if a bit unpolioshed editor by then, also with some new features in by that time.
  • Have most planned features in by 1 August, spend the next two weeks ironing things out, testing and adding only minor features

What I expect to gain from this project: experience with user interface design and working with a slightly larger project than I'm used to.

I hope to stay in the community after GSoC, the map editor being acepted and used would certainly encourage me to stay. Improving the editor further after GSoC woud then be natural, though I would also like to get involved with the game's programming in general if possible.

Practical considerations

I have good knowledge of C++ (and STL), and started to familiarize myself with Wesnoth codebase. I learned C++ pretty much on my own, first by coding small problems for some local programming/algorithm contests. I even got to the country finals once, though I'm not a huge fan of 5-hour "reimplement the appropriate algorithm in each of the problems" events. At least this made me pay attention to computational etc. complexity issues. Later I got some more useful knowledge from various books and experimenting. I also had C++ classes on my uni, but I ended up helping other people a lot more than writing my own code. It taught me some patience, especially since formatting code in a readable way was not part of the course.

I am familiar with Sub­­version, I use s­­v­­n in my own projects even though I code alone, to keep track of changes and as a remote backup.

Other tools I use:

  • Visual Studio, as I develop under Windows mostly (though not exclusively, but issues wih linux on my laptop make me use a lot more of Windows)
  • Notepad++ and SciTe -- lightweight but powerful editors
  • Cygwin -- I find it difficult to work without a bash shell with find, grep and friends
  • Dev-C++ -- somewhat unwieldy but lighter dev enviroment than MS VStudio, also Wesnoth has a project file ready
  • Wireshark -- debugging network issues, seeing what packets are being sent is very handy at times

I know C++ and PHP very well, C and Python reasonably well. I also know aome Pascal, VB, (my)SQL, and have touched some Java and other languages like shell scripting etc.

In terms of spoken languages I know Polish, my first language, and English. I consider myself fluent in spoken and written English. I am usually awake roughly between 0800 and 0000 UTC, though sometimes I get up later and stay up later than that. During weekdays I have classes that most of the time are over by 1500 UTC. I don't mind talking with my mentor over the phone or voip.

New project

After talking on IRC we (the devs) hinted him in the direction of a new possible project, the proposal is linked here: WML_Engine_Rewrite. After another while they (the devs) suggested I go back to the original project, so there's no real need to go to the wml page.

Original milestones

  • 2008-05-26 - Basics:
    • Get a dummy editor mode into the game - hopefully to get to a point where it can display a blank map. Turns out that a dummy editor is more of a challenge than I expected. Needs more thought, and probably some refactoring in main game code. Delayed, but when finished a big part of the entire project will be done.
    • setup to allow development in the main trunk without interfering with other devs work.
  • 2008-07-11 ("halfway milestone") - Have a working, if crude editor. Expected features are:
    • map load/save
    • basic terrain picker
    • painting
    • undo
    • some gui (may be crude and not all functions will be easily available)
    • solid class structure for implemeting more features
    • some documentation for the internals.
  • 2008-08-11 ("final milestone") - Have all current editor functions implemented, and more, with a reasonable user interface. Some of the expected features (some of which are new):
    • fancy terrain picker
    • selections, copy-paste
    • brushes
    • templates (really just saved pastes)
    • random map generator interface for map generator writers
    • reasonable docs for the editor to allow other people to extend it further
This page was last edited on 21 March 2013, at 01:53.