From The Battle for Wesnoth Wiki


My account names are fairly similar; on gna, I am davidhilton, in the forum, I am david.hilton, and on irc, I am david_hilton_p.


I have been playing Wesnoth for about a year now. I really like turn-based strategy (X-COM rules!), but I don't consider myself a gamer; I have a tendency to program more than I game (as BlueBlaze can attest). I currently work both as a software contractor working with LogoMetrix to commercialize a research project (development of palatometers, which are used to help people to learn proper pronunciation) and as a Linux sysadmin.

I am a Junior/Senior CS student at BYU.

As far as my desire to participate in the Google SoC, I figure if I can get paid to play, why not? I would like to get a good taste of being involved in a fun OSS project with a good-sized group of developers.


I've worked on personal projects, including a genetic optimizer of AI and a probabilistic grammar checker, in addition to work and school-related projects, ranging from data collection software to an OSS shopping cart (perl-based *cringe*) to project management software.

I have limited experience working in teams; I haven't worked on the same code base with more than one other person on any commercial project. I have worked with up to three others on school projects.

As far as development models go, I enjoy the waterfall. Especially combined with the big bang style of programming (write all the code, then wade through bugs for billions of years). On a more serious note, I have been trying agile development at school, but I haven't decided what I think of it. Regardless of that, some things are certain; prototyping (in some form) and comprehensive test cases are very important.

I'm not currently involved with any OSS projects. I do have a personal project (a probabilistic grammar checker), but it is very young and purely experimental.

Languages and Development

  • I have done both school work and professional development in C and C++; in a sense, they are my native tongue.
  • I have done coursework using Java, C#, and Scheme.
  • I am currently learning Common Lisp, forgetting perl (but I still use it), and getting better at bash.
  • I have used various IDEs, but I tend to use emacs nowadays.


I am very fluent in English, and quite competent at Spanish (I served as an LDS missionary in Argentina for 2 years).

I am fine with voip, and I am awake from 12:00 to 4:00 UTC.

Patches Submitted

patch #1022: refactoring of game.cpp, to allow for testing (rejected because of size)

patch #1026: part 1 of refactoring

A Proposal

Create a graph editor that would be integrated with the map editor. Although I have described it as based on a finite state machine editor, that description is somewhat inaccurate, as events of any type could be added, including events or actions directly dealing with variables (retaining Turing completeness). Also, there would be no restriction on the number of actions to take place per state.


  • Actions: actions to be performed by the scenario engine
  • Events: results of normal game progression (user actions, death of characters, etc)
  • Node: container of any number of Actions
  • Event Bundle: combination of multiple Events
  • Chain of Events: a connected graph of Nodes and Events
  • //Region: an area on a map that can be used in Actions and Events

The concept of events and actions is central. Events/Actions should be easily added (by plugins, or directly into the source?), allowing for the eventual development of a very rich graphical language. Initially, events/actions would contain snippets of WML, but would eventually be extended to interact with the GUI (on the map editor, as well as the scenario editor) to a much greater extent.

A GUI Layout


Yes, this is lacking some important details. Yes, my handwriting is pretty bad.


To summarize, my proposal is to create an extension to the map editor, allowing for scenario editing.

For an initial phase, I would:

  • Create a graph editor within the map editor (displayed as an editor of multiple chains of events)
  • Create nodes that are triggered by events and contain events to perform
  • Create a basic event type, allowing for direct modification of WML
  • Create a converter from the graph structure to WML

The design could later be extended by:

  • Adding a utility to merge maps into a campaign
  • Creating a concise interface to the map editor state, easing the creation of higher-level events
  • Adding Unique events whose WML would not be visible
  • Adding metadata to the converter output
  • Creating a WML importer (allowing for some degree of manual modification of editor exported scenarios)

Elements of my design that need further evaluation:

  • Effectiveness of the plugin design to support advanced features

It is highly probable that in order to have good/advanced features that are easy to use, each feature will need a lot of thought. Before implementation starts, coming up with a couple of specific examples and getting input from non-coders would be good, in order to investigate the flexibility of this approach.

Not Another Proposal!

In the long term, I would probably be more interested in the AI than the editor. I had a ton of fun creating and refining my first/last one. I don't know much formal theory on AI, but I'm pretty sharp (not to imply that others aren't). I'm pretty good at analysis and getting around hairy problems, especially when I really like the topic. It becomes an obsession.

I would be happy to work on other parts of the game, as opportunity demands.

This page was last edited on 27 March 2008, at 14:42.