Difference between revisions of "SummerOfCodeIdeas"

From The Battle for Wesnoth Wiki
m (Mark important points of the first section in bold)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{SoC2014}}
 
{{SoC2014}}
 
 
== I want to be one of your Google Summer of Code students, what should I do? ==
 
== I want to be one of your Google Summer of Code students, what should I do? ==
  
 
Welcome! Here is a quick list of things to do:
 
Welcome! Here is a quick list of things to do:
  
* '''MOST IMPORTANT:''' Submit your application to Google before '''March 21st'''.
+
* '''MOST IMPORTANT:''' Submit your application to [https://www.google-melange.com Google] before '''March 21st'''.
* '''MOST IMPORTANT:''' Join our IRC channel, '''#wesnoth-dev''' on irc.freenode.net, and talk about your project and your application. We will not give formal interviews, but we will clearly favor people we have learned to know during the selection process. IRC is the main, mandatory communication medium for the Battle for Wesnoth Project; for the same reason, it's also a good idea to regularly read the [http://www.wesnoth.org/irclogs/2014/ IRC logs].
+
* '''MOST IMPORTANT:''' Join our IRC channel, '''#wesnoth-dev''' on irc.freenode.net ([http://webchat.freenode.net/ webchat]), and talk about your project and your application. We will not give formal interviews, but we will clearly favor people we have learned to know during the selection process. IRC is the main, mandatory communication medium for the Battle for Wesnoth Project; for the same reason, it's also a good idea to regularly read the [http://www.wesnoth.org/irclogs/2014/ IRC logs].
* '''VERY IMPORTANT:''' Create a wiki page about your idea, using our '''[[SoC2014 Template of Student page|student proposal page template]]''' as base. (To create a new page, enter the desired URL for the page in your browser's address bar, e.g. <code><nowiki>http://wiki.wesnoth.org/New_Page</nowiki></code>.)
+
* '''VERY IMPORTANT:''' Create a wiki page about your idea, using our '''[[SoC2014 Template of Student page|student proposal page template]]''' as base.  
 +
** To create a new page, enter the desired URL for the page in your browser's address bar, e.g. <code><nowiki>http://wiki.wesnoth.org/New_Page</nowiki></code>. (See also http://www.mediawiki.org/wiki/Help:Starting_a_new_page)
 +
** Go into editing mode on the template page http://wiki.wesnoth.org/index.php?title=SoC2014_Template_of_Student_page&action=edit and copy the contents to your new page. '''DO NOT ACTUALLY EDIT ANYTHING IN THE TEMPLATE!'''
 
** Fill the questionnaire.
 
** Fill the questionnaire.
 
** Describe and explain your idea in as much detail as possible. Look at other student pages, and provide a timeline, milestones, and studies you've done.
 
** Describe and explain your idea in as much detail as possible. Look at other student pages, and provide a timeline, milestones, and studies you've done.
 
* If you haven't done so yet, create an account on [https://github.com/ GitHub]. ('''Required''' for pull requests and for granting you commit access to the main repository later on.)
 
* If you haven't done so yet, create an account on [https://github.com/ GitHub]. ('''Required''' for pull requests and for granting you commit access to the main repository later on.)
 
* If you haven't done so yet, create an account on [https://gna.org/ Gna.org], where our [http://bugs.wesnoth.org/ bugs tracker] and [https://mail.gna.org/listinfo/wesnoth-dev developers mailing list] are hosted. ('''Recommended''' for submitting bug reports with a single identity, '''required''' for managing bug reports if you are granted commit access.)
 
* If you haven't done so yet, create an account on [https://gna.org/ Gna.org], where our [http://bugs.wesnoth.org/ bugs tracker] and [https://mail.gna.org/listinfo/wesnoth-dev developers mailing list] are hosted. ('''Recommended''' for submitting bug reports with a single identity, '''required''' for managing bug reports if you are granted commit access.)
* If you haven't done so yet, create an account in the [http://forums.wesnoth.org/ Wesnoth.org forums], and tell a leader of the [http://forums.wesnoth.org/memberlist.php?mode=group&g=6644 Summer of Code group] or forum administrator on the IRC channel to give it SoC group membership.
+
* If you haven't done so yet, create an account in the [http://forums.wesnoth.org/ Wesnoth.org forums], and tell a leader of the [http://forums.wesnoth.org/memberlist.php?mode=group&g=6644 Summer of Code group] or a forum administrator on the IRC channel to give it SoC group membership.
** Forum administrators and SoC group leaders: Boucman, Crab, fendrin/fabi, Ivanovic, mordante/SkeletonCrew, Noy, shadowm, Gambit, Turuk, Soliton.
+
** Forum administrators: Ivanovic, Noy, shadowm, Soliton, Turuk
 +
** SoC group leaders: AI, Crab, mordante/SkeletonCrew, thunderstruck, Trademark
 
* Though not mandatory, it is '''highly advisable''' to take a look at the [[EasyCoding]] and [[NotSoEasyCoding]] pages and implement one of the proposed ideas ideas (or any idea of similar scope) so we can have an idea of how you work. Be sure to use your GitHub account when submitting pull requests so we know who it is coming from. You can also implement features from our [http://bugs.wesnoth.org/ bugs tracker].
 
* Though not mandatory, it is '''highly advisable''' to take a look at the [[EasyCoding]] and [[NotSoEasyCoding]] pages and implement one of the proposed ideas ideas (or any idea of similar scope) so we can have an idea of how you work. Be sure to use your GitHub account when submitting pull requests so we know who it is coming from. You can also implement features from our [http://bugs.wesnoth.org/ bugs tracker].
 
** This should give you a good idea what the Wesnoth source code is like and help you get used to our coding style as well.
 
** This should give you a good idea what the Wesnoth source code is like and help you get used to our coding style as well.
 
** When you implement something, also list it on your own page with a reference to the pull request.  
 
** When you implement something, also list it on your own page with a reference to the pull request.  
 
** You can also start working on your project and submit patches/prototypes related to it.
 
** You can also start working on your project and submit patches/prototypes related to it.
* For working on Wesnoth you '''must''' be able to compile Git master. See our [[WesnothRepository|repository information page]] and the guide on [[CompilingWesnoth|compiling Wesnoth]].
+
* For working on Wesnoth you '''must''' be able to compile Git master. See our [[WesnothRepository|repository information page]] and the guide on [https://github.com/wesnoth/wesnoth/blob/master/INSTALL.md Compiling Wesnoth].
  
 
== Information about our Project ==
 
== Information about our Project ==
Line 33: Line 35:
  
 
{| border=1
 
{| border=1
| NOTE: this list of ideas is automatically generated from the 'description' section of pages in ''Summer of Code 2014 Idea'' category. DO NOT TRY TO EDIT THIS LIST BY HAND - IT WON'T WORK. INSTEAD, CREATE A NEW PAGE WITH THE 'Soc Ideas2014 Template' template.
+
| '''Note:''' This list of ideas is automatically generated from the ''Description'' section of pages in the ''Summer of Code 2014 Idea'' category. '''DO NOT TRY TO EDIT THIS LIST BY HAND - IT WON'T WORK.''' Instead, create a new page using the '''[[SoC_Ideas2014_Template|GSoC idea page template]]'''.
 
|-
 
|-
| NOTE: to add a student page, create a new page based on copy the student proposal page template: [[SoC2014 Template of Student page]]):
+
| '''Note:''' To add a student page, create a new page copying the contents of the '''[[SoC2014 Template of Student page|student proposal page template]]'''.
|}  
+
|}
  
 
{{#dpl:
 
{{#dpl:
Line 62: Line 64:
  
 
==Student proposals submitted both to the wiki and Google==
 
==Student proposals submitted both to the wiki and Google==
(marked by hand, so if your proposal is not there, don't panic, check google's site instead and ping us, if necessary)
+
(Marked by hand. If your proposal is not here, don't panic; check Google's site instead, and ping us if necessary.)
 +
 
 
{{#dpl:
 
{{#dpl:
  |resultsheader=''There are %PAGES% student proposals which were submitted both to wiki and to google''<br/>
+
  |resultsheader=''There are %PAGES% student proposals which were submitted both to the wiki and Google''<br/>
  |oneresultheader=''There is 1 student proposal which was submitted both to wiki and to google''<br/>
+
  |oneresultheader=''There is 1 student proposal which was submitted both to the wiki and Google''<br/>
 
  |suppresserrors=true
 
  |suppresserrors=true
  |noresultsheader=''All the proposals were submitted to google''<br/>
+
  |noresultsheader=''All the proposals were submitted to Google''<br/>
 
  |category=Summer of Code 2014 Student Page
 
  |category=Summer of Code 2014 Student Page
 
  |nottitlematch=SoC2014 Template of Student page
 
  |nottitlematch=SoC2014 Template of Student page
Line 77: Line 80:
  
 
==Results from Google acceptance==
 
==Results from Google acceptance==
List of proposals accepted by Google would be available on April 21st
+
The list of proposals accepted by Google will be available on April 21st.

Latest revision as of 20:09, 15 May 2020

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


Contents

I want to be one of your Google Summer of Code students, what should I do?

Welcome! Here is a quick list of things to do:

  • MOST IMPORTANT: Submit your application to Google before March 21st.
  • MOST IMPORTANT: Join our IRC channel, #wesnoth-dev on irc.freenode.net (webchat), and talk about your project and your application. We will not give formal interviews, but we will clearly favor people we have learned to know during the selection process. IRC is the main, mandatory communication medium for the Battle for Wesnoth Project; for the same reason, it's also a good idea to regularly read the IRC logs.
  • VERY IMPORTANT: Create a wiki page about your idea, using our student proposal page template as base.
  • If you haven't done so yet, create an account on GitHub. (Required for pull requests and for granting you commit access to the main repository later on.)
  • If you haven't done so yet, create an account on Gna.org, where our bugs tracker and developers mailing list are hosted. (Recommended for submitting bug reports with a single identity, required for managing bug reports if you are granted commit access.)
  • If you haven't done so yet, create an account in the Wesnoth.org forums, and tell a leader of the Summer of Code group or a forum administrator on the IRC channel to give it SoC group membership.
    • Forum administrators: Ivanovic, Noy, shadowm, Soliton, Turuk
    • SoC group leaders: AI, Crab, mordante/SkeletonCrew, thunderstruck, Trademark
  • Though not mandatory, it is highly advisable to take a look at the EasyCoding and NotSoEasyCoding pages and implement one of the proposed ideas ideas (or any idea of similar scope) so we can have an idea of how you work. Be sure to use your GitHub account when submitting pull requests so we know who it is coming from. You can also implement features from our bugs tracker.
    • This should give you a good idea what the Wesnoth source code is like and help you get used to our coding style as well.
    • When you implement something, also list it on your own page with a reference to the pull request.
    • You can also start working on your project and submit patches/prototypes related to it.
  • For working on Wesnoth you must be able to compile Git master. See our repository information page and the guide on Compiling Wesnoth.

Information about our Project

The information we provided Google with about our project can be looked up at the site SoC Information for Google.

Also see the Developer Resources listing (linked from the Project page).

People to bug on IRC

We have prepared a list of people with their areas of competence. This should give you an idea of which areas those people can help you with. Of course you should always ask in the IRC channel first, but these are the most likely people to be able to help you.

SoC People to bug on IRC

List of Ideas for the Project (Suggestions from Wesnoth developers)

Note: This list of ideas is automatically generated from the Description section of pages in the Summer of Code 2014 Idea category. DO NOT TRY TO EDIT THIS LIST BY HAND - IT WON'T WORK. Instead, create a new page using the GSoC idea page template.
Note: To add a student page, create a new page copying the contents of the student proposal page template.


AI: Improve AI by implementing global attack/retreat decision

Page for the idea: SoC_Ideas_AI_Global_strategy

The Wesnoth AI works by making local decisions about moves and attacks. Teach it to determine if it's worth to fight offensively or defensively in a given situation.


There are 5 submitted student proposals for this idea

Aditya Pande - Global AI for Battle of Wesnoth

I propose to implement global AI using a combination of idea of Quiescence search on game tree with alpha beta pruning along with a few heuristics to make it possible to actually solve this complex game. Also this approach requires an evaluation scheme for the same.

The idea of using Quiescence search here is different than that in chess engines. Here my idea is to reduce the average branching factor for each choice made by considering the ones which do not affect the game drastically (hence called quiet moves). In this case the braching factor for a unit can be given by

braching factor=Number of attacking moves + Number of Acquire village moves + 2

The 2 represent all Quiet moves based on retreat or charging forward towards enemy. As the quiet moves above do not affect the game drastically they shall be decided based on heuristics and here I plan to only consider the greatest retreat/charge.

The idea behind my approach is based on "Wesnoth can be treated much like a continuous game, because many positions tend to be very similar to each other. Additionally, unlike discrete board games, it is not common that a very small wrong move in Wesnoth is disastrous."

The aim of the whole approach is to simplify the game complexity using few heuristics and then use approach of negamax to select a good overall global move(not the best because of the simplication done) . Also the number of attacking moves and number of acquire village moves has to be reduced to actually keep the problem solvable. (Read all the heuristics for the same in Technical description).

I also plan to divide the whole problem into independent parts whenever possible. Let me give an example, lets say that the AI is under attack on 2 fronts but there is (currently) no relation between the 2 as to say that the AI units involved can't interact(i.e they are too far and can't 'get close' to each other in next turn). My idea is that by doing such division and focusing on solving each problem individually sharply reduces the complexity of the problem.

Lastly I plan to adopt some ideas from Fuzzy Logic, FSM and Behaviour trees to improve the current model I propose.
See Aditya Pande Global AI for more information.

Vahen_Improve_AI

I would like to improve the AI by implementing Global attack / retreat decision.

Elements : Anything around the unit that can cause a change to the behavior

Behavior : Determine what the enemy is going to do based on the elements.

Deliberation : Does the best move depending on the behavior previously set .

To do so I will use probality theory to determine what is best move to do.
See Improve AI for more information.

Arveanor Global AI

Give an ai player a set of potential objectives to pursue such as taking a village, killing an enemy, defending a village etc. Also give each ai different behavior modes based on the information they have access to. i.e. fight aggressively, fight defensively, fight cautiously etc. The ai would, depending on it's current behavior mode pursue the objectives more or less rigorously depending on how they align with the current behavior.

The behaviors and objectives would not necessarily mix strongly with recruitment, however a similar system to what would analyze which behavior to be used would also be able to inform recruiting patterns. Obviously certain unit types and a large amount of certain terrain hexes give good reason to favor certain units in recruitment, of course gaining vision and taking outlying villages (i.e. AI global objectives) would play into recruitment in terms of recruiting faster units.
See SoC2014 arveanor ai for more information.

Kevin Xi - AI: Improve AI by implementing global attack/retreat decision

A rule-based expert system style solution utilizing dynamic programming to make decisions
See SoC2014 kevin AI for more information.


See SoC2014 vorobeez AI for more information.


Improve the automated collection and display of multiplayer game data

Page for the idea: SoC_Ideas_Multiplayer_Data_Analysis

Multiplayer games are currently archived. This includes lots of interesting and potentially useful data, including recruits, deaths, number of turns and other things. The only way to access this information currently is parsing the WML one save file at a time. Additionally, which side(s) won the game is only recorded in some cases. We would like to record which side(s) won or lost (for as many games as possible) and then display useful information about these games for balancing and feedback purposes.

There is 1 submitted student proposal for this idea

Sachith Seneviratne - Multiplayer Data Analysis Proposal

Although Multiplayer games are being archived currently, no data is saved regarding the winner(s). Recording and presenting this information would allow for easier balancing and feedback for content creators. Specifically, this project will add a means by which players can indicate who won, as well as parse the saved data and store in a database as much useful information regarding the games as possible.


See GSoC sachith500 Proposal for more information.


SDL2

Page for the idea: SoC_Ideas_SDL2

The Wesnoth project uses the SDL library. Last year, a new major version (2.0) of SDL was released. This version of the library has better support for mobile devices like the Android and the iPhone. This project involves helping porting Wesnoth from SDL 1.2 to 2.0.

There are 5 submitted student proposals for this idea

Ben Kenawell - SDL2 Project Proposal

Descriptive Summary of Proposal
I would like to work on moving the event and input handling from SDL 1.2 handling to SDL 2.0. To accomplish this I will be considerate of the many differences between the versions including how text input is handled and the differences in event handling. In performing both these tasks, I will be aware of a possible Android or iOS port (since I would love to see that myself), so that my code will perform as smoothly on mobile operating systems as it already does on desktop OSes.

First Level Sections
One major change in event handling is how the thought process behind the keyboard works. The keyboard has become like a many buttoned controller, instead of text inputs. This will be a major change I will work on, in order to make Battle for Wesnoth more keyboard-layout independent. Mouse input will remain similar, except for the mousewheel which, with better support in SDL 2.0, will be more useful for scrolling around the screen. This change may also help with two-finger scrolling across a screen where the comptuer reports this as a mousewheel, ultimately aiding in the creation of a mobile port. Event handling will have similar ideas in mind. While the actual code has not changed very much, those differences will be taken care of as well as a new style of event handler for certain important events, i.e. events that affect the state of the app (open/closed) will be monitored more closely so that progress may be saved. I have taken this into consideration along with the other event handler changes in order to deal with the "garbage collector," which is the nightmare of mobile operating systems. I fear that in the near future (at least with Windows machines), that the garbage collector's presence might make an appearance in desktops, and this measure would increase the longevity of my changes as well as more easily enable mobile ports.
See Dragonofair0/GSoC2014 project idea for more information.

Juan Miguel Ruiz Ladrón, new SDL version

Project description I want to upgrade Wesnoth's SDL 1.2 version to SDL 2.0 version. Specifically the event handling system.


First-level The main problem to move Wesnoth to SDL 2.0 version is the event handling system. I would work with desktop version of the game, improve keyboard input to select actions, units, etc. Also, develop the mobile version of the game, i'm working with Android, using LibGdx framework, i think, it's similar to SDL 2.0 version for handling events and more.
See Juan Miguel Ruiz Ladron/GSoC2014 Proposal for more information.

lipkab - SDL2 transition

I propose to help with the SDL2 transition.

I'd like to work on implementing hardware accelerated rendering for Wesnoth and enabling it for the map/unit rendering system.
See SoC2014 lipkab SDL2 for more information.


See SoC2014 SDL2 DrawingTransition for more information.

TODO: Copy this page and write "your name - proposal title" in this h4 section

TODO: Write a small (1-4 sentences) description of your proposal here.

TODO: Add more first-level sections to detail your proposal
See SoC2014 SDL2 stevedes for more information.


SpriteSheet

Page for the idea: SoC_Ideas_SpriteSheets2014

Wesnoth uses thousands of images, each of them stored in separate files. It would be more efficient to store multiple images in a single file. In order to make that possible, the Wesnoth engine needs to be adapted to allow this change.

There are 2 submitted student proposals for this idea

ALourenco - SpriteSheet

I am proposing the development of a SpriteSheet compability, so the number of assets of Wesnoth can be decreased and it's coding gets cleaner. Instead of having a lot of pictures, we can have, for example, just one per character with all animations needed. It works like a chess board where you can acess the previosly separated pictures in it's respective position. Since Wesnoth uses SDL, we can use OpenGL directly and easily handle several textures from only one SpriteSheet.
See GSoCSpriteSheetsALourenco for more information.

Aishiko GSOC 2014 SpriteSheets

My proposal is to take the current functions for drawing sprites and move it to allow for spritesheets, while hiding any of the changes from campaign designers. It should allow for the seemless intergration of spritesheets and allow for a period of conversion from multiple files to sheets.
See SpriteSheetApplicationSAB for more information.


UMCD

Page of the idea: SoC_Ideas_UMCD_2014 Improving and completing the new add-ons server, UMCD (User-made Content Daemon).

There is 1 submitted student proposal for this idea

Spoffy - UMCD Extension Proposal

I intend to complete and extend the User Made Content Daemon produced by Trademark during GSoC 2013. This means implementing the basic functionality (Uploading, downloading addons, etc) in a secure manner. After this, I would continue on to extend it by adding administration tools, refactoring code, adding build scripts, adding cross-platform support (in principle), and other things (probably!). Outlined on this page is an in-depth proposal

More to come as I fill this out.
See SoC 2014 Spoffy Finishing and Enhancing the UMCD for more information.


Game Engine: Unify SP and MP

Page for the idea: SoC_Ideas_Unify_SP_and_MP_2014

Wesnoth has lots of user made content, but some of it works only for either singleplayer or multiplayer. To solve this, some of the engine's singleplayer and multiplayer code paths need to be unified and extended.

There are 2 submitted student proposals for this idea

RiftWalker - Game Engine: Unify SP and MP

Currently, certain add-on content works only in single- or multi-player games. The purpose of this project is to ensure that all user-made content works across game modes by unifying and extending the code paths that handle configs for single- and multi-player games. This will be achieved by making SP a special case of MP as described by Zaroth.

  • To begin with, I will implement the current single player campaign creation through the multiplayer code path, changing as little as possible.
  • Once I've sorted out all the problems that may arise from this, the door will be open to a host of potential new features and improvements which I will implement according to demand from the community.


See SoC2014 RiftWalker Unify SP MP for more information.

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.
See SoC2014 youngoli UnifySPandMP for more information.


Other: Your own ideas

Page for the idea: SoC_Ideas_Your_Own_Ideas_2014

Suggested skills: C++ (depends on the project).

There are 9 submitted student proposals for this idea

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.
See Dugi's Campaign Wizard for more information.

GoblinThing Campaign Wizard

--LARGE MODIFICATIONS TO PROPOSAL UNDERWAY, INPUT WELCOME--

Due to my particular skill set, working on the eclipse plugin (the UMC editor) would be ideal. Once I manage to acquire a copy of the source code, the project will probably go something like this:

1) (main task) check the wizards that are supposed to exist within the plugin. Make any modifications necessary to keep it up-to-date with WML, then make any changes, additions, or modifications that might be useful to the users. Wizards should include a scenario wizard and campaign main wizard, as these are the most painful to build by hand. Additional components may include a unit wizard, event wizard, and anything else I can think up. Unfortunately, I can't be more specific at this time.

2) (additional task) Check with the original author (Timeotei, I beleive,) and see if there are any things he wanted to include from GSoC 20(11? 12?) and try to implement them. It would be nice to contribute to the original vision.

3) (additional task) Once all other possible tasks have been completed, start a forum thread in the "wml" section and see if anyone has a unique/much needed addition. If they do, I can work on that...

4)...and if they don't, ask the devs for more work. IF my proposal is selected, I see GSoC as a job, and will work like a rabid horse.


I'm still working at convincing eclipse to load the UMC editor properly, and will post additional (much-needed) details as soon as I can.

Thanks for reading,

 -goblinThing


See GoblinThing Wizard for more information.

TODO: Copy this page and write "your name - proposal title" in this h4 section

TODO: Write a small (1-4 sentences) description of your proposal here.

TODO: Add more first-level sections to detail your proposal
See GSoCMindblank for more information.

Improve Random Map Generator

The aim of this proposal is to create better random-generated maps for singleplayer and multiplayer game using new elements and options

Using different "biomas" in the same map (not only desert for example) to make more "unique" scenarios, also, including other elements like peninsulas so the general form of the map changes
See Improve Random Maps for more information.

AI: Improve AI by implementing global attack/retreat decision

Page for the idea: SoC_Ideas_AI_Global_strategy

The Wesnoth AI works by making local decisions about moves and attacks. Teach it to determine if it's worth to fight offensively or defensively in a given situation.


There are 5 submitted student proposals for this idea

Aditya Pande - Global AI for Battle of Wesnoth

I propose to implement global AI using a combination of idea of Quiescence search on game tree with alpha beta pruning along with a few heuristics to make it possible to actually solve this complex game. Also this approach requires an evaluation scheme for the same.

The idea of using Quiescence search here is different than that in chess engines. Here my idea is to reduce the average branching factor for each choice made by considering the ones which do not affect the game drastically (hence called quiet moves). In this case the braching factor for a unit can be given by

braching factor=Number of attacking moves + Number of Acquire village moves + 2

The 2 represent all Quiet moves based on retreat or charging forward towards enemy. As the quiet moves above do not affect the game drastically they shall be decided based on heuristics and here I plan to only consider the greatest retreat/charge.

The idea behind my approach is based on "Wesnoth can be treated much like a continuous game, because many positions tend to be very similar to each other. Additionally, unlike discrete board games, it is not common that a very small wrong move in Wesnoth is disastrous."

The aim of the whole approach is to simplify the game complexity using few heuristics and then use approach of negamax to select a good overall global move(not the best because of the simplication done) . Also the number of attacking moves and number of acquire village moves has to be reduced to actually keep the problem solvable. (Read all the heuristics for the same in Technical description).

I also plan to divide the whole problem into independent parts whenever possible. Let me give an example, lets say that the AI is under attack on 2 fronts but there is (currently) no relation between the 2 as to say that the AI units involved can't interact(i.e they are too far and can't 'get close' to each other in next turn). My idea is that by doing such division and focusing on solving each problem individually sharply reduces the complexity of the problem.

Lastly I plan to adopt some ideas from Fuzzy Logic, FSM and Behaviour trees to improve the current model I propose.
See Aditya Pande Global AI for more information.

Vahen_Improve_AI

I would like to improve the AI by implementing Global attack / retreat decision.

Elements : Anything around the unit that can cause a change to the behavior

Behavior : Determine what the enemy is going to do based on the elements.

Deliberation : Does the best move depending on the behavior previously set .

To do so I will use probality theory to determine what is best move to do.
See Improve AI for more information.

Arveanor Global AI

Give an ai player a set of potential objectives to pursue such as taking a village, killing an enemy, defending a village etc. Also give each ai different behavior modes based on the information they have access to. i.e. fight aggressively, fight defensively, fight cautiously etc. The ai would, depending on it's current behavior mode pursue the objectives more or less rigorously depending on how they align with the current behavior.

The behaviors and objectives would not necessarily mix strongly with recruitment, however a similar system to what would analyze which behavior to be used would also be able to inform recruiting patterns. Obviously certain unit types and a large amount of certain terrain hexes give good reason to favor certain units in recruitment, of course gaining vision and taking outlying villages (i.e. AI global objectives) would play into recruitment in terms of recruiting faster units.
See SoC2014 arveanor ai for more information.

Kevin Xi - AI: Improve AI by implementing global attack/retreat decision

A rule-based expert system style solution utilizing dynamic programming to make decisions
See SoC2014 kevin AI for more information.


See SoC2014 vorobeez AI for more information.


See Jchb AI Global Strat for more information.

neonosos - Improve AI by global world analysis

My goal is to contribute Wesnoth AI by improving AI players with global-analysis skill. This skill makes AI players able to not only react on local impulses (such as attack or presence of another player), but also to make deeper-planned strategies.

Economical aspect
The AI player should be able to decide which enemy to attack according to his economical needs. It means, that if AI player needs gold, he should attack player with high gold resources.
War-strategy aspect
AI player should not attack if it's not appropriate. Why to attack player, that is much stronger than the AI? Maybe some kind of indirect (for example economical, diplomatic) attack would be more appropriate.
Planning for future aspect
Should I attack the nearest enemy's village? Why not to attack the further one, cutting of the escape from the nearest village?


See Neonosos for more information.

Daniwa: Improve the AI's Attack and Retreat decisions.

Abstract: Implement a process that would allow the AI to make correct decisions in regards to attack and retreat. It will be based off probability focused on current metagame habits.

Proposal: The focus of my implementation is not on outputting the optimal result in every case but instead will aim at mirroring a player like decision. The goal for this is to foster and develop good game decision making in new players and prevent bad habits. Ideally, the AI should act correctly but unpredictably (which is technically impossible) and be able to be a training aid.
See SOC2014 Daniwa Ai for more information.

Zubin Kapaida: Improve AI by implementing global attack/retreat decision

I believe that the key to making a good AI bot is to keep your ideas clear and simple. One must evaluate the gravity of the situation using the given parameters and accordingly act offensively or defensively.

Sometimes it is more beneficial to risk one unit’s death or even sacrifice a few and perform the attack, the tricky part is to figure out when. In this game “Battle of Wesnoth” several factors affect the decision making like terrain, time of day (i.e. day / night), special abilities, enemy units’ status etc.

Positioning is a crucial part, ideally we should try to position every unit such that it has backup from other units and is away from critical danger, also positioning in terrain that would support maximum defense if ideal. Next we must try to exploit the enemies weakness, e.g. if the enemies unit has no defense in range, then we should attack that unit with heavy range units. Also while attacking we must try to surround the enemy from multiple directions and then synchronize the attack.

For implementation I propose use different parameters like aggression, depth etc. Here aggression parameter would specify how much the AI values its own units as opposed to that of the enemies. Depth parameter indicates the number of units that will attack a single opponent unit. protect_leader (radius) parameter, it is used to target any enemy unit which comes within the specified radius around the leader, and many others will be needed.

The value of aggression will determine whether to play offensively or to retreat. Next I propose the use of decision tree to determine the value of aggression. The decision tree will be a binary tree and in each node we check some condition like terrain, time of day etc. which affects our strategy. So we start from the root node and after validating all the conditions we end up on a leaf node. The value of aggression will be determined on the basis of the leaf node we end up on.

As mentioned earlier positioning is very important. Positioning of units is different for aggressive and defensive approaches. To plan out the positioning we will use threat map. A threat map is a 2D array which describes the level of danger on every position. While building a threat map, the positioning of the enemy units, type of units and other factors are taken into account.
See SoC2014 Zubin AI for more information.

ykanarev - AI task implementation

TODO: Write a small (1-4 sentences) description of your proposal here.

TODO: Add more first-level sections to detail your proposal

TODO: Set the proper Category in the top of the page ([[Category:XYZ]]), to match the one you'd like to apply for, from the list on the main summer of code page (e.g.: [[Category:SoC_Ideas_AI_Global_strategy]]). Otherwise your idea will be marked as a new one.
See YKanarev AI impl for more information.


Student proposals not submitted to Google

There are 25 student proposals which were not submitted to google
adityapande Aditya Pande Global AI
dragonofair0 Dragonofair0/GSoC2014 project idea
Dugi Dugi's Campaign Wizard
goblinThing GoblinThing Wizard
sachith500 GSoC sachith500 Proposal
TODO: Put only your IRC nickname in there. In case of alternate nicks, separate with commas.

Example contents for this section (without the quotes): "user" "user1, user2" GSoCMindblank
ALourenco GSoCSpriteSheetsALourenco
Vahen Improve AI
demiurgos Improve Random Maps
jchb Jchb AI Global Strat
juanmi91 Juan Miguel Ruiz Ladron/GSoC2014 Proposal
neonosos Neonosos
spoffy SoC 2014 Spoffy Finishing and Enhancing the UMCD
arveanor SoC2014 arveanor ai
Daniwa SOC2014 Daniwa Ai
Kevin_Xi SoC2014 kevin AI
lipkab SoC2014 lipkab SDL2
RiftWalker SoC2014 RiftWalker Unify SP MP
zerophase SoC2014 SDL2 DrawingTransition
stevedes SoC2014 SDL2 stevedes
vorobeez SoC2014 vorobeez AI
Youngoli SoC2014 youngoli UnifySPandMP
ZubinKapadia SoC2014 Zubin AI
Aishiko, Aishiko_laptop SpriteSheetApplicationSAB
ykanarev YKanarev AI impl

Student proposals submitted both to the wiki and Google

(Marked by hand. If your proposal is not here, don't panic; check Google's site instead, and ping us if necessary.)

All the proposals were submitted to Google
Aditya Pande Global AI
Dragonofair0/GSoC2014 project idea
Dugi's Campaign Wizard
GoblinThing Wizard
GSoC sachith500 Proposal
GSoCMindblank
GSoCSpriteSheetsALourenco
Improve AI
Improve Random Maps
Jchb AI Global Strat
Juan Miguel Ruiz Ladron/GSoC2014 Proposal
Neonosos
SoC 2014 Spoffy Finishing and Enhancing the UMCD
SoC2014 arveanor ai
SOC2014 Daniwa Ai
SoC2014 kevin AI
SoC2014 lipkab SDL2
SoC2014 RiftWalker Unify SP MP
SoC2014 SDL2 DrawingTransition
SoC2014 SDL2 stevedes
SoC2014 vorobeez AI
SoC2014 youngoli UnifySPandMP
SoC2014 Zubin AI
SpriteSheetApplicationSAB
YKanarev AI impl

Results from Google acceptance

The list of proposals accepted by Google will be available on April 21st.

This page was last edited on 15 May 2020, at 20:09.