Difference between revisions of "SummerOfCodeProposal lfernando"

From The Battle for Wesnoth Wiki
(Questionnaire)
Line 63: Line 63:
 
<h4>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 SVN (during the evaluation period or earlier) please state so.</h4>
 
<h4>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 SVN (during the evaluation period or earlier) please state so.</h4>
 
Fix for bug #14114, on patch #1538.
 
Fix for bug #14114, on patch #1538.
 +
 
Reported minor bug #15601, and fixed it on patch #1525.
 
Reported minor bug #15601, and fixed it on patch #1525.
 +
 
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.
 
Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.
 
<h3>3) Communication skills</h3>
 
<h3>3) Communication skills</h3>
Line 140: Line 142:
 
<h4>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! </h4>
 
<h4>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! </h4>
 
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D
 
Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D
 +
 +
=Project Description=
 +
 +
==Overview==
 +
The general idea of this project is to introduce variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them ''global'' variables.
 +
 +
Global variables will be stored and retrieved using two special tags, [save_global_variable] and [load_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those "local" variables) should be saved to/loaded from an external source. 
 +
 +
I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.
 +
 +
 +
==WML Syntax==
 +
Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.
 +
 +
  [load_global_variable]
 +
    side=side1
 +
    persist_id=my_addon
 +
    from_global=my_variable_name
 +
    to_local=foo
 +
  [/load_global_variable]
 +
 +
  [save_global_variable]
 +
    side=side1
 +
    persist_id=my_addon
 +
    from_local=my_variable_name
 +
    to_global=foo
 +
  [/save_global_variable]
 +
 +
===[load_global_variable]===
 +
Creates a local variable from the value of a global variable.
 +
*'''side''': Relevant only in MP. Determines which player on MP will do the load operation.
 +
*'''persist_id''': Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)
 +
*'''from_global''': Determines the global value from which the variable is loaded.
 +
*'''to_local''': Determines the name of the local variable that receives the loaded value.
 +
 +
===[save_global_variable]===
 +
Stores a local variable as a global variable.
 +
 +
It has the same syntax as [load_global_variable], except for noting that it stores local variable named ''from_local'' to a global variable named ''to_global''.
 +
 +
 +
Global variable files should have very simple wml syntax:
 +
 +
  [variables]
 +
    tutorial_completed=1
 +
    betrayed_darken_volk=1
 +
    dragons_slain=2
 +
    king_of_wesnoth=1
 +
    ...
 +
  [/variables]
 +
 +
==Gamemaster==
 +
 +
*Game master description
 +
 +
==Project Schedule==
 +
 +
*To do

Revision as of 19:28, 7 April 2010


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



This is a Summer of Code 2010 student page


Contents

Description

lfernando - Implement persistent storage of gameworld data between semi-related scenarios

  • In Progress

IRC

lfernando

Questionnaire

Basics

Write a small introduction to yourself.

My name is Luiz Fernando and I'm a 23 years old programmer/gamer/graduate student.

State your preferred email address.

lucifernando@gmail.com

If you have chosen a nick for IRC and Wesnoth forums, what is it?

lfernando

Why do you want to participate in summer of code?

I'm very eager to get involved with the open source world and I want to know how it is to contribute in a big project used by many, many people. GSoC seems like a rewarding way to join an open source project.

What are you studying, subject, level and school?

I'm a master student on UNICAMP(University of Campinas) where I graduated two years ago. My research subject is graph theory.

What country are you from, at what time are you most likely to be able to join IRC?

I'm from Brazil(UTC-3) and I may be able to be on IRC mostly any time of the day on weekdays. IRC meet times should mostly depend on my mentor's time schedule.

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

I just took a week-long vacation on the last week of March, so I don't plan to take any longer break until September. And besides, we have winter here in Brazil on the June - August period =).

Experience

What programs/software have you worked on before?

I've worked on a music technology institute inside my university called NICS, where I started development for a music experimenting tool/improviser called Chord Jammer. Also, I fixed some bugs for a project called Javox. Both projects were implemented on Java.

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

No! That's one of my main interests to participating on this project, to know how it is to work on a big project. One of my main complaint from the above mentioned projects is that I had to do it by myself

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?

Never participated on any Summer of Code project.

Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.

My first experience with open source is Battle for Wesnoth.

Gaming experience - Are you a gamer?

Yeah!

What type of gamer are you?

Well, I play videogames since I was a little kid(the first game I remember playing was megaman 4 on NES when I was 5 years old). I kept playing until now, so I guess I'm some avid gamer =P. Heck, even while I was fixing the bugs, lots of times I would just take a break and resume playing Httt =P.

What type of games?

Fighting games(Street Fighter, Soul Calibur), strategy games(BfW, Warcraft, Age of Empires, Civilization), rpg's(final fantasy series, chrono trigger, fallout, world of warcraft, lots of other japanese rpgs), action games(mario, castlevania), shooters (Half-Life, Quake),

What type of opponents do you prefer?

The clever, unpredictable ones.

Are you more interested in story or gameplay?

Tough question! But I guess videogames are all about "playing", and some games don't even have a discernible story, so I'll choose gameplay. But some games(Fallout 1/2, Breath of Fire 2, Final Fantasy VII, Mother 3) grabbed me for the story alone if not for the great gameplay.

Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.

I played mainly singleplayer campaigns on Wesnoth.

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 SVN (during the evaluation period or earlier) please state so.

Fix for bug #14114, on patch #1538.

Reported minor bug #15601, and fixed it on patch #1525.

Implemented a small example regarding the persistency idea, recorded on http://wesnoth.pastebin.com/g1hMez2J.

3) Communication skills

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 think my written english is almost on fluent level.

What spoken languages are you fluent in?

Portuguese and English. I know a little bit of French and Japanese.

Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.

Yes, I prefer when the conversation is enjoyable, but I can handle angry complaining and trolling too if needed.

Do you give constructive advice?

Of course.

Do you receive advice well?

I think so. If it's the advice is constructive, I'm very attentious.

Are you good at sorting useful criticisms from useless ones?

Yes.

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?

If it's a simple task I'll do it myself. If it's a bit more complicated, sometimes I'll sketch my idea in an example piece of code or some template files. Then I'll discuss it until I I have a clear idea of what to do. Then I'll code it until it is implemented. Of course, doubts and questions arise as the project flows, and I'm eager to ask them as soon as possible.

Project

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?

Project described below.

Why did you choose this project?

First of all because I enjoyed playing the game =). Also, it is "minimalist" and has concepts which are very simple to grasp. That suggested some kind of elegance. The community is really friendly and present and answered my begginer questions promptly. And finally, when I downloaded the source and started studying it, it felt like it was made by folks with a firm grasp of C++ and I could learn a lot if I could understand the code and hack through it.

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".

  • April 26 - May 17: Make persistence work for singleplayer.
  • May 15 - June 4: Make persistence work for multiplayer.
  • June 6 - August 6: Finish the "gamemaster" for MP.And maybe some MP add-on/map that uses this system.

Right now, I'm not enrolled to school disciplines, and I don't have any exams to make. My only time-expensive activity is working on my Master Thesis. I'll keep working on my thesis, but I plan to finish it only by the end of the year. While I'm doing this project, it'll be my first priority to finish it on time.

Include as much technical detail about your implementation as you can

See it on project description below.

What do you expect to gain from this project?

Having fun with open source development. Learning how to work with many people on a big software project. C++ Enlightenment. =)

What would make you stay in the Wesnoth community after the conclusion of SOC?

Yes, It'll be a pleasure to help the project whenever I have spare time =)


Practical considerations

Are you familiar with any of the following tools or languages?

   * Subversion (used for all commits)

Yes.

   * C++ (language used for all the normal source code)

Yes.

   * STL, Boost, Sdl (C++ libraries used by Wesnoth)

STL and some Boost. Never worked with Sdl before.

   * Python (optional, mainly used for tools)

Wrote mostly little programs with it. Seems a really well designed language, eager to use it more on the future.

   * build environments (eg cmake/autotools/scons)

I know SCons and Autotools. Am using SCons to compile Wesnoth builds as for now.

   * WML (the wesnoth specific scenario language)

Started learning it and guess I know it well enough to understand this problem.

   * Lua (used in combination with WML to create scenarios)

No.

Which tools do you normally use for development? Why do you use them?

Eclipse. Gedit for programming in the small.

What programming languages are you fluent in?

C, C++, Java.

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!

Yeah! You can have my cell phone number and call me when any problem arise. You can have my family house number too, but if you want to call it'd be better be really important because my mother can't understand any english! =-D

Project Description

Overview

The general idea of this project is to introduce variables that are independent from savefiles and campaign lines. They will be accessible from any context and not lose validity once a particular game/campaign has ended. We'll call them global variables.

Global variables will be stored and retrieved using two special tags, [save_global_variable] and [load_global_variable]. They should be used on scenario WML, and their usage will allow that variables, as defined by the [set_variable] family of tags, (from now onwards we will call those "local" variables) should be saved to/loaded from an external source.

I'm planning to store global variables on simple wml files with syntax borrowed from uncompressed saves. Each add-on will have its own set of variables, and its own file for global variables.


WML Syntax

Here goes a sample specification for the syntax of [load_global_variable] and [store_global_variable] as suggested by Crab_.

 [load_global_variable]
   side=side1
   persist_id=my_addon
   from_global=my_variable_name
   to_local=foo
 [/load_global_variable]
 [save_global_variable]
   side=side1
   persist_id=my_addon
   from_local=my_variable_name
   to_global=foo
 [/save_global_variable]

[load_global_variable]

Creates a local variable from the value of a global variable.

  • side: Relevant only in MP. Determines which player on MP will do the load operation.
  • persist_id: Used for determining from which add-on this variable should be loaded (default is the add-on of the game being played)
  • from_global: Determines the global value from which the variable is loaded.
  • to_local: Determines the name of the local variable that receives the loaded value.

[save_global_variable]

Stores a local variable as a global variable.

It has the same syntax as [load_global_variable], except for noting that it stores local variable named from_local to a global variable named to_global.


Global variable files should have very simple wml syntax:

 [variables]
   tutorial_completed=1
   betrayed_darken_volk=1
   dragons_slain=2
   king_of_wesnoth=1
   ...
 [/variables]

Gamemaster

  • Game master description

Project Schedule

  • To do