Dugi's Campaign Wizard

From The Battle for Wesnoth Wiki
Revision as of 19:15, 14 April 2014 by Dugi (talk | contribs) (Description: added some detail)


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


'

Description

Dugi - Campaign Wizard

I've seen on the forums that people frequently ask for campaign wizards and such and when they're told that there is no such thing, they struggle usually with the basics like writing a proper _main.cfg file. There is a project named Eclipse Java plugin, but it's not a part of wesnoth, only a few people know about it and it is basically just a text editor adapted to work with WML. This project is to make a campaign wizard, incorporated into the game, that would allow creating simpler campaigns in an intuitive way, without having to read or write source codes.

The idea is to create a campaign making GUI that would be accessible from the map editor or some other menu, and would allow making campaigns without writing any codes, just clicking and writing some dialogues, unit names and such. It wouldn't allow doing all the things that can be done with WML, just the more common things.

It would contain several windows or tabs, one for the entire campaign's properties (setting up the basic properties), one for the scenarios (setting up the basic properties, like assigning maps, sides' properties, then adding commonly used events) and something for adding custom units (basic properties, assigning images to attacks and animations).

It would need to use slightly different data structures than usual wesnoth because campaigns need including files and macros, preprocessor defines and similar things that are usually parsed out when reading the files. I think that they could be created through inheritance and a few modifications (especially a special tag for macros and a property to make it depend on difficulty).

The map editor can do a plenty of things around scenarioWML, so it might be used to create scenarios after some editing, but at least some sort of ActionWML editor would need to be added (supporting basic tags like message, creating units, killing units, moving units).

This is what the main window of the campaign editor might look like (sorry for not caring much about the layout's appearance, but that's not the point): 1Y6Og6S.png

Further expansions (if time remains or to be done in another summer) may include support for ifs, variables and objects in ActionWML, AMLA, custom abilities and weapon specials in UnitWML, maybe possible alternative scenario paths.

IRC

Dugi

Questionnaire

1) Basics

1.1) Write a small introduction to yourself. Written on google-melange, I don't want to write information about myself somewhere where it can be accessed by anyone.

1.2) State your preferred email address. Written on google-melange, I don't want to write information about myself somewhere where it can be accessed by anyone.

1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? A shortcut of my last name, used commonly by my real-life friends.

1.4) Why do you want to participate in summer of code? To get beter in C++ and help developping a game.

1.5) What are you studying, subject, level and school? I am studying plasma physics (4th year, master's) and mathematical informatics (1st year, undergraduate), these are two parallel major-only studies.

1.6) What country are you from, at what time are you most likely to be able to join IRC? I am the most likely to join IRC during the day in Europe, maybe in the evening. Rather in the evening during lessons.

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


2) Experience

2.1) What programs/software have you worked on before? I have made an add-on campaign for Battle for Wesnoth. I was also making a 3D game using Ogre3D (but I accidentally lost all the files, and haven't written much in its remake because I didn't have enough time).

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

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? I haven't participated there yet.

2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. Actually coding some other stuff for Battle for Wesnoth. I have done some user-made content before.

2.5) Gaming experience - Are you a gamer? Yes.

2.5.1) What type of gamer are you? Playing like twice a week, usually like 6 hours in a row.

2.5.2) What type of games? Mostly RPGs.

2.5.3) What type of opponents do you prefer? AI opponents, competitive player versus player doesn't attract me much.

2.5.4) Are you more interested in story or gameplay? Rather gameplay, but I enjoy a good story, it can keep me playing even if the gameplay isn't as good.

2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. Yes, initially a lot (like 4 years ago), then I played less and I worked mostly on making my own campaign. I prefer single player.

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.

None, but currently working on one.


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 write in English language almost as fluently as in my native language.

3.2) What spoken languages are you fluent in? Depends how fluent. I should be fluent enough in Slovak, Czech and English. Maybe French after some revision.


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 play multiplayer really rarely, not only because of ill-mannered players.

3.4) Do you give constructive advice? I think yes.

3.5) Do you receive advice well? Yes.

3.6) Are you good at sorting useful criticisms from useless ones? I think 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 prefer discussing things briefly and then doing them, deciding about all the details myself, petty problems can be corrected afterwards.


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? Yes, I liked the Campaign-making wizard project, so I picked it.

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

4.3) Why did you choose this project? Because I consider myself a veteran at making campaigns.

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". I should have no exams during the summer (unless I fail some miserably, but three years of physics have taught me how to pass), and I don't know if I'll be on some holidays so early. But I can code also during holiday, last time I did.

Steps:

1. Creating a data structure similar to config, but allowing also some macro usage that is necessary for campaigns. It would add two extra member variables. One, a string, would be the define the tag would be wrapped in, because campaigns can't be written without this (and it's necessary to make something depend on difficulty). The other one, a vector of strings, would transform the tag into a macro, first member being the macro name (it is a macro of this one is present) and others being macro arguments.

2. Adding a campaign wizard window somewhere (details like where would it be are to be discussed), making it create a folder for the campaign, its _main.cfg and server.pbl files and write some paths into the _main file (asking just for a few text fields like campaign name, description, etc.). There will be buttons to add scenarios and units, implemented in the next steps. It would be also able to load existing campaigns, but only if they are simple enough.

3. Changing the map editor to enable it to create also SP scenarios (would be a new object created via inheritance or just the same with some extra ifs), placing units, saving coordinates and other things the new editor can do. It would also handle SideWML, offer more possibilities with units in the scenarios and contain an event editor to add some dialogues, create/recall units, and end the scenario (shown as lines, with an edit/add button that would edit the properties of each tag). Check boxes for scenario variables like disallow_recall or victory_when_enemies_defeated would be present as well.

4. Expanding the possibilities of the ActionWML, filters. Adding moving units, giving gold, very basic variable usage. Filters would ask for some properties of the units, describing them as killer/victim instead of primary/secondary unit. This would need windows created through the C++ code without GUIWML, like the GUI in manager_ui.cpp.

5. Adding a menu that allows creating new unit types. It would have text fields for basic stuff, facilities to assign images for baseframe and animations, abilities and maybe some advancements. Adding also facilities for unit modifications, enabling the more common changes like common abilities and weapon specials, changing damage, resistances and movement (for AMLA, but also as [object] tags in scenarios).

6. Finishing the project, using it to create a campaign in order to find features that are annoying to use and bugs that might not have been spotted.

4.5) Include as much technical detail about your implementation as you can The idea is to create a campaign making GUI that would be accessible from the map editor or some other menu, and would allow making campaigns without writing any codes, just clicking and writing some dialogues, unit names and such. It wouldn't allow doing all the things that can be done with WML, just the more common things.

It would contain several windows or tabs, one for the entire campaign's properties (setting up the basic properties), one for the scenarios (setting up the basic properties, like assigning maps, sides' properties, then adding commonly used events) and something for adding custom units (basic properties, assigning images to attacks and animations, some abilities and AMLA).

It would need to use slightly different data structures than usual wesnoth because campaigns need including files and macros, preprocessor defines and similar things that are usually parsed out when reading the files. I think that they could be created through inheritance and a few modifications.

The map editor can do a plenty of things around scenarioWML, so it might be used to create scenarios after some editing, but at least some sort of ActionWML editor would need to be added (supporting basic tags like message, creating units, recalling, changing gold, killing units, moving units, giving some objects to them, options and variables).

4.6) What do you expect to gain from this project? Experience and pleasure from helping others. I know this sounds pathetic...

4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? I am maintaining the add-on campaign I've made, and I'll have to maintain it for ages because of its high popularity.


5) Practical considerations

5.1) Are you familiar with any of the following tools or languages? Git (used for all commits) Familiar C++ (language used for all the normal source code) Familiar STL, Boost, Sdl (C++ libraries used by Wesnoth) No. I have used a few boost functions, though. Python (optional, mainly used for tools) No, but I know how to execute python scripts, for I have used these python tools. build environments (eg cmake/scons) Familiar with CMake, but I have used scons to build wesnoth once. WML (the wesnoth specific scenario language) Familiar Lua (used in combination with WML to create scenarios) Quite familiar

5.2) Which tools do you normally use for development? Why do you use them? QtCreator as IDE for C++ Gedit for other stuff

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!

Written on google-melange, the last thing I need is more spam phone calls.