SoC2011 Zippydaspinhead

From The Battle for Wesnoth Wiki

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

This is a Summer of Code 2011 student page
Project: SoC Ideas Sprite Sheets2011


Jacob Regan - Consolidation of .PNG's into Sprite Sheets

The goal is to create a logical system for ordering individual frames of animation into a single image file. The implementation of this system has two major parts. First, the code to implement those single image files needs to be developed and tested. Secondly an easy way to manipulate, modify, and add new sprite sheets needs to be implemented. To this end, I propose that each sprite sheet be arranged in a grid, with the rows each representing a different animation action (attack, idle, ect.) and each row representing a frame of the animation.



SoC Application

Battle for Wesnoth - Google Summer of Code Application

Part 1: Code implementation

In order to use sprite sheets, there need to be several changes to the current code base. The basic idea here to have each frame of the animation denoted by an ordered pair (x,y) that corresponds to the frame in the sprite sheet file. x denotes the frame and y denotes what action the animation is showing.

An example of the organization of a sprite sheet for an elven soldier is the following:

Elven Soldier 1 2 3 4 5 6 7 8 ect.
Idle Frames f r a m e s g o
Melee Attack i n h e r e
Ranged Attack
Level Up

Organization of the terrain files would be each row contains a terrain type and the sprites for the transitions like so.

Grassland Grassland2Grassland Grassland2Castle Grassland2Mountain ect...
Castle Castle2Castle Castle2Mountain ect....
Mountain Mountain2Mountain ect...

Notice that this file will shrink in number of columns as it goes down each row. This is explained simply since once the frame for a specific transition is in the file it needs not be repeated. For example the Grassland to Mountain transition will be listed in the grassland row, so it has no need to be in the mountain row.

In order to test the sprite sheets, the first step would be to develop a test bed for the sheets. Using this test bed, animation will be played for each sprite sheets. This allows testing of the animation code, as well as code that can later be used for the GUI as a tester.

After the test bed has been completed the next step is to create a command line sprite sheet creater/converter. This tool would accelerate and simplify the creation of the sheets themselves.

Finally the code used to animate the sprite sheets needs to be integrated into the Wesnoth code base. Testing and streamlining then to follow.

Part 2: GUI sprite sheet modification (Or as I want to call it "Sprite-er")

Seeing as not all programmers are artists, and not all artists are programmers, a command line interface for creating sprite sheets is not an ideal form for the general public. The creation of a GUI interface to create and modify sprite sheets is necessary for the sanity of several people. However, a good chunk of the code for such a tool will have already been written. Using the test bed code and the command line sprite sheet code from above, I will create a small and simple tool for the creation of sprite sheets in a visual manner. The user will be able to add rows for different animations, frames to those rows to extend animations. Artists can create the frames in seperate .PNG's and load them into the GUI tool as frames. I hope to also be able to allow artists to use the GUI tool to load in a whole sprite sheet and just separate frames for the game if the artist prefers to work on an animation in a single file.

The goal of this GUI is to be very easy to use. In my opinion, someone with the patience to make and prefect the art work needed for these animations shouldn't have to slog through a lot of code or learn to use a complicated tool in order to make a sprite sheet.


Present-May 22 Familiarize myself with current code base, animation code, and current PNG data
May 23 - June 7 Create command line converter, convert PNG's into sprite sheets.
June 8 - July 11 Create test bed and test sprite sheets. Implement code in Wesnoth code base. (June 9-13 productivity may be reduced for my brother's wedding)
July 12 - August 10 Using test bed and command line converter code, create GUI to create and modify sprite sheets.
August 11 - August 22 Clean and optimize code, write documentation.


1) Basics

1.1) Write a small introduction to yourself.

My name is Jake Regan, I am a sophmore at Loras College in Dubuque, Iowa, majoring in Computer Information Technology - Science Track (Computer Science). I live in Decorah IA, and plan on spending my time working on Wesnoth there. I enjoy gaming (including Wesnoth) and plan to make it my career. I hope to eventually open my own game studio, either by starting my own company or making a new branch to an existing one.

1.2) State your preferred email address. - seeing as this is my homepage for my browser I check it almost everytime I open my browser.

Alternate (checked almost if not as often as my gmail account) -

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


1.4) Why do you want to participate in summer of code?

I feel that it is a good opportunity to work on a real life project enjoyed by many around the world. I have been playing Wesnoth for years, and have always enjoyed it. The idea of contributing to the project, and the pride that goes with that is attractive to me. Not to mention that being a part of the GSoC is both profitable and is a great networking opportunity.

1.5) What are you studying, subject, level and school?

I am majoring in Computer Information Technology - Science Track at Loras College in Dubuque IA. I am finishing up my Sophmore year, on track to graduate a semester early (Dec 2012)

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

USA - probably be on from 8:00 AM to 5 or 6 PM Central time (-6:00)

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

The only thing I have planned currently is my brother's wedding on June 11th. It is noted in the timeline above.

2) Experience

2.1) What programs/software have you worked on before?

Mostly just in class programs.

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

Yes, I have had several group projects in my classes.

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 attempt at the program.

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

No previous open source experience.

2.5) Gaming experience - Are you a gamer?


2.5.1) What type of gamer are you?

I would consider myself a fairly hardcore gamer. I generally play at least once a day, though lately I haven't had a lot of time to.

2.5.2) What type of games?

I primarily play FPS games (Halo, Call of Duty), but I play several genres. Probably my second favorite genre after FPS's are strategy games such as Wesnoth or StarCraft and the like.

2.5.3) What type of opponents do you prefer?

When playing human opponents I prefer those who do unorthodox things. I find that I generally am able to counter these opponents. I may not get the best score in a game, but I often keep the best opponent from getting a high score in the process. When playing a computer opponent I prefer them to be intelligent. Too easy and the challenge is gone. However if the opponent is challenging because they play smart, or switch strategies then the game becomes much more interesting.

2.5.4) Are you more interested in story or gameplay?

Both? I feel that great games can bring both to the table in equal measure. That being said I have been known to enjoy games that have very little in the story department that have great gameplay. Such games to me are viewed in the same way as I view a special effects extravaganza of a movie. I don't play them for the story I go to not pay attention and still have fun.

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 played Wesnoth since my brother introduced me to it when I was in high school(I believe I started playing in 2008). I generally lean towards singleplayer.

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


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.

Fluent in English (native speaker)

3.2) What spoken languages are you fluent in?

Just English

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

Yes, I generally am able to make friends.

3.4) Do you give constructive advice?


3.5) Do you receive advice well?

Yes, I try to take it seriously as someone telling me how I can improve myself or my work.

3.6) Are you good at sorting useful criticisms from useless ones?

I believe so.

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 wants?

I like to have a good idea of what I will be doing, but I also believe that that can only get you so far. As such I am not afraid to take a risk when coding something. If it isn't satisfactory, then I still gain experience and learn more about what is needed.

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 want to allow Wesnoth to support sprite sheets. I want to concentrate on the code necessary to allow this. While the GUI sprite sheet tool is important, it is useless without the supporting code in the Wesnoth code base.

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


4.3) Why did you choose this project?

I choose this project because one of the most interesting classes I have taken so far in my schooling has been Computer Graphics. While the focus was on OpenGL and 3D graphics, the whole field interests me. I feel like being involved in this project would be a learning opportunity as well as a fun expansion on my current experience.

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

See above timeline

4.5) Include as much technical detail about your implementation as you can

See above proposal

4.6) What do you expect to gain from this project?

I am hoping to gain quite a lot from this project. I want to be able to contribute to one of my favorite games, be able to gain experience in game development, and gain experience for the future.

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

Nothing, because I would probably stick around anyway.

5) Practical considerations

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

I am familiar with C++

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

Generally I use Visual Studio 2008 and Eclipse. Both are used currently since many of my classes are taught with Visual Studio.

5.3) What programming languages are you fluent in?

Fluent in C++ with some Java experience. Also experience with PHP.

5.4) Would you mind talking with your mentor on telephone / internet phone?

That is not a problem with me. Either my phone or Skype or another internet phone system works for me.

This page was last edited on 21 March 2013, at 03:55.