Kunal Tyagi: Implementing new changes in GUI of Wesnoth
I intend to work on improving several aspects of the GUI, which may seem trivial, but actually improve the gameplay quality by several factors, and also make it easy to concentrate on the game as well as the story. My improvements would include, but would not be limited to, better method to recall troops, better accessibility to help, more maneuverability in the in-scenario dialogues and several others.
Currently there are several bugs plaguing the GUI, such as the fact that recruitment and recall are difficult since the player has to do several actions of the same kind, which I would like to resolve.
IRC:
midNightPhoenix
PROJECT
Make spin boxes to enable multiple recruitments of the same kind
Essentially, in several scenarios, I have observed that we many times need to recruit 4-5 horsemen or Elvish archers, for which we need to go to a hex, right click, and click on recruit, the choose the unit over and over again. This can’t be accomplished using keyboard shortcuts, since they don’t always work in several Linux environments! So, if there are spin boxes which can hold numbers till the gold is Zero, or the max hex free in the castle/encampment, I feel, as do several fellow gamers that gameplay quality will increase, especially if max_possible units can be recruited on just a simple click.
Make in-scenario dialogues repeatable
In-scenario dialogues are as much a part of the story line as the pre-scenario narration is. So, replay ability will be another thing (which is sometimes sorely missed, especially when one has to look at previous conversations to make a scenario changing decision!) which I will like to introduce.
Remember the last sort configuration of the recall box
Currently, every time, one tries to recall, the units are sorted either randomly, or by the fraction of (XP/XP required to advance), and sometimes the user likes to sort by level reached, or the type of unit, after all having mermen in a forest is never a good idea! So, I would like to incorporate a variable which would resort the units in the same order as the one with which the recall dialogue box was closed.
Allow multiple recalls
It is basically a continuation of the thought of the first topic. I intend to make multiple recall-able using checkboxes, which will be active on the bases of hex available or gold surplus. Now once all the intended units are selected, and OK is clicked, the user can choose between the selected units using b/n or any other key combo/mouse scroll to rotate between the units, and when the desired unit is reached, click on the hex intended to fully recall it. Also, an invert selection button will be an added feature.
See the range as well as the control area of a unit on mouse hover
Currently, to see the range of enemy/friendly units, we need to click on them, which may lead to bogus commands by mistake. Hence if the feature is made available on hovering of the mouse, it will be a big boost towards making the game more user friendly.
Help using mouse over tips
In several things, like traits, it is better if the explanation comes on mouse over the trait, like a tool tip, as this would help the newcomers to the game.
Questionnaire
1) Basics
1.1) Write a small introduction to yourself.
I am Kunal Tyagi, first year student at Indian Institute of Technology, Bombay. Currently, I work as one of the 6 programmers for AUV-IITB, with my work encompassing developing interfaces, checking algorithms for consistency and/or obsolete code and working on basic image processing. My interests include reading novels, playing soccer and surfing internet for humorous articles. I also pursue robotics and aeromodelling as a hobby.
1.2) State your preferred email address.
kunaltyagi.gsoc <at> gmail.com
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?
midNightPhoenix
1.4) Why do you want to participate in summer of code?
Google Summer of Code (GSoC) provides me with the unique opportunity to expand and enhance my skills in C++, interpersonal skills, as well as utilize the huge 2 month holidays to do some constructive work. I have found my skills in programming to be amongst the best in my peers and even amongst the seniors and I think that I can help unburden my middle class parents by working in the summer. Moreover, I feel that since I already use so many FOSSes, it is only natural if I pay the FOSS society in some way. Due to my skills in coding, I wish to achieve the above aims by participating in the GSoC.
1.5) What are you studying, subject, level and school?
I am studying in IIT-B, Mumbai as a freshman. I have studied Mathematics (Linear Algebra, Differential Equations, Calculus), Physics(Modern Physics, Electricity and Magnetism), Chemistry(Physical, Organic, Inorganic), Data Analysis(Error measurement, analysis, and statistics), Computers(Basics of C++), Engineering Drawing( including CAD), Mechanical Engineering(Lab of Basic techniques of Construction of models (wood, metal, other hard materials)), as well as labs of Physics and Chemistry. Moreover, I have done self-study on various topics like Algorithms, C++, HTML, CSS, Java, Javascript, CFD, and forayed into 3D modelling, animation, website designing, video editing, acting.
1.6) What country are you from, at what time are you most likely to be able to join IRC?
I am from Mumbai, India. Most likely, I will be joining IRC during the summers at 10am(IST) to 0000(IST), and during the non-holiday period, my times would be 6pm(IST) to 1:30 am(IST), since the internet ban kicks at 1:30 am.
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.
My commitments in the summer period include a weeklong visit to my relatives in New Delhi from 20 June to 26 June and a summer Technical project from 10 May to 10 June. Also my term starts from 18 July and the first exams will occur in mid-September. Apart from them, I have no other commitments.
2) Experience
2.1) What programs/software have you worked on before?
I have worked on Maya, Vegas Pro, Adobe Creative Suite(Photoshop, AfterEffects), Flash, DreamWeaver, Eagle, C++, office suites, AutoCAD (2D, 3D), Solidworks, Ansys, C++, Java(using Netbeans), Qt, Robot Operating Software, and several other softwares.
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)
I have not done much hacking on my own, but have worked on team projects(teams of 2-3) even in school. I have developed games like chess(2 player), cross-the-road, tic-tac-toe(1 player mode also), personal phone book+calculator+calendar+diary app in C++ . Recently I developed a connect-4 game with both 2 player and 1 player mode using minimax algorithm. In large teams, my only experience is my continuing stint with AUV-IITB, with whom I have been working since September 2012. The software team of 6 develops software to compete in a competition of autonomous underwater vehicles. The team uses git and redmine for version control and collaboration.
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?
No, this is my first try to participate in GSoC.
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.
My AUV-IITB team is working towards developing software to such an extent that it could be released a freeware, especially the codes of integrating microcontrollers, CAN, in ROS, as well as a better way to represent the camera as an instrument(able to receive input and vary output as a result, which is now achieved in a rather convoluted form) instead of a sensor in ROS. The interfaces, image processing techniques, and navigation cum decision making algorithms, instead will be registered as IP.
2.5) Gaming experience - Are you a gamer?
Yes.
2.5.1) What type of gamer are you?
I am an mid-core gamer.
2.5.2) What type of games?
I play FIFA, racing games like Split Second, Burnout, Forza Motorsport, Assassin's Creed, Prince of Persia, Crysis, Gears of War, Counter Strike, Age of Mythology, Age of Empire, Call of Duty, Counter Strike, DoTA and retro games.
2.5.3) What type of opponents do you prefer?
I prefer human opponents to AI, and even in AI, I prefer opponents of just more than my skills. If possible I prefer multiplayer modes, using other players to make them fight it out while I aim for the goal. I am more of an assassin/sniper, the silent ghost, in multiplayer team games.
2.5.4) Are you more interested in story or gameplay?
I am more interested in a gameplay that also has a story to keep me interested; mindless playing is not my forte as long as I am not playing multiplayer.
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.
I have not played Wesnoth with multiple human players, but have been playing Wesnoth against AI(scenario) for over 6 months, as well as multiplayer mode for about 4 months. I usually play while I need a reprieve from coding(in Ubuntu, other games are on Windows OS). I definitely lean towards single player till now.
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.
No patches submitted
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 am very fluent in both spoken and written English. I have studied English as my first language my education started, and in several standardised tests, I have consistently ranked very high in usage of English.
3.2) What spoken languages are you fluent in?
I am fluent in English and Hindi. I can also speak broken Marathi, German, and rudimentary Sanskrit.
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 am quite good in interacting with other players. Since my institute has a string gaming culture, and I have frequented the gaming corridors of the institute, I can say that I handle the player community quite well, by my own limited opinion. In games, even during stressful periods, I manage to put my point across the board succinctly and clearly.
3.4) Do you give constructive advice?
Yes, giving advice is really helpful to a teammate, since in several situations, he may be unaware of the full picture, or maynot know the best way to handle the situation, for example, in FIFA, a player may not know the best way to cross the ball, or the best trick to be used in a particular situation. Even if the person is not a teammate, helping him/her improves the quality of gaming and makes it more interesting.
3.5) Do you receive advice well?
If one gives advice, one must also be ready to receive advice, since people like a player who helps others, and they give random tips, some of which are totally strange, and very useful. Actually, I make it a point to always listen to advice, be it life, sports, studies or games, and then decide myself about the best course of action. So I have to say that I receive advice well, sportingly, but with a pinch of salt.
3.6) Are you good at sorting useful criticisms from useless ones?
Sorting criticism is an art. I usually just listen to criticism, and if it comes with advice, I try to use my methodology to implement it, else if the criticism appears without any advice, just like “You are a lousy gamer”, I ignore the criticism, since there are only 24 hours in a day, out of which one can only devote so much to gaming!! I apply my principles in life even in gaming.
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 am pretty autonomous while coding. I first sit down and ask what are the inputs available, requirements and possible methods to achieve them. After this discussion, I try to find a method which puts me at ease with respect to efficiency, ease of understanding and style. I then present it, and if it doesn't fit the requirements, change it till it does.
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?
No, I did not select a project from your list
4.2) If you have invented your own project, please describe the project and the scope.
Yes, well part of it. I have experienced that recalling fighters is a big trouble and is also annoying. I would like to make the following changes in the GUI(apart from theones discussed above):
Make the Recall dialog such that the user can open it, select a tile and then recall the required soldier, the select another tile and recall another soldier, rinse, repeat; or else select all the soldiers he wants to recruit, then choose them by say a/d and click on the tile she/he wants to place them.
Make it possible to know the power of the magical item by clicking/hovering on it, so that the user can decide if he wants to take it in future turns or not.
Show the possible hex to move in from a mouse hover event itself for all troops, both the enemy and the allied.
4.3) Why did you choose this project?
I chose this project because, honestly, I like coding, plus I have become a big fan of Wesnoth over this year (2012-13) and the fact that this gives me a chance of working on GUI, in which I have interest and prior experience. This all compounded by my being free in summer and a strong urge to do something new, something which puts me out of my comfort zone and pushes my limits ensured that I picked this project.
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".
Since my college will begin in the second half of July, I intend to finish most of the work on the project by 15 July, leaving only the testing, and touch-ups as well as add-ons for the later 2 to 1 1/2 months. I also have exams in September(schedule hasn’t been released), so I hope to finish the project by August end. I, as mentioned previously, am going on a week long holiday in June end. So, I intend to get started on the project in the month of May itself, and finish it about 60% or more by June end, leaving me ample of time to finish the project in the allotted timeframe. After mid-July, I hope to finish the project by July end and finish testing by the end of August.
4.5) Include as much technical detail about your implementation as you can
My implementation would just add more elements to the existing Qt structure of the game, as well as revamp it in several cases, for example, currently, the dialog boxes capture all the events, i.e., one can’t have a dialogue box and work on the main window., which I propose to change by making the dialogue boxes a part of the main window, and not a completely separated events.
Most of the work will be playing with QtElemnts like QCheckBox, QSpinBox and the variables provided by the Wesnoth framework regarding the free hexes, gold requirement of the unit and gold left, and is straight forward. However the complexity increases in the case of multiple recalls, in which I would have to capture the keyboard, and the mouse and then change the unit selected as per the input, and the place the unit on a mouseReleaseEvent().
Overall, the project is not very heavy on the technical side.
4.6) What do you expect to gain from this project?
I expect that I will gain a much better technical knowledge of how Wesnoth works and how AI engines in complex games work. I expect that after the project I will know how very big projects are collaborated, how do the ‘big guys’ do version controlling, and how various other problems in the professional arena are tackled.
Moreover, I will receive an incalculable amount of experience, fun, memories and of course, the bragging rights amongst my peers!!
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?
I am interested in gaming, as a result of which I would stay with Wesnoth because it is the first name that comes to anyone if a FOSS game is asked! Working with a rich community like Wesnoth will be a matter of pride for me. Moreover, the fact that Wesnoth community has more artists than coders and that criticism is not handed out for the sake of it makes it lucrative (at least now) for me to stick around after the conclusion of GSoC. All this is after discounting the learning I will get from the community.
5) Practical considerations
5.1) Are you familiar with any of the following tools or languages?
Subversion : I use git, but have started reading up on subversion
C++ : familiar with advanced concepts of namespace, STL, templates, etc.
Libraries: STL, working on Boost, Sdl
Python : very rudimentary knowledge.
build environments (eg cmake/scons): familiar with make, cmake, will take time to be acquainted with scons
WML (the wesnoth specific scenario language)
Lua : have read the manual, have to start coding in it.
5.2) Which tools do you normally use for development? Why do you use them?
I mainly do coding for AUV-IITB, a group of students which aims to win in RoboSub, help at San Diego, California(US). I have done software development, designed interfaces in Qt, worked on ROS, and on AtMega64. I also recently started on gazebo. Apart from this, I also do other tasks which involve me using Eagle(Circuit Board design) and SolidWorks, Ansys(Structural design and analysis).
I use Terminator, vim, and sublime Text apart from required softwares. I use these softwares because:
-
I was introduced to vim by a senior and after sometime, I felt comfortable in vim and didn't see any need to shift to Emacs, or any other editor. However, I have now shifted to Sublime Text since it offers a great editing environment as well as some nifty shortcuts. Though I still miss dd command!
-
Terminator helps me to observe several terminal windows at the same time. Moreover, ROS is mostly command line based, and since the team’s software has ROS as the backbone, Terminator gives a lot of ease of use over Terminal.
5.3) What programming languages are you fluent in?
I am fluent in C++ and C. Though in the past I have done projects in Java, HTML (with CSS, and Javascript), as well as Adobe Flash ActionScript.
5.4) Would you mind talking with your mentor on telephone / internet phone?
I wouldn't mind talking on the phone, and discussing on varied topics with my mentor provided that the time of call is not very late in the night (from my point of perspective) unless it is for an urgent reason. Also, I live in IITB Hostels, which bans internet at 1:30am in the night, making internet phone useless at this time. Though the ban is lifted at 5:30am in the morning.
I can be contacted at: kunaltyagi [dot] gsoc [at] gmail [dot] com
or midNightPhoenix (IRC), phone number