<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aishiko</id>
	<title>The Battle for Wesnoth Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aishiko"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/Special:Contributions/Aishiko"/>
	<updated>2026-04-23T13:19:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=55061</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=55061"/>
		<updated>2014-05-23T01:27:27Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
Pull Request 119&lt;br /&gt;
Pull Request 130&lt;br /&gt;
===Proof of Concept===&lt;br /&gt;
https://github.com/Aishiko/getSprite&lt;br /&gt;
&lt;br /&gt;
This is not quite done, its still rigid and inflexiable to meet our artists needs, however that can be fixed.  It also doesn't send an error code and needs to be tested.  It relies on all the images in row being the same height and each column being the same width was the plan but it really should be fine with varying widths I think.  All the images need to be pressed right up to each other, with borders of 1 pixel in width all around them.  The first row needs to be blank put for pixel 0,0 for that contains the border colour and then Row1 HAS to start at pixel 1,0.  Otherwise its fine.  Ohhh and all it does is FIND the images and returns a std::vector&amp;lt;SDL_Rect&amp;gt; it doesn't actually do anything with them, no handling of malformed sheets, and no error codes or logging (though there is a place for it it just currently contains a comment).&lt;br /&gt;
&lt;br /&gt;
However I see this as becoming a powerful tool that devs that can compile wesnoth can compile as well, and as a standalone, it means the artists that don't mess with the code do not have to compile wesnoth once fully implemented.&lt;br /&gt;
&lt;br /&gt;
==Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==The Plan==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
Each sprite will be returned as a SDL_Rect in a vector, that vector will be named whatever the unit is.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 $Elvish_Sorceress[1~10,1,2]:[80*5,100*2,80*5] or &amp;lt;Elvish_Sorceress&amp;gt;[1~10,1,2]:[80*5,100*2,80*5]&lt;br /&gt;
Almost like a normal call but to a single image file instead of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;image&amp;gt;[1~30][80*5,100*2,80*5]&amp;quot;, which expands to &amp;lt;image&amp;gt;1:[80],&amp;lt;image&amp;gt;2:[80],&amp;lt;image&amp;gt;3:[80],etc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 $image[2.1~2.10,2.1~2.2]:[80*5,100*2,80*5]&lt;br /&gt;
This should take the current&lt;br /&gt;
markup language and merely extand it to allow for calling an SDL_Rect from the spritesheet.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated Autogenerated Spritesheet WML added to each.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
===Making WML Painless===&lt;br /&gt;
I'll implement a standalone tool that will take 1 or 2 inputs, if 1 just the spritesheet it will then find each image and ask the user to define the image (attack_1 etc) it will then generate a barebones spritesheet config file to be appended to the unit.cfg.  If 2 it will take the old unit.cfg, and look for NEW images and REMOVED images, and only add or remove those changed so it doesn't require the user to double check or change image numbers by 1 or 2 everywhere to make adding/removing/changing an image so painful they don't want to do it.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows &amp;amp; Macs)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
* Start on the program to generate the WML spritesheet Code.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
* Continue on the program to generate the WML spritesheet Code, and have ready to go.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;br /&gt;
&lt;br /&gt;
==Current Thoughts==&lt;br /&gt;
To Happygrue&lt;br /&gt;
&lt;br /&gt;
In implementing the spritesheets I am considering storing a vector with the SDC_Rect info (IE {x,y,h,w}) so that when image 5 is needed it pulls out element(5) or element(-1) if the sprites are numbered from 1 instead of 0.  My plans for making this work are to create a spritesheet namespace and then when pulling out an image pass the surface (res) into the images_ cache where it will be handled as if it where a single image taken from the disk.  In this way I won't have to change anything about how the images are handled for zooming, colouring, etc.  But I'm finding that I really should work on getting the WML and parsing of the lua files done first.&lt;br /&gt;
&lt;br /&gt;
I think going with the following tags would be a good way to go;&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
    File=file_path/name.png&lt;br /&gt;
    [Sprite]&lt;br /&gt;
        SpriteID=1&lt;br /&gt;
        SpriteName=&amp;quot;Attack_1&amp;quot;		this an optional feild&lt;br /&gt;
        Location=[x,y,w,h]&lt;br /&gt;
    [/Sprite]&lt;br /&gt;
    -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
This differs from the proposal in that the [Image] tag already exists for another purpose, so I changed it to Sprite and changed the rest to match (uniformity and descriptive too) and Cooridante/Location now basically returns an SDL_Rect.  [Frame] tags are also already taken in the animation section.&lt;br /&gt;
&lt;br /&gt;
I think that for this to work I need to get the basics in place for the following by mid June.&lt;br /&gt;
 1) working cache&lt;br /&gt;
 	a) load the spritesheet into the proper cache&lt;br /&gt;
 	b) extract and put an unscaled copy into the correct cache (unscaled I think)&lt;br /&gt;
 2) wml&lt;br /&gt;
 	a) spritesheet tags &lt;br /&gt;
 	b) spritesheet animation syntax&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54754</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54754"/>
		<updated>2014-04-15T01:23:50Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Phase Two */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
Pull Request 119&lt;br /&gt;
Pull Request 130&lt;br /&gt;
===Proof of Concept===&lt;br /&gt;
https://github.com/Aishiko/getSprite&lt;br /&gt;
&lt;br /&gt;
This is not quite done, its still rigid and inflexiable to meet our artists needs, however that can be fixed.  It also doesn't send an error code and needs to be tested.  It relies on all the images in row being the same height and each column being the same width was the plan but it really should be fine with varying widths I think.  All the images need to be pressed right up to each other, with borders of 1 pixel in width all around them.  The first row needs to be blank put for pixel 0,0 for that contains the border colour and then Row1 HAS to start at pixel 1,0.  Otherwise its fine.  Ohhh and all it does is FIND the images and returns a std::vector&amp;lt;SDL_Rect&amp;gt; it doesn't actually do anything with them, no handling of malformed sheets, and no error codes or logging (though there is a place for it it just currently contains a comment).&lt;br /&gt;
&lt;br /&gt;
However I see this as becoming a powerful tool that devs that can compile wesnoth can compile as well, and as a standalone, it means the artists that don't mess with the code do not have to compile wesnoth once fully implemented.&lt;br /&gt;
&lt;br /&gt;
==Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==The Plan==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
Each sprite will be returned as a SDL_Rect in a vector, that vector will be named whatever the unit is.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 $Elvish_Sorceress[1~10,1,2]:[80*5,100*2,80*5] or &amp;lt;Elvish_Sorceress&amp;gt;[1~10,1,2]:[80*5,100*2,80*5]&lt;br /&gt;
Almost like a normal call but to a single image file instead of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;image&amp;gt;[1~30][80*5,100*2,80*5]&amp;quot;, which expands to &amp;lt;image&amp;gt;1:[80],&amp;lt;image&amp;gt;2:[80],&amp;lt;image&amp;gt;3:[80],etc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 $image[2.1~2.10,2.1~2.2]:[80*5,100*2,80*5]&lt;br /&gt;
This should take the current&lt;br /&gt;
markup language and merely extand it to allow for calling an SDL_Rect from the spritesheet.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated Autogenerated Spritesheet WML added to each.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
===Making WML Painless===&lt;br /&gt;
I'll implement a standalone tool that will take 1 or 2 inputs, if 1 just the spritesheet it will then find each image and ask the user to define the image (attack_1 etc) it will then generate a barebones spritesheet config file to be appended to the unit.cfg.  If 2 it will take the old unit.cfg, and look for NEW images and REMOVED images, and only add or remove those changed so it doesn't require the user to double check or change image numbers by 1 or 2 everywhere to make adding/removing/changing an image so painful they don't want to do it.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows &amp;amp; Macs)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
* Start on the program to generate the WML spritesheet Code.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
* Continue on the program to generate the WML spritesheet Code, and have ready to go.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54753</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54753"/>
		<updated>2014-04-15T00:43:30Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* 13 Week Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
Pull Request 119&lt;br /&gt;
Pull Request 130&lt;br /&gt;
===Proof of Concept===&lt;br /&gt;
https://github.com/Aishiko/getSprite&lt;br /&gt;
&lt;br /&gt;
This is not quite done, its still rigid and inflexiable to meet our artists needs, however that can be fixed.  It also doesn't send an error code and needs to be tested.  It relies on all the images in row being the same height and each column being the same width was the plan but it really should be fine with varying widths I think.  All the images need to be pressed right up to each other, with borders of 1 pixel in width all around them.  The first row needs to be blank put for pixel 0,0 for that contains the border colour and then Row1 HAS to start at pixel 1,0.  Otherwise its fine.  Ohhh and all it does is FIND the images and returns a std::vector&amp;lt;SDL_Rect&amp;gt; it doesn't actually do anything with them, no handling of malformed sheets, and no error codes or logging (though there is a place for it it just currently contains a comment).&lt;br /&gt;
&lt;br /&gt;
However I see this as becoming a powerful tool that devs that can compile wesnoth can compile as well, and as a standalone, it means the artists that don't mess with the code do not have to compile wesnoth once fully implemented.&lt;br /&gt;
&lt;br /&gt;
==Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==The Plan==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
Each sprite will be returned as a SDL_Rect in a vector, that vector will be named whatever the unit is.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 $Elvish_Sorceress[1~10,1,2]:[80*5,100*2,80*5] or &amp;lt;Elvish_Sorceress&amp;gt;[1~10,1,2]:[80*5,100*2,80*5]&lt;br /&gt;
Almost like a normal call but to a single image file instead of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;image&amp;gt;[1~30][80*5,100*2,80*5]&amp;quot;, which expands to &amp;lt;image&amp;gt;1:[80],&amp;lt;image&amp;gt;2:[80],&amp;lt;image&amp;gt;3:[80],etc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 $image[2.1~2.10,2.1~2.2]:[80*5,100*2,80*5]&lt;br /&gt;
This should take the current&lt;br /&gt;
markup language and merely extand it to allow for calling an SDL_Rect from the spritesheet.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated Autogenerated Spritesheet WML added to each.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
===Making WML Painless===&lt;br /&gt;
I'll implement a standalone tool that will take 1 or 2 inputs, if 1 just the spritesheet it will then find each image and ask the user to define the image (attack_1 etc) it will then generate a barebones spritesheet config file to be appended to the unit.cfg.  If 2 it will take the old unit.cfg, and look for NEW images and REMOVED images, and only add or remove those changed so it doesn't require the user to double check or change image numbers by 1 or 2 everywhere to make adding/removing/changing an image so painful they don't want to do it.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
* Start on the program to generate the WML spritesheet Code.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
* Continue on the program to generate the WML spritesheet Code, and have ready to go.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54752</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54752"/>
		<updated>2014-04-15T00:42:29Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* 13 Week Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
Pull Request 119&lt;br /&gt;
Pull Request 130&lt;br /&gt;
===Proof of Concept===&lt;br /&gt;
https://github.com/Aishiko/getSprite&lt;br /&gt;
&lt;br /&gt;
This is not quite done, its still rigid and inflexiable to meet our artists needs, however that can be fixed.  It also doesn't send an error code and needs to be tested.  It relies on all the images in row being the same height and each column being the same width was the plan but it really should be fine with varying widths I think.  All the images need to be pressed right up to each other, with borders of 1 pixel in width all around them.  The first row needs to be blank put for pixel 0,0 for that contains the border colour and then Row1 HAS to start at pixel 1,0.  Otherwise its fine.  Ohhh and all it does is FIND the images and returns a std::vector&amp;lt;SDL_Rect&amp;gt; it doesn't actually do anything with them, no handling of malformed sheets, and no error codes or logging (though there is a place for it it just currently contains a comment).&lt;br /&gt;
&lt;br /&gt;
However I see this as becoming a powerful tool that devs that can compile wesnoth can compile as well, and as a standalone, it means the artists that don't mess with the code do not have to compile wesnoth once fully implemented.&lt;br /&gt;
&lt;br /&gt;
==Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==The Plan==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
Each sprite will be returned as a SDL_Rect in a vector, that vector will be named whatever the unit is.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 $Elvish_Sorceress[1~10,1,2]:[80*5,100*2,80*5] or &amp;lt;Elvish_Sorceress&amp;gt;[1~10,1,2]:[80*5,100*2,80*5]&lt;br /&gt;
Almost like a normal call but to a single image file instead of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;image&amp;gt;[1~30][80*5,100*2,80*5]&amp;quot;, which expands to &amp;lt;image&amp;gt;1:[80],&amp;lt;image&amp;gt;2:[80],&amp;lt;image&amp;gt;3:[80],etc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 $image[2.1~2.10,2.1~2.2]:[80*5,100*2,80*5]&lt;br /&gt;
This should take the current&lt;br /&gt;
markup language and merely extand it to allow for calling an SDL_Rect from the spritesheet.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated Autogenerated Spritesheet WML added to each.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
===Making WML Painless===&lt;br /&gt;
I'll implement a standalone tool that will take 1 or 2 inputs, if 1 just the spritesheet it will then find each image and ask the user to define the image (attack_1 etc) it will then generate a barebones spritesheet config file to be appended to the unit.cfg.  If 2 it will take the old unit.cfg, and look for NEW images and REMOVED images, and only add or remove those changed so it doesn't require the user to double check or change image numbers by 1 or 2 everywhere to make adding/removing/changing an image so painful they don't want to do it.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
* Start on the program to generate the WML spritesheet Code.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
* Continue on the program to generate the WML spritesheet Code, and have ready to go.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
* Start on the program to generate the WML spritesheet Code.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
* Continue on the program to generate the WML spritesheet Code, and have ready to go.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54751</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54751"/>
		<updated>2014-04-14T22:44:09Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Proof of Concept */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
Pull Request 119&lt;br /&gt;
Pull Request 130&lt;br /&gt;
===Proof of Concept===&lt;br /&gt;
https://github.com/Aishiko/getSprite&lt;br /&gt;
&lt;br /&gt;
This is not quite done, its still rigid and inflexiable to meet our artists needs, however that can be fixed.  It also doesn't send an error code and needs to be tested.  It relies on all the images in row being the same height and each column being the same width was the plan but it really should be fine with varying widths I think.  All the images need to be pressed right up to each other, with borders of 1 pixel in width all around them.  The first row needs to be blank put for pixel 0,0 for that contains the border colour and then Row1 HAS to start at pixel 1,0.  Otherwise its fine.  Ohhh and all it does is FIND the images and returns a std::vector&amp;lt;SDL_Rect&amp;gt; it doesn't actually do anything with them, no handling of malformed sheets, and no error codes or logging (though there is a place for it it just currently contains a comment).&lt;br /&gt;
&lt;br /&gt;
However I see this as becoming a powerful tool that devs that can compile wesnoth can compile as well, and as a standalone, it means the artists that don't mess with the code do not have to compile wesnoth once fully implemented.&lt;br /&gt;
&lt;br /&gt;
==Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==The Plan==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
Each sprite will be returned as a SDL_Rect in a vector, that vector will be named whatever the unit is.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 $Elvish_Sorceress[1~10,1,2]:[80*5,100*2,80*5] or &amp;lt;Elvish_Sorceress&amp;gt;[1~10,1,2]:[80*5,100*2,80*5]&lt;br /&gt;
Almost like a normal call but to a single image file instead of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;image&amp;gt;[1~30][80*5,100*2,80*5]&amp;quot;, which expands to &amp;lt;image&amp;gt;1:[80],&amp;lt;image&amp;gt;2:[80],&amp;lt;image&amp;gt;3:[80],etc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 $image[2.1~2.10,2.1~2.2]:[80*5,100*2,80*5]&lt;br /&gt;
This should take the current&lt;br /&gt;
markup language and merely extand it to allow for calling an SDL_Rect from the spritesheet.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated Autogenerated Spritesheet WML added to each.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
===Making WML Painless===&lt;br /&gt;
I'll implement a standalone tool that will take 1 or 2 inputs, if 1 just the spritesheet it will then find each image and ask the user to define the image (attack_1 etc) it will then generate a barebones spritesheet config file to be appended to the unit.cfg.  If 2 it will take the old unit.cfg, and look for NEW images and REMOVED images, and only add or remove those changed so it doesn't require the user to double check or change image numbers by 1 or 2 everywhere to make adding/removing/changing an image so painful they don't want to do it.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54750</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54750"/>
		<updated>2014-04-14T22:35:52Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Patches==&lt;br /&gt;
Pull Request 119&lt;br /&gt;
Pull Request 130&lt;br /&gt;
===Proof of Concept===&lt;br /&gt;
https://github.com/Aishiko/getSprite&lt;br /&gt;
&lt;br /&gt;
This is not quite done, its still rigid and inflexiable to meet our artists needs, however that can be fixed.  It also doesn't send an error code and needs to be tested.  It relies on all the images in row being the same height and each column being the same width was the plan but it really should be fine with varying widths I think.  All the images need to be pressed right up to each other, with borders of 1 pixel in width all around them.  The first row needs to be blank put for pixel 0,0 for that contains the border colour and then Row1 HAS to start at pixel 1,0.  Otherwise its fine.  Ohhh and all it does is FIND the images and returns a std::vector&amp;lt;SDL_Rect&amp;gt; it doesn't actually do anything with them, no handling of malformed sheets, and no error codes or logging (though there is a place for it it just currently contains a comment).&lt;br /&gt;
&lt;br /&gt;
However I see this as becoming a powerful tool that dev that can compile wesnoth can compile as well, and as a standalone it means the artists that don't mess with the code do not have to compile wesnoth once fully implemented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==The Plan==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
Each sprite will be returned as a SDL_Rect in a vector, that vector will be named whatever the unit is.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 $Elvish_Sorceress[1~10,1,2]:[80*5,100*2,80*5] or &amp;lt;Elvish_Sorceress&amp;gt;[1~10,1,2]:[80*5,100*2,80*5]&lt;br /&gt;
Almost like a normal call but to a single image file instead of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;image&amp;gt;[1~30][80*5,100*2,80*5]&amp;quot;, which expands to &amp;lt;image&amp;gt;1:[80],&amp;lt;image&amp;gt;2:[80],&amp;lt;image&amp;gt;3:[80],etc&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 $image[2.1~2.10,2.1~2.2]:[80*5,100*2,80*5]&lt;br /&gt;
This should take the current&lt;br /&gt;
markup language and merely extand it to allow for calling an SDL_Rect from the spritesheet.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated Autogenerated Spritesheet WML added to each.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
===Making WML Painless===&lt;br /&gt;
I'll implement a standalone tool that will take 1 or 2 inputs, if 1 just the spritesheet it will then find each image and ask the user to define the image (attack_1 etc) it will then generate a barebones spritesheet config file to be appended to the unit.cfg.  If 2 it will take the old unit.cfg, and look for NEW images and REMOVED images, and only add or remove those changed so it doesn't require the user to double check or change image numbers by 1 or 2 everywhere to make adding/removing/changing an image so painful they don't want to do it.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54309</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54309"/>
		<updated>2014-03-30T23:15:20Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* WML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like a normal call but to a single image file inste4ad of several files.  Out of the Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 are called for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54308</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54308"/>
		<updated>2014-03-30T23:09:43Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Goals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet:&lt;br /&gt;
&lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like normal to say Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54307</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54307"/>
		<updated>2014-03-30T23:09:13Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like normal to say Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54306</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54306"/>
		<updated>2014-03-30T23:08:57Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Problems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
&lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like normal to say Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54305</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54305"/>
		<updated>2014-03-30T22:30:22Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like normal to say Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Package Name&lt;br /&gt;
|Reason&lt;br /&gt;
|Status&lt;br /&gt;
|-&lt;br /&gt;
|SDL&lt;br /&gt;
|Needed for getting the colour information&lt;br /&gt;
|Plan A required otherwise Not needed&lt;br /&gt;
|-&lt;br /&gt;
|Boost&lt;br /&gt;
|Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
|Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54304</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54304"/>
		<updated>2014-03-30T22:26:52Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* WML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
 image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like normal to say Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54303</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54303"/>
		<updated>2014-03-30T22:24:45Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===Cache===&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
==Plan A==&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
===WML===&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
==Plan B==&lt;br /&gt;
===WML===&lt;br /&gt;
Each Spritesheet will have a Spritesheet set of tags in the unit config file, it will look something like:&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Upper_X=x&lt;br /&gt;
         Upper_Y=y&lt;br /&gt;
         Lower_X=x&lt;br /&gt;
         Lower_Y=y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
OR&lt;br /&gt;
 [Spritesheet]&lt;br /&gt;
     File=file_path/name.png&lt;br /&gt;
     [Image]&lt;br /&gt;
         ImageID=1&lt;br /&gt;
         ImageName=&amp;quot;Attack_1&amp;quot;&lt;br /&gt;
         Coordinates=[x,y,x,y]  --upper followed by lower x,y&lt;br /&gt;
     [/Image]&lt;br /&gt;
     -- More Images here&lt;br /&gt;
 [/Spritesheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each animation sequence called by doing a call like:&lt;br /&gt;
 image=&amp;quot;units/Elvish_Sorceress[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
Almost like normal to say Elvish_Sorceress.png, images 1-10 and then 1 and finally 2 for the attack sequence in this case.&lt;br /&gt;
&lt;br /&gt;
===Spritesheet Details===&lt;br /&gt;
Each Spritesheet will have each unit outlined in a box (Colour and size matters not in this version unless we want to implement a side program that will parse out the correct information for the artists.)  everytime there is an added frame the artist just needs to add the correct information as above to add it in, they will not have to be in any sort of order IE Image 1 can be beside Image 50.  There is the added overhead on the artist to make sure they add the right Xs and Ys to make it work.  However this way has less processing overhead to make it work and see more positive gains from moving to spritesheets.&lt;br /&gt;
&lt;br /&gt;
On loading an image if the [SpriteSheet] tags are found then it will automatically check for each called image within the spritesheet's definition pulling out the requried frames as needed.  This method will require no more parsing overhead then the usual requirements of parsing the data in the config (IE no need to &amp;quot;scan&amp;quot; the image file looking for grids or borders or anything like that.  The spritesheet can be packed as tightly as desired by the artist, and even notes left in the file, such as a block of text that says &amp;quot;Attack animation here&amp;quot;.  Each unit can have more then 1 spritesheet however, they can only have 1 image with an ImageID, this is unique to the unit not the spritesheet file.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
==Deliverables==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Status&lt;br /&gt;
|Requirement Level&lt;br /&gt;
|Number ID&lt;br /&gt;
|Goal Defined&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1A&lt;br /&gt;
|Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|1B &lt;br /&gt;
|dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|2&lt;br /&gt;
|Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3A&lt;br /&gt;
|Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|3B&lt;br /&gt;
|Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!&lt;br /&gt;
|3C&lt;br /&gt;
|Nor a Fixed grid size that holds each frame in its border.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan A Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Plan B Only!  Optional&lt;br /&gt;
|3D &lt;br /&gt;
|Not require the borders be a particular width.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|4 &lt;br /&gt;
|WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Required&lt;br /&gt;
|5 &lt;br /&gt;
|No negative or negible impact on loading times&lt;br /&gt;
|}&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54302</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54302"/>
		<updated>2014-03-30T21:41:58Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plan A===&lt;br /&gt;
====WML Phase One====&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
====Cache====&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Plan B===&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
#* Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
#* dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
#* Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
#* Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
#* Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
#* Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54301</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54301"/>
		<updated>2014-03-30T21:40:24Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* 13 Week Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
====WML Phase One====&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
====Cache====&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
#* Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
#* dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
#* Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
#* Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
#* Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
#* Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Start/End_Dates===                                 &lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|Next&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54300</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54300"/>
		<updated>2014-03-30T21:37:18Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* 13 Week Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
====WML Phase One====&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
====Cache====&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
#* Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
#* dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
#* Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
#* Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
#* Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
#* Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
===Status===&lt;br /&gt;
|&lt;br /&gt;
===Dates===&lt;br /&gt;
|&lt;br /&gt;
===Goals===&lt;br /&gt;
|-&lt;br /&gt;
|Current&lt;br /&gt;
|March 20 - April 20:&lt;br /&gt;
| &lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|April 21 - May 18:&lt;br /&gt;
|&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|May 19 - June 1: &lt;br /&gt;
|&lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 1 - 15:	&lt;br /&gt;
|&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 16 - 29:&lt;br /&gt;
|&lt;br /&gt;
* Implement new WML snytax for the spritesheets.  &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 23 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|June 30 - July 13:&lt;br /&gt;
|&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that broke.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 14 - 27:	&lt;br /&gt;
|&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|July 28 - Aug 10:	&lt;br /&gt;
|&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/python script to convert all the images to spritesheets.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 3:		&lt;br /&gt;
|&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 11 - 17:	&lt;br /&gt;
|&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Aug 22:		&lt;br /&gt;
|&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
|}&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54246</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54246"/>
		<updated>2014-03-26T15:13:21Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Deliverables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
====WML Phase One====&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
====Cache====&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
#* Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
#* dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
#* Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
#* Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
#* Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
#* Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more&lt;br /&gt;
patches (at least one every 1-2 weeks that is some bug or feature request,&lt;br /&gt;
something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and&lt;br /&gt;
encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20&lt;br /&gt;
- April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold&lt;br /&gt;
all the sprite sheets once loaded.  It will have to be felxible (in size and&lt;br /&gt;
what's loaded) and perstant.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need&lt;br /&gt;
right now.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement new WML snytax for the spritesheets.&lt;br /&gt;
parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so&lt;br /&gt;
that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that&lt;br /&gt;
broke.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure&lt;br /&gt;
its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't&lt;br /&gt;
expect and only a fool doesn't plan for the worst, so that is what this is, this&lt;br /&gt;
is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take&lt;br /&gt;
longer or where I work on optional extended tasks like writing a shell/pythonn&lt;br /&gt;
script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor&lt;br /&gt;
fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54241</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54241"/>
		<updated>2014-03-26T14:49:09Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* WML Phase One */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
====WML Phase One====&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
I envision it to be more like one of these to work as with a spritesheet:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another option is to do:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;25,35,77,107&amp;gt;.png:[80]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In this case we would call it with the x,y of the 2 corners need to pull it out.&lt;br /&gt;
This might be a good starting point for getting them to just work however I would still wish to get it more streamlined and less prone to errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Elvish Sorceress example the first [] set would translate out to: row 4, columns 1-4, and the second set would stay the timing with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
====Cache====&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
# Properly working Spritesheet cache to speed up loading and elimnate glithy and&lt;br /&gt;
laging animations do to disk access times.&lt;br /&gt;
## dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on&lt;br /&gt;
for each frame.&lt;br /&gt;
# Spritesheets that are flexible and easy for artists and WML users to&lt;br /&gt;
implement.&lt;br /&gt;
## Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
## Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
## Not require to have the gridlines or the borders be a particular width&lt;br /&gt;
(optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or&lt;br /&gt;
prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more&lt;br /&gt;
patches (at least one every 1-2 weeks that is some bug or feature request,&lt;br /&gt;
something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and&lt;br /&gt;
encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20&lt;br /&gt;
- April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold&lt;br /&gt;
all the sprite sheets once loaded.  It will have to be felxible (in size and&lt;br /&gt;
what's loaded) and perstant.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need&lt;br /&gt;
right now.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement new WML snytax for the spritesheets.&lt;br /&gt;
parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so&lt;br /&gt;
that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that&lt;br /&gt;
broke.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure&lt;br /&gt;
its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't&lt;br /&gt;
expect and only a fool doesn't plan for the worst, so that is what this is, this&lt;br /&gt;
is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take&lt;br /&gt;
longer or where I work on optional extended tasks like writing a shell/pythonn&lt;br /&gt;
script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor&lt;br /&gt;
fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54240</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54240"/>
		<updated>2014-03-26T14:28:46Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll&lt;br /&gt;
make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can&lt;br /&gt;
make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* Not all units and terrain are 72x72&lt;br /&gt;
* Adding a boarder around each image to make it easier for the&lt;br /&gt;
artists to see what sort of space they have to work with will make taking the&lt;br /&gt;
current images and converting them a bit harder as well as creating a script to&lt;br /&gt;
convert them (which remains a soft goal, ie if I have to do it AFTER the summer,&lt;br /&gt;
I'll do that.)  Stupid perfectionist leanings, at least for what I think of to&lt;br /&gt;
get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the&lt;br /&gt;
average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  I'll need a spritesheet for this, preferably a big&lt;br /&gt;
one.  Through this whole process if it breaks it should only break on the sprite&lt;br /&gt;
sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not&lt;br /&gt;
used in any of the sprites (say a shade of pink) this RGBA colour is a Primary&lt;br /&gt;
Key, it will lay out a grid of equal sized areas within our spritesheet.  Then&lt;br /&gt;
each of those grid squares (or rectangles) each frame/image has a second border&lt;br /&gt;
of colour, say a different shade of pink.  Each unit's spritesheet will then be&lt;br /&gt;
read at loading into the cache, each grid square will be searched for an image&lt;br /&gt;
if found it will be loaded into an object that will contain the following&lt;br /&gt;
information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects&lt;br /&gt;
in it that give the information about each frame (given above we'll call it a&lt;br /&gt;
SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its&lt;br /&gt;
SpriteFrameAddress Objects will be stored in the same cache as the spritesheet&lt;br /&gt;
itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
====WML Phase One====&lt;br /&gt;
The current syntax is:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&lt;br /&gt;
&amp;quot;&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress&amp;lt;2.1~2.10,2.1~2.2&amp;gt;.png:[80*5,100*2,80*5]&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms,&lt;br /&gt;
100ms, and then 130ms for the images in order.  This should take the current&lt;br /&gt;
markup language and merely extand it to allow for rows and columns be the&lt;br /&gt;
callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of&lt;br /&gt;
the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
4.5 would be 4th row 5th column.  I would take the current syntax and modify it&lt;br /&gt;
slightly to work with rows and columns.  The block of [4.1~4.4] might be&lt;br /&gt;
&amp;lt;4.1~4.4&amp;gt; depending on whether or not its more readable.&lt;br /&gt;
&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll&lt;br /&gt;
look at the generated SpriteAddressObject for the needed SpriteFrameAddresses&lt;br /&gt;
This could be extended to so there is a SpriteAnimation object that will read&lt;br /&gt;
the configs for the unit and have say the Attack Animation instead of calling&lt;br /&gt;
each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all&lt;br /&gt;
the Row, Column, and X,Y data for each image might be all that is needed and&lt;br /&gt;
will work fine.  The idea of holding a config of where each image is located and&lt;br /&gt;
saving that would remove the overhead of searching everytime a frame is called. &lt;br /&gt;
These frames would then be passed to the normal cache used and stored there,&lt;br /&gt;
until they expire.&lt;br /&gt;
&lt;br /&gt;
====Cache====&lt;br /&gt;
In cache the spritesheets need to be parsed, either all at once or only those&lt;br /&gt;
grids that are currently needed and the found corners saved as above.  When an&lt;br /&gt;
image is needed from a spritesheet it will gotten out of the sheet and then&lt;br /&gt;
passed into the cache that will using and holding that image such as the&lt;br /&gt;
scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until&lt;br /&gt;
the game is exited completely or the cache is full the oldest referenced image&lt;br /&gt;
will be dropped.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
====Phase One====&lt;br /&gt;
I will create a test program that will allow me to make sure that the sprites&lt;br /&gt;
are being parsed properly.  This program will be intergrated and become the&lt;br /&gt;
spritesheet core of the program.  Having this out by itself will allow me to see&lt;br /&gt;
what sort of difference there is when parsing just the needed gridboxes and the&lt;br /&gt;
whole sheet.  This will allow me to come up with some decent error messages for&lt;br /&gt;
malformed sprite boxes.&lt;br /&gt;
&lt;br /&gt;
====Phase Two====&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what&lt;br /&gt;
sort of performance changes I can detect during the course of getting things&lt;br /&gt;
working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB&lt;br /&gt;
RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not&lt;br /&gt;
test on that and I only have Windows in a VM, so most testing will be done under&lt;br /&gt;
Linux I'll depend on the various developers that use windows to let me know how&lt;br /&gt;
it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
# Properly working Spritesheet cache to speed up loading and elimnate glithy and&lt;br /&gt;
laging animations do to disk access times.&lt;br /&gt;
## dynamic so that low mem devices are not adversely effected.&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on&lt;br /&gt;
for each frame.&lt;br /&gt;
# Spritesheets that are flexible and easy for artists and WML users to&lt;br /&gt;
implement.&lt;br /&gt;
## Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
## Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
## Not require to have the gridlines or the borders be a particular width&lt;br /&gt;
(optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or&lt;br /&gt;
prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more&lt;br /&gt;
patches (at least one every 1-2 weeks that is some bug or feature request,&lt;br /&gt;
something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and&lt;br /&gt;
encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20&lt;br /&gt;
- April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here I'll add a spritesheets cache it will be the cache that will hold&lt;br /&gt;
all the sprite sheets once loaded.  It will have to be felxible (in size and&lt;br /&gt;
what's loaded) and perstant.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need&lt;br /&gt;
right now.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement new WML snytax for the spritesheets.&lt;br /&gt;
parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so&lt;br /&gt;
that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets that&lt;br /&gt;
broke.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure&lt;br /&gt;
its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't&lt;br /&gt;
expect and only a fool doesn't plan for the worst, so that is what this is, this&lt;br /&gt;
is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take&lt;br /&gt;
longer or where I work on optional extended tasks like writing a shell/pythonn&lt;br /&gt;
script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor&lt;br /&gt;
fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
 Week  1:		May 19 to May 25&lt;br /&gt;
 Week  2:		May 26 to June 1&lt;br /&gt;
 Week  3:		June 2 to June 8&lt;br /&gt;
 Week  4:		June 9 to June 15&lt;br /&gt;
 Week  5:		June 16 to June 22&lt;br /&gt;
 Week  6:		June 23 to June 29&lt;br /&gt;
 Week  7:		June 30 to July 6&lt;br /&gt;
 Week  8:		July 6 to July 13&lt;br /&gt;
 Week  9:		July 14 to July 20&lt;br /&gt;
 Week 10:		July 21 to July 27&lt;br /&gt;
 Week 11:		July 28 to August 3&lt;br /&gt;
 Week 12:		August 4 to August 10&lt;br /&gt;
 Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no&lt;br /&gt;
particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to&lt;br /&gt;
http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details&lt;br /&gt;
that effect you as an user!  And only those details, and thank you for helping&lt;br /&gt;
me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54202</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54202"/>
		<updated>2014-03-23T19:20:26Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* First Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break anything exisiting.&lt;br /&gt;
&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
====SpriteSheets Phase One====&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase Two====&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will become Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
====Cache Phase One====&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until the game is exited completely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Cache Phase Two====&lt;br /&gt;
At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what sort of performance changes I can detect during the course of getting things working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not test on that and I only have Windows in a VM, so most testing will be done under Linux I'll depend on the various developers that use windows to let me know how it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
# Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
## dynamic so that low mem devices are not adversely effected.  (Likely by implementing option A above).&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
# Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
## Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
## Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
## Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54201</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54201"/>
		<updated>2014-03-23T19:17:57Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# Gameplay&lt;br /&gt;
#* Units&lt;br /&gt;
#* Terrain&lt;br /&gt;
#* etc&lt;br /&gt;
# Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# Reuse as much as the existing syntax as possible&lt;br /&gt;
# Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break at all.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
&lt;br /&gt;
====SpriteSheets Phase One====&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase Two====&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will become Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
====Cache Phase One====&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.   The sheets will remained cached until the game is exited completely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Cache Phase Two====&lt;br /&gt;
At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what sort of performance changes I can detect during the course of getting things working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not test on that and I only have Windows in a VM, so most testing will be done under Linux I'll depend on the various developers that use windows to let me know how it is affecting the running under Windows)&lt;br /&gt;
&lt;br /&gt;
===Deliverables===&lt;br /&gt;
# Properly working Spritesheet cache to speed up loading and elimnate glithy and laging animations do to disk access times.&lt;br /&gt;
## dynamic so that low mem devices are not adversely effected.  (Likely by implementing option A above).&lt;br /&gt;
# Properly parse spritesheets and quickly be able to pass that information on for each frame.&lt;br /&gt;
# Spritesheets that are flexible and easy for artists and WML users to implement.&lt;br /&gt;
## Spritesheets that do not have a fixed size for every frame they hold.&lt;br /&gt;
## Nor a Fixed grid size that holds each frame in its borderl.&lt;br /&gt;
## Not require to have the gridlines or the borders be a particular width (optional, could be axed for performance reasons).&lt;br /&gt;
# WML syntax for Spritesheets that is not long, complex, hard to understand, or prone to errors.&lt;br /&gt;
# No negative or negible impact on loading times&lt;br /&gt;
&lt;br /&gt;
==Packages Required==&lt;br /&gt;
 SDL:    Needed for getting the colour information&lt;br /&gt;
 Boost:  Might be able to provide a performance boost (no pun intended)&lt;br /&gt;
&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a spritesheets cache it will be the cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54187</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54187"/>
		<updated>2014-03-23T05:15:14Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# 			Gameplay&lt;br /&gt;
#* 				Units&lt;br /&gt;
#* 				Terrain&lt;br /&gt;
#* 				etc&lt;br /&gt;
# 			Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# 		Reuse as much as the existing syntax as possible&lt;br /&gt;
# 		Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# 		Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break at all.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase One====&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase Two====&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will become Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
====Cache Phase One====&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
	&lt;br /&gt;
When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.&lt;br /&gt;
&lt;br /&gt;
===Testing===&lt;br /&gt;
In addition to creating unit tests, I'll try out various hardware to see what sort of performance changes I can detect during the course of getting things working.  I'll test on a Quad-core with 8 or more GB RAM, a Dual-core with 4GB RAM, and a 32bit single core with 1-4 GB RAM (I don't have any Macs so I can not test on that and I only have Windows in a VM, so most testing will be done under Linux I'll depend on the various developers that use windows to let me know how it is affecting the running under Windows)&lt;br /&gt;
	&lt;br /&gt;
===13 Week Timeline===&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a gl::spritesheets it will be a cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54186</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54186"/>
		<updated>2014-03-23T05:09:11Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* SpriteSheets Phase Two */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# 			Gameplay&lt;br /&gt;
#* 				Units&lt;br /&gt;
#* 				Terrain&lt;br /&gt;
#* 				etc&lt;br /&gt;
# 			Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# 		Reuse as much as the existing syntax as possible&lt;br /&gt;
# 		Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# 		Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break at all.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase One====&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase Two====&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will become Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
====Cache Phase One====&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
	&lt;br /&gt;
When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
===13 Week Timeline===&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a gl::spritesheets it will be a cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54185</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54185"/>
		<updated>2014-03-23T05:08:52Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* SpriteSheets Phase Two */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# 			Gameplay&lt;br /&gt;
#* 				Units&lt;br /&gt;
#* 				Terrain&lt;br /&gt;
#* 				etc&lt;br /&gt;
# 			Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# 		Reuse as much as the existing syntax as possible&lt;br /&gt;
# 		Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# 		Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break at all.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase One====&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase Two====&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will be come Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
====Cache Phase One====&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
	&lt;br /&gt;
When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
===13 Week Timeline===&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a gl::spritesheets it will be a cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54184</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54184"/>
		<updated>2014-03-23T05:01:57Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
===Goals===&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# 			Gameplay&lt;br /&gt;
#* 				Units&lt;br /&gt;
#* 				Terrain&lt;br /&gt;
#* 				etc&lt;br /&gt;
# 			Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# 		Reuse as much as the existing syntax as possible&lt;br /&gt;
# 		Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# 		Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
===Problems===&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
===First Steps===&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break at all.&lt;br /&gt;
 	&lt;br /&gt;
===How This Will Work===&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase One====&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
====SpriteSheets Phase Two====&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will be comes Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
====Cache Phase One====&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
	&lt;br /&gt;
When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
===13 Week Timeline===&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a gl::spritesheets it will be a cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54176</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54176"/>
		<updated>2014-03-23T04:04:34Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
==Goals==&lt;br /&gt;
Eliminate as many small single images as possible from the program. &lt;br /&gt;
Enable Sprite Sheets to be used in;&lt;br /&gt;
# 			Gameplay&lt;br /&gt;
#* 				Units&lt;br /&gt;
#* 				Terrain&lt;br /&gt;
#* 				etc&lt;br /&gt;
# 			Menus, mouse pointers, etc. Optional Goal  I doubt at this point that I'll make it this far.&lt;br /&gt;
# 		Reuse as much as the existing syntax as possible&lt;br /&gt;
# 		Create Unit Tests to make sure that the areas modified are as good as I can make them.&lt;br /&gt;
# 		Make it easy for the artists to add sprites to a sprite sheet: &lt;br /&gt;
 &lt;br /&gt;
==Problems==&lt;br /&gt;
* 		Not all units and terrain are 72x72&lt;br /&gt;
* 		Adding a boarder around each image to make it easier for the artists to see what sort of space they have to work with will make taking the current images and converting them a bit harder as well as creating a script to convert them (which remains a soft goal, ie if I have to do it AFTER the summer, I'll do that.)  Stupid perfectionist leanings, at least for what I think of to get the project ready!  &lt;br /&gt;
* 		Syntax making sure that its easy to use and understand for the average user&lt;br /&gt;
 &lt;br /&gt;
==First Steps==&lt;br /&gt;
At this point I think I would take 1 sprite (character) and create a spritesheet of it, and then test with that one.  To allow testing I'd likely have it check for a spritesheet if it finds one it uses that, otherwise it uses the individual sprite images, in this way the game still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
 	&lt;br /&gt;
Through this whole process if it breaks it should only break on the sprite sheets until then it shouldn't break at all.&lt;br /&gt;
 	&lt;br /&gt;
==How This Will Work==&lt;br /&gt;
The way this will work is each sheet will be a grid of one colour that is not used in any of the sprites (say a shade of pink) this RGBA colour is a Primary Key, it will lay out a grid of equal sized areas within our spritesheet.  Then each of those grid squares (or rectangles) each frame/image has a second border of colour, say a different shade of pink.  Each unit's spritesheet will then be read at loading into the cache, each grid square will be searched for an image if found it will be loaded into an object that will contain the following information:&lt;br /&gt;
*SpriteSheetName&lt;br /&gt;
*Row&lt;br /&gt;
*Column&lt;br /&gt;
*Upper Y&lt;br /&gt;
*Upper X&lt;br /&gt;
*Lower Y&lt;br /&gt;
*Lower X&lt;br /&gt;
		&lt;br /&gt;
So each Spritesheet will generate a SpriteAddress Object and will have objects in it that give the information about each frame (given above we'll call it a SpriteFrameAddress Object).  The Spritesheet and its SpriteAddress and its SpriteFrameAddress Objects will be stored in the same cache as the spritesheet itself (so we won't have to refind each frame.&lt;br /&gt;
&lt;br /&gt;
Current WML modification language will be largely untouched.  If feasiable each sheet will be called in WML by someting like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;lt;Female_Elvish_Archer&amp;gt;,[4.1~4.4]:[75*2,100,130]&lt;br /&gt;
&lt;br /&gt;
which would translate out to: row 4, columns 1-4, with times of 5ms, 75ms, 100ms, and then 130ms for the images in order.  This should take the current markup language and merely extand it to allow for rows and columns be the callers for an image.  The &amp;lt;sheetName&amp;gt; will either relate to a memory address of the sheet or to an image under units/ like units/Elvish_Sorceress.png&lt;br /&gt;
	&lt;br /&gt;
===SpriteSheets Phase One===&lt;br /&gt;
would be getting something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/sorceress-melee-attack-[1~10,1,2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to work as a spritesheet with something like:&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot; &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
image=&amp;quot;units/elves-wood/Elvish_Sorceress[2.1~2.10,2.1~2.2].png:[80*5,100*2,80*5]&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
When the WML goes for the individual images that create that animation it'll look at the generated SpriteAddressObject for the needed SpriteFrameAddresses This could be extended to so there is a SpriteAnimation object that will read the configs for the unit and have say the Attack Animation instead of calling each image seperately (perhaps as a later extention?) &lt;br /&gt;
	&lt;br /&gt;
The ojbects might not be needed and just a config file generated that holds all the Row, Column, and X,Y data for each image might be all that is needed and will work fine.&lt;br /&gt;
	&lt;br /&gt;
===SpriteSheets Phase Two===&lt;br /&gt;
At this point, I'll work on getting rid of file path names in the config files, or add it in as an optional short cut way of declaring a spritesheet, something like units/elves-wood/Elvish_Sorceress.png will be comes Elvish_Sorceress&lt;br /&gt;
&lt;br /&gt;
===Cache Phase One===&lt;br /&gt;
In cache the spritesheets would be loaded at game start and parsed as above using the scenario recruitment lists for all sides, and any recall lists.  At the end of the scenario one of three things will happen, A) all the spritesheets and accomping addressing data will be dumped.  Such as returning to the main menu.  B) Each Spritesheet currently loaded will be compared to the next scenario loaded and any that are not needed are dropped.  These 2 options should help in loading and playing on devices with limited resources to devote to a cache.  C) The sheets will remained cached until the game is exited completely.&lt;br /&gt;
	&lt;br /&gt;
When an image is needed from a spritesheet it will gotten out of the sheet and then passed into the cache that will using and holding that image such as the scaled_to_zoom_ or tod_colored_images_.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
==13 Week Timeline==&lt;br /&gt;
March 20 - April 20:&lt;br /&gt;
&lt;br /&gt;
* Get more details and further flesh out the details of proposal.  Create more patches (at least one every 1-2 weeks that is some bug or feature request, something not trival).&lt;br /&gt;
* Get more familiar with Git and GitHub.  Be active in the community and encouraging to others that want to create a patch.&lt;br /&gt;
&lt;br /&gt;
April 21 - May 18:&lt;br /&gt;
*More details hammered out and continue doing what I'd been doing during Mar 20 - April 20.  Perhaps begin a little pre-coding to test theories.&lt;br /&gt;
	&lt;br /&gt;
May 19-June 1: &lt;br /&gt;
* Add a cache for just the spritesheets &lt;br /&gt;
** Here in gl I'll add a gl::spritesheets it will be a cache that will hold all the sprite sheets once loaded.  It will have to be felxible (in size and what's loaded) and perstant.  Ideally, I'd have it keep everything stored that has been stored there already, but perhaps, look at what's on the map and if say orcs are not going to be in this scenario but were in the last dropping the orc spritesheet from the cache.  This would help in running wesnoth on such devices as tablets and phones with limited resources.&lt;br /&gt;
	&lt;br /&gt;
June 1-15:	&lt;br /&gt;
* Add a get_spritesheet_frame function to get the image of the sprite we need right now.&lt;br /&gt;
** At this point I'll create the basic get an image out of a spritesheet function.  Ideally, at this point we'll know its a spritesheet and just have to send it the sheet and the information about the images in the sheet.  This information would be what image we want, and what size the image is.  From there the function should grab the right image and send it through the rest of the processes with nothing else having to be done to make it work.&lt;br /&gt;
&lt;br /&gt;
June 16-29:&lt;br /&gt;
* Implement a way to determine if its a sheet or not.&lt;br /&gt;
** This will require modifying the existing snytax for the WML or the way it is parsed.  &lt;br /&gt;
&lt;br /&gt;
June 23-27:	&lt;br /&gt;
* Mid-term evaluation, I would like to receive feedback before this point so that if I'm not performing up to par I can work harder/longer.&lt;br /&gt;
&lt;br /&gt;
June 30-July 13:&lt;br /&gt;
* Modify any existing functions that need to be modified to handle sheets&lt;br /&gt;
** Here is where I'd need to update things that I didn't think about during the application process.  I'll also use this time to further intergrate the gl::spritesheets cache into the memory management, and hopefully discover any issues at this point and can fix them/address them before the end.&lt;br /&gt;
&lt;br /&gt;
July 14-27:	&lt;br /&gt;
* Run tests and see what breaks and fix what broke&lt;br /&gt;
** Unit tests would have to be added and commited to keep this up and make sure its as robust as I can make it in the timeframe allotted to make it all work.&lt;br /&gt;
&lt;br /&gt;
July 28-Aug 10:	&lt;br /&gt;
* Pad time in case something takes longer then expected&lt;br /&gt;
** Something ALWAYS takes longer then expected or breaks in ways that we didn't expect and only a fool doesn't plan for the worst, so that is what this is, this is my, &amp;quot;OH CRAP&amp;quot; time.  Where I have some time to address the parts that take longer or where I work on optional extended tasks like writing a shell/pythonn script to convert all the images to spritesheets.&lt;br /&gt;
&lt;br /&gt;
Aug 3:		&lt;br /&gt;
* End of all major code additions/changes, begin of code clean-up and Minor fixes begin.&lt;br /&gt;
&lt;br /&gt;
Aug 11-17:	&lt;br /&gt;
* Documentation and clean up anything that hasn't yet be done.&lt;br /&gt;
&lt;br /&gt;
Aug 22:		&lt;br /&gt;
* Final evaluation and send the required code snippets to Google.&lt;br /&gt;
&lt;br /&gt;
===The Weeks in the Program===&lt;br /&gt;
Week  1:		May 19 to May 25&lt;br /&gt;
&lt;br /&gt;
Week  2:		May 26 to June 1&lt;br /&gt;
&lt;br /&gt;
Week  3:		June 2 to June 8&lt;br /&gt;
&lt;br /&gt;
Week  4:		June 9 to June 15&lt;br /&gt;
&lt;br /&gt;
Week  5:		June 16 to June 22&lt;br /&gt;
&lt;br /&gt;
Week  6:		June 23 to June 29&lt;br /&gt;
&lt;br /&gt;
Week  7:		June 30 to July 6&lt;br /&gt;
&lt;br /&gt;
Week  8:		July 6 to July 13&lt;br /&gt;
&lt;br /&gt;
Week  9:		July 14 to July 20&lt;br /&gt;
&lt;br /&gt;
Week 10:		July 21 to July 27&lt;br /&gt;
&lt;br /&gt;
Week 11:		July 28 to August 3&lt;br /&gt;
&lt;br /&gt;
Week 12:		August 4 to August 10&lt;br /&gt;
&lt;br /&gt;
Week 13:		August 11 to August 17&lt;br /&gt;
&lt;br /&gt;
Optional tasks if everything goes smoother and easier then planed in no particular order:&lt;br /&gt;
* Convert all the sprites, update all the .cfg for the base units&lt;br /&gt;
* Create script to allow Addon Artists convert their sprites&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54100</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54100"/>
		<updated>2014-03-21T08:07:12Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
&lt;br /&gt;
==Artists Weigh In==        &lt;br /&gt;
&lt;br /&gt;
OK, not just for artists, go to http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=40191 and weigh in on the details that effect you as an user!  And only those details, and thank you for helping me make Wesnoth a little bit better.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54090</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54090"/>
		<updated>2014-03-21T04:08:35Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
  **************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54087</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54087"/>
		<updated>2014-03-21T03:50:40Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Prelim Implementation Ideas==&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  **************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54086</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=54086"/>
		<updated>2014-03-21T03:49:46Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  **************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53487</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53487"/>
		<updated>2014-03-06T03:41:16Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Student}}&lt;br /&gt;
[[Category:SoC_Ideas_Your_Own_Ideas2014]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
==IRC==&lt;br /&gt;
Aishiko, Aishiko_laptop&lt;br /&gt;
&lt;br /&gt;
==Questionnaire==&lt;br /&gt;
Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
 commit 5594aeec32d8c8e59c3f3241fbbb68ce9e862474 2/3/2014&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
  **************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53485</id>
		<title>EasyCoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53485"/>
		<updated>2014-03-05T20:52:36Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Support variable recall cost in wml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Foreword ==&lt;br /&gt;
&lt;br /&gt;
'''We are permanently updating this page. Parts marked by &amp;lt;s&amp;gt;strikeout&amp;lt;/s&amp;gt; will likely be deleted shortly.&lt;br /&gt;
&lt;br /&gt;
This page is here to document easy to do coding tasks. It is not here to double the feature request database, and should only be filled by people that know the code well enough to judge the difficulty of a given task. &lt;br /&gt;
&lt;br /&gt;
If you are such a person, you should feel free to edit this page.&lt;br /&gt;
&lt;br /&gt;
If you're not, you should post a feature request and discuss your idea on the forum or IRC. A coder with better knowledge of the code might give you the green light to add your feature here.&lt;br /&gt;
&lt;br /&gt;
Anybody should feel free to add &amp;quot;clues&amp;quot; to any tasks, that is entry points, traps to avoid, person to contact to discuss and so on.&lt;br /&gt;
&lt;br /&gt;
If you plan to work on a feature, write your name at the bottom of the feature, with the date. Note that if you are too long at working on a feature I'll &amp;quot;free&amp;quot; it back (that is if you're not working on it. If you have problems implementing it, just tell us....)&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If none of these are to your liking, feel free to check our [http://gna.org/bugs/?group=wesnoth bug tracker] with a broad spectrum of tasks.&lt;br /&gt;
&lt;br /&gt;
== MP related features ==&lt;br /&gt;
&lt;br /&gt;
=== Add possibility to switch off dependency checking ===&lt;br /&gt;
MP add-ons can define dependencies. Currently there's no way to force a &amp;quot;broken&amp;quot; configuration, although overzealous use of the system by UMC authors could make this feature useful. Add an option to the MP game creation screen to switch on/off dependency checking. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== WML related features ==&lt;br /&gt;
&lt;br /&gt;
=== Side-specific results ===&lt;br /&gt;
Giving result=defeat or result=victory for specific sides. ([http://gna.org/bugs/index.php?4960 FR #4960]) -- [[User:dlr365|dlr365]] -- patch submitted [https://gna.org/bugs/index.php?4960]&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]] 08:58, 28 February 2010 (UTC) Patch seems abandonned, but can be used for further work feel free to take over the FR&lt;br /&gt;
&lt;br /&gt;
=== Support for leaderless multiplayergames ===&lt;br /&gt;
Add support for the WML key victory_when_enemies_defeated= in the scenario tag during multiplayergames. ([https://gna.org/bugs/index.php?8106 FR #8106])&lt;br /&gt;
&lt;br /&gt;
=== Support variable recall cost in wml ===&lt;br /&gt;
see https://gna.org/bugs/?16538&lt;br /&gt;
&lt;br /&gt;
the syntax needs to be discussed and refined, but the overall idea is good&lt;br /&gt;
&lt;br /&gt;
make sure to update whiteboard to handle this correctly&lt;br /&gt;
&lt;br /&gt;
Ask Boucman&lt;br /&gt;
&lt;br /&gt;
Aishiko 5 Mar 2014&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
See [[FutureWML]]; some ideas there are easier than others.&lt;br /&gt;
&lt;br /&gt;
== Improvements to AI ==&lt;br /&gt;
&lt;br /&gt;
Note: not all of these might be simple tasks.  Talk to Crab or mattsc.&lt;br /&gt;
&lt;br /&gt;
* Add option to take avoided hexes into account in wesnoth.find_path()&lt;br /&gt;
&lt;br /&gt;
* Make the (old) simple aspect syntax work when the Lua engine is defined for a side.  Setting aspects in the [side] tag like this:&lt;br /&gt;
 [ai]&lt;br /&gt;
     aggression=0.123&lt;br /&gt;
 [/ai]&lt;br /&gt;
does not work if the Lua engine is defined. You either need to use the [aspect] tag in the [side] tag with 'engine=lua', or use the code above in a [modify_side] tag in an event.  Making the above syntax available (as it is with the c++ engine) would be nice.  The same also applies to the FAI engine and to aspects set for AI sides in MP games.&lt;br /&gt;
&lt;br /&gt;
* Add a Lua function ai.get_individual_attacks() that returns all the single attacks the side can do (as opposed to attack combinations).  This needs to include an option to recalculate and take the current situation on the map into account (making the function believe that the game state has changed).&lt;br /&gt;
&lt;br /&gt;
* Set up an option the allows us to exclude units from the move-to-targets phase similar to [filter_own] for the combat phase (other than setting ai_special=guardian, which has a number of other side effects). Actually, having this option for all CA's would be nice.&lt;br /&gt;
&lt;br /&gt;
* Change the aspects &amp;quot;passive_leader&amp;quot;, &amp;quot;passive_leader_shares_keep&amp;quot;, &amp;quot;leader_ignores_keep&amp;quot; to work with multiple leaders. The idea is to change the type of those aspects from yes/no to string so both &amp;quot;passive_leader=yes&amp;quot; and &amp;quot;passive_leader=leader_id_1,leader_id_2&amp;quot; is possible.&lt;br /&gt;
&lt;br /&gt;
* ai.get_new_enemy_dst_src and related functions have several problems:&lt;br /&gt;
** They use the current moves of the enemy units, which generally are all zero.&lt;br /&gt;
** Hexes occupied by other enemy units count as not reachable.&lt;br /&gt;
**Units with zero moves are not listed at all, not even for the hex they are on.&lt;br /&gt;
**Working around this with a Lua wrapper makes this actually slower than ai_helper.get_enemy_dst_src, which makes the functions pretty much useless, as speed is the only thing speaking for them.&lt;br /&gt;
&lt;br /&gt;
* Clean up Micro AI candidate actions code.  The Micro AIs were developed over quite a long period while we were trying to figure out how all of this works (and in part also by students participating in the Google Code-in project).  As a result, the code in some of them is quite inconsistent, not cleaned up, uncommented (or wrongly commented), etc.  '''Important notes:'''&lt;br /&gt;
**This is not meant as a single task, but rather as a series of tasks, involving individual MAIs or sets of related MAIs. Please do not submit a pull request in which the code of all MAIs has been modified. &lt;br /&gt;
**The Micro AIs are still being worked on pretty constantly, so if you are planning to work on this task, please let mattsc know (either on IRC or via forum PM), so that we can avoid conflicts as much as possible.&lt;br /&gt;
&lt;br /&gt;
* Add new options (keys or tags) to the Micro AIs.  As an example, some (but certainly not all) Micro AIs might benefit from taking some (but certainly not all) of the default AI aspects into account.&lt;br /&gt;
&lt;br /&gt;
* Write a script that automatically changes WML from the deprecated [ai][target] to the new [ai][goal] syntax.  Ideally, this would be part of wmllint.&lt;br /&gt;
** There are [http://wiki.wesnoth.org/AiWML#Deprecated_AI_Targeting_Aspects more deprecated AI aspect] which should eventually be added to this, but the [target] -&amp;gt; [goal] change would be a good and important start.&lt;br /&gt;
&lt;br /&gt;
== GUI related features ==&lt;br /&gt;
&lt;br /&gt;
Although Mordante developed the new GUI system GUI2, some dialogs still use the older GUI1 and could be improved or transferred. You should contact Mordante on IRC before starting to work on these.&lt;br /&gt;
&lt;br /&gt;
=== Theme Changes ===&lt;br /&gt;
&lt;br /&gt;
* hide the hourglass item from the statusbar when there is no timer&lt;br /&gt;
&lt;br /&gt;
=== Widget Changes ===&lt;br /&gt;
* make games sortable in the lobby (open slots, total number of players, era, XP modifier, gold per village, fog/shroud)&amp;lt;br&amp;gt;a GUI2 lobby is currently being developed, ask mordante whether this is still relevant&lt;br /&gt;
* input history (chat, commands, ..)&lt;br /&gt;
&lt;br /&gt;
== GUI2 related features ==&lt;br /&gt;
GUI2 is the new gui engine Mordante/SkeletonCrew is working on. &lt;br /&gt;
* Information on the wiki can be found here http://www.wesnoth.org/wiki/GUIToolkit&lt;br /&gt;
* The source code is under src/gui/&lt;br /&gt;
* The configuration config files are under data/gui/default&lt;br /&gt;
&lt;br /&gt;
Some tasks need the --new-widgets since the code is only shown in the experimental mode. Tasks which need this switch have the * in the title.&lt;br /&gt;
&lt;br /&gt;
=== Port the random map generator dialog to GUI2 ===&lt;br /&gt;
The map generator currently doesn't use the GUI2 framework, but there's no reason why it couldn't. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
=== More powerful village naming ===&lt;br /&gt;
'''Adding mountain names and other features to village names, having a second random name in village names'''&lt;br /&gt;
&lt;br /&gt;
Currently the village naming engine has a very good structure that could allow more powerful names to be generated. &lt;br /&gt;
Understanding how it works should be quite easy, and a few useful improvements could be added.&lt;br /&gt;
&lt;br /&gt;
* Currently villages can use lake names and river names, this should be extended to other features like bridges, swamps, mountains etc...&lt;br /&gt;
* It would be nice to have a separate list of &amp;quot;first syllabus&amp;quot; and &amp;quot;last syllabus&amp;quot; for naming. That's not really needed in English, but some translations could use it&lt;br /&gt;
* Again, it is common to have villages with more than one &amp;quot;random&amp;quot; word in them. having a $name2 variable would be nice&lt;br /&gt;
&lt;br /&gt;
Turns out this was already done, and should be removed.&lt;br /&gt;
&lt;br /&gt;
=== Debug Mode ===&lt;br /&gt;
* New debug command functionality (setting additional status.variables, possibly terrain)&lt;br /&gt;
&lt;br /&gt;
=== wesnoth-optipng ===&lt;br /&gt;
For lossless png compression we use wesnoth-optipng, a script using an external toolchain (ImageMagick, OptiPNG, Advdef). Perhaps the performance could be improved by using PNGOut instead of advdef. This task includes&lt;br /&gt;
* a quick profiling of compression ratio and decompression speed for both tools&lt;br /&gt;
* if it provides a higher compression while not significantly slowing down decompression, adapt wesnoth-optipng to use PNGOut&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[NotSoEasyCoding]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Future]]&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53473</id>
		<title>EasyCoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53473"/>
		<updated>2014-03-04T03:43:42Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Support variable recall cost in wml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Foreword ==&lt;br /&gt;
&lt;br /&gt;
'''We are permanently updating this page. Parts marked by &amp;lt;s&amp;gt;strikeout&amp;lt;/s&amp;gt; will likely be deleted shortly.&lt;br /&gt;
&lt;br /&gt;
This page is here to document easy to do coding tasks. It is not here to double the feature request database, and should only be filled by people that know the code well enough to judge the difficulty of a given task. &lt;br /&gt;
&lt;br /&gt;
If you are such a person, you should feel free to edit this page.&lt;br /&gt;
&lt;br /&gt;
If you're not, you should post a feature request and discuss your idea on the forum or IRC. A coder with better knowledge of the code might give you the green light to add your feature here.&lt;br /&gt;
&lt;br /&gt;
Anybody should feel free to add &amp;quot;clues&amp;quot; to any tasks, that is entry points, traps to avoid, person to contact to discuss and so on.&lt;br /&gt;
&lt;br /&gt;
If you plan to work on a feature, write your name at the bottom of the feature, with the date. Note that if you are too long at working on a feature I'll &amp;quot;free&amp;quot; it back (that is if you're not working on it. If you have problems implementing it, just tell us....)&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If none of these are to your liking, feel free to check our [http://gna.org/bugs/?group=wesnoth bug tracker] with a broad spectrum of tasks.&lt;br /&gt;
&lt;br /&gt;
== MP related features ==&lt;br /&gt;
&lt;br /&gt;
=== Add possibility to switch off dependency checking ===&lt;br /&gt;
MP add-ons can define dependencies. Currently there's no way to force a &amp;quot;broken&amp;quot; configuration, although overzealous use of the system by UMC authors could make this feature useful. Add an option to the MP game creation screen to switch on/off dependency checking. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== WML related features ==&lt;br /&gt;
&lt;br /&gt;
=== Side-specific results ===&lt;br /&gt;
Giving result=defeat or result=victory for specific sides. ([http://gna.org/bugs/index.php?4960 FR #4960]) -- [[User:dlr365|dlr365]] -- patch submitted [https://gna.org/bugs/index.php?4960]&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]] 08:58, 28 February 2010 (UTC) Patch seems abandonned, but can be used for further work feel free to take over the FR&lt;br /&gt;
&lt;br /&gt;
=== Support for leaderless multiplayergames ===&lt;br /&gt;
Add support for the WML key victory_when_enemies_defeated= in the scenario tag during multiplayergames. ([https://gna.org/bugs/index.php?8106 FR #8106])&lt;br /&gt;
&lt;br /&gt;
=== Support variable recall cost in wml ===&lt;br /&gt;
see https://gna.org/bugs/?16538&lt;br /&gt;
&lt;br /&gt;
the syntax needs to be discussed and refined, but the overall idea is good&lt;br /&gt;
&lt;br /&gt;
make sure to update whiteboard to handle this correctly&lt;br /&gt;
&lt;br /&gt;
Ask Boucman&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
See [[FutureWML]]; some ideas there are easier than others.&lt;br /&gt;
&lt;br /&gt;
== Improvements to AI ==&lt;br /&gt;
&lt;br /&gt;
Note: not all of these might be simple tasks.  Talk to Crab or mattsc.&lt;br /&gt;
&lt;br /&gt;
* Add option to take avoided hexes into account in wesnoth.find_path()&lt;br /&gt;
&lt;br /&gt;
* Make the (old) simple aspect syntax work when the Lua engine is defined for a side.  Setting aspects in the [side] tag like this:&lt;br /&gt;
 [ai]&lt;br /&gt;
     aggression=0.123&lt;br /&gt;
 [/ai]&lt;br /&gt;
does not work if the Lua engine is defined. You either need to use the [aspect] tag in the [side] tag with 'engine=lua', or use the code above in a [modify_side] tag in an event.  Making the above syntax available (as it is with the c++ engine) would be nice.  The same also applies to the FAI engine and to aspects set for AI sides in MP games.&lt;br /&gt;
&lt;br /&gt;
* Add a Lua function ai.get_individual_attacks() that returns all the single attacks the side can do (as opposed to attack combinations).  This needs to include an option to recalculate and take the current situation on the map into account (making the function believe that the game state has changed).&lt;br /&gt;
&lt;br /&gt;
* Set up an option the allows us to exclude units from the move-to-targets phase similar to [filter_own] for the combat phase (other than setting ai_special=guardian, which has a number of other side effects). Actually, having this option for all CA's would be nice.&lt;br /&gt;
&lt;br /&gt;
* Change the aspects &amp;quot;passive_leader&amp;quot;, &amp;quot;passive_leader_shares_keep&amp;quot;, &amp;quot;leader_ignores_keep&amp;quot; to work with multiple leaders. The idea is to change the type of those aspects from yes/no to string so both &amp;quot;passive_leader=yes&amp;quot; and &amp;quot;passive_leader=leader_id_1,leader_id_2&amp;quot; is possible.&lt;br /&gt;
&lt;br /&gt;
* ai.get_new_enemy_dst_src and related functions have several problems:&lt;br /&gt;
** They use the current moves of the enemy units, which generally are all zero.&lt;br /&gt;
** Hexes occupied by other enemy units count as not reachable.&lt;br /&gt;
**Units with zero moves are not listed at all, not even for the hex they are on.&lt;br /&gt;
**Working around this with a Lua wrapper makes this actually slower than ai_helper.get_enemy_dst_src, which makes the functions pretty much useless, as speed is the only thing speaking for them.&lt;br /&gt;
&lt;br /&gt;
* Clean up Micro AI candidate actions code.  The Micro AIs were developed over quite a long period while we were trying to figure out how all of this works (and in part also by students participating in the Google Code-in project).  As a result, the code in some of them is quite inconsistent, not cleaned up, uncommented (or wrongly commented), etc.  '''Important notes:'''&lt;br /&gt;
**This is not meant as a single task, but rather as a series of tasks, involving individual MAIs or sets of related MAIs. Please do not submit a pull request in which the code of all MAIs has been modified. &lt;br /&gt;
**The Micro AIs are still being worked on pretty constantly, so if you are planning to work on this task, please let mattsc know (either on IRC or via forum PM), so that we can avoid conflicts as much as possible.&lt;br /&gt;
&lt;br /&gt;
* Add new options (keys or tags) to the Micro AIs.  As an example, some (but certainly not all) Micro AIs might benefit from taking some (but certainly not all) of the default AI aspects into account.&lt;br /&gt;
&lt;br /&gt;
* Write a script that automatically changes WML from the deprecated [ai][target] to the new [ai][goal] syntax.  Ideally, this would be part of wmllint.&lt;br /&gt;
** There are [http://wiki.wesnoth.org/AiWML#Deprecated_AI_Targeting_Aspects more deprecated AI aspect] which should eventually be added to this, but the [target] -&amp;gt; [goal] change would be a good and important start.&lt;br /&gt;
&lt;br /&gt;
== GUI related features ==&lt;br /&gt;
&lt;br /&gt;
Although Mordante developed the new GUI system GUI2, some dialogs still use the older GUI1 and could be improved or transferred. You should contact Mordante on IRC before starting to work on these.&lt;br /&gt;
&lt;br /&gt;
=== Theme Changes ===&lt;br /&gt;
&lt;br /&gt;
* hide the hourglass item from the statusbar when there is no timer&lt;br /&gt;
&lt;br /&gt;
=== Widget Changes ===&lt;br /&gt;
* make games sortable in the lobby (open slots, total number of players, era, XP modifier, gold per village, fog/shroud)&amp;lt;br&amp;gt;a GUI2 lobby is currently being developed, ask mordante whether this is still relevant&lt;br /&gt;
* input history (chat, commands, ..)&lt;br /&gt;
&lt;br /&gt;
== GUI2 related features ==&lt;br /&gt;
GUI2 is the new gui engine Mordante/SkeletonCrew is working on. &lt;br /&gt;
* Information on the wiki can be found here http://www.wesnoth.org/wiki/GUIToolkit&lt;br /&gt;
* The source code is under src/gui/&lt;br /&gt;
* The configuration config files are under data/gui/default&lt;br /&gt;
&lt;br /&gt;
Some tasks need the --new-widgets since the code is only shown in the experimental mode. Tasks which need this switch have the * in the title.&lt;br /&gt;
&lt;br /&gt;
=== Port the random map generator dialog to GUI2 ===&lt;br /&gt;
The map generator currently doesn't use the GUI2 framework, but there's no reason why it couldn't. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
=== More powerful village naming ===&lt;br /&gt;
'''Adding mountain names and other features to village names, having a second random name in village names'''&lt;br /&gt;
&lt;br /&gt;
Currently the village naming engine has a very good structure that could allow more powerful names to be generated. &lt;br /&gt;
Understanding how it works should be quite easy, and a few useful improvements could be added.&lt;br /&gt;
&lt;br /&gt;
* Currently villages can use lake names and river names, this should be extended to other features like bridges, swamps, mountains etc...&lt;br /&gt;
* It would be nice to have a separate list of &amp;quot;first syllabus&amp;quot; and &amp;quot;last syllabus&amp;quot; for naming. That's not really needed in English, but some translations could use it&lt;br /&gt;
* Again, it is common to have villages with more than one &amp;quot;random&amp;quot; word in them. having a $name2 variable would be nice&lt;br /&gt;
&lt;br /&gt;
Turns out this was already done, and should be removed.&lt;br /&gt;
&lt;br /&gt;
=== Debug Mode ===&lt;br /&gt;
* New debug command functionality (setting additional status.variables, possibly terrain)&lt;br /&gt;
&lt;br /&gt;
=== wesnoth-optipng ===&lt;br /&gt;
For lossless png compression we use wesnoth-optipng, a script using an external toolchain (ImageMagick, OptiPNG, Advdef). Perhaps the performance could be improved by using PNGOut instead of advdef. This task includes&lt;br /&gt;
* a quick profiling of compression ratio and decompression speed for both tools&lt;br /&gt;
* if it provides a higher compression while not significantly slowing down decompression, adapt wesnoth-optipng to use PNGOut&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[NotSoEasyCoding]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Future]]&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53422</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53422"/>
		<updated>2014-03-02T09:04:37Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
 commit 5594aeec32d8c8e59c3f3241fbbb68ce9e862474 2/3/2014&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
  **************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53363</id>
		<title>EasyCoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53363"/>
		<updated>2014-03-01T21:36:30Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* Support variable recall cost in wml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Foreword ==&lt;br /&gt;
&lt;br /&gt;
'''We are permanently updating this page. Parts marked by &amp;lt;s&amp;gt;strikeout&amp;lt;/s&amp;gt; will likely be deleted shortly.&lt;br /&gt;
&lt;br /&gt;
This page is here to document easy to do coding tasks. It is not here to double the feature request database, and should only be filled by people that know the code well enough to judge the difficulty of a given task. &lt;br /&gt;
&lt;br /&gt;
If you are such a person, you should feel free to edit this page.&lt;br /&gt;
&lt;br /&gt;
If you're not, you should post a feature request and discuss your idea on the forum or IRC. A coder with better knowledge of the code might give you the green light to add your feature here.&lt;br /&gt;
&lt;br /&gt;
Anybody should feel free to add &amp;quot;clues&amp;quot; to any tasks, that is entry points, traps to avoid, person to contact to discuss and so on.&lt;br /&gt;
&lt;br /&gt;
If you plan to work on a feature, write your name at the bottom of the feature, with the date. Note that if you are too long at working on a feature I'll &amp;quot;free&amp;quot; it back (that is if you're not working on it. If you have problems implementing it, just tell us....)&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If none of these are to your liking, feel free to check our [http://gna.org/bugs/?group=wesnoth bug tracker] with a broad spectrum of tasks.&lt;br /&gt;
&lt;br /&gt;
== MP related features ==&lt;br /&gt;
&lt;br /&gt;
=== Add possibility to switch off dependency checking ===&lt;br /&gt;
MP add-ons can define dependencies. Currently there's no way to force a &amp;quot;broken&amp;quot; configuration, although overzealous use of the system by UMC authors could make this feature useful. Add an option to the MP game creation screen to switch on/off dependency checking. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== WML related features ==&lt;br /&gt;
&lt;br /&gt;
=== Side-specific results ===&lt;br /&gt;
Giving result=defeat or result=victory for specific sides. ([http://gna.org/bugs/index.php?4960 FR #4960]) -- [[User:dlr365|dlr365]] -- patch submitted [https://gna.org/bugs/index.php?4960]&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]] 08:58, 28 February 2010 (UTC) Patch seems abandonned, but can be used for further work feel free to take over the FR&lt;br /&gt;
&lt;br /&gt;
=== Support for leaderless multiplayergames ===&lt;br /&gt;
Add support for the WML key victory_when_enemies_defeated= in the scenario tag during multiplayergames. ([https://gna.org/bugs/index.php?8106 FR #8106])&lt;br /&gt;
&lt;br /&gt;
=== Support variable recall cost in wml ===&lt;br /&gt;
see https://gna.org/bugs/?16538&lt;br /&gt;
&lt;br /&gt;
the syntax needs to be discussed and refined, but the overall idea is good&lt;br /&gt;
&lt;br /&gt;
make sure to update whiteboard to handle this correctly&lt;br /&gt;
&lt;br /&gt;
Ask Boucman&lt;br /&gt;
&lt;br /&gt;
Aishiko 1 Mar 2014&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
See [[FutureWML]]; some ideas there are easier than others.&lt;br /&gt;
&lt;br /&gt;
== Improvements to AI ==&lt;br /&gt;
&lt;br /&gt;
Note: not all of these might be simple tasks.  Talk to Crab or mattsc.&lt;br /&gt;
&lt;br /&gt;
* Add option to take avoided hexes into account in wesnoth.find_path()&lt;br /&gt;
&lt;br /&gt;
* Make the (old) simple aspect syntax work when the Lua engine is defined for a side.  Setting aspects in the [side] tag like this:&lt;br /&gt;
 [ai]&lt;br /&gt;
     aggression=0.123&lt;br /&gt;
 [/ai]&lt;br /&gt;
does not work if the Lua engine is defined. You either need to use the [aspect] tag in the [side] tag with 'engine=lua', or use the code above in a [modify_side] tag in an event.  Making the above syntax available (as it is with the c++ engine) would be nice.  The same also applies to the FAI engine and to aspects set for AI sides in MP games.&lt;br /&gt;
&lt;br /&gt;
* Add a Lua function ai.get_individual_attacks() that returns all the single attacks the side can do (as opposed to attack combinations).  This needs to include an option to recalculate and take the current situation on the map into account (making the function believe that the game state has changed).&lt;br /&gt;
&lt;br /&gt;
* Set up an option the allows us to exclude units from the move-to-targets phase similar to [filter_own] for the combat phase (other than setting ai_special=guardian, which has a number of other side effects). Actually, having this option for all CA's would be nice.&lt;br /&gt;
&lt;br /&gt;
* Change the aspects &amp;quot;passive_leader&amp;quot;, &amp;quot;passive_leader_shares_keep&amp;quot;, &amp;quot;leader_ignores_keep&amp;quot; to work with multiple leaders. The idea is to change the type of those aspects from yes/no to string so both &amp;quot;passive_leader=yes&amp;quot; and &amp;quot;passive_leader=leader_id_1,leader_id_2&amp;quot; is possible.&lt;br /&gt;
&lt;br /&gt;
* ai.get_new_enemy_dst_src and related functions have several problems:&lt;br /&gt;
** They use the current moves of the enemy units, which generally are all zero.&lt;br /&gt;
** Hexes occupied by other enemy units count as not reachable.&lt;br /&gt;
**Units with zero moves are not listed at all, not even for the hex they are on.&lt;br /&gt;
**Working around this with a Lua wrapper makes this actually slower than ai_helper.get_enemy_dst_src, which makes the functions pretty much useless, as speed is the only thing speaking for them.&lt;br /&gt;
&lt;br /&gt;
* Clean up Micro AI candidate actions code.  The Micro AIs were developed over quite a long period while we were trying to figure out how all of this works (and in part also by students participating in the Google Code-in project).  As a result, the code in some of them is quite inconsistent, not cleaned up, uncommented (or wrongly commented), etc.  '''Important notes:'''&lt;br /&gt;
**This is not meant as a single task, but rather as a series of tasks, involving individual MAIs or sets of related MAIs. Please do not submit a pull request in which the code of all MAIs has been modified. &lt;br /&gt;
**The Micro AIs are still being worked on pretty constantly, so if you are planning to work on this task, please let mattsc know (either on IRC or via forum PM), so that we can avoid conflicts as much as possible.&lt;br /&gt;
&lt;br /&gt;
* Add new options (keys or tags) to the Micro AIs.  As an example, some (but certainly not all) Micro AIs might benefit from taking some (but certainly not all) of the default AI aspects into account.&lt;br /&gt;
&lt;br /&gt;
* Write a script that automatically changes WML from the deprecated [ai][target] to the new [ai][goal] syntax.  Ideally, this would be part of wmllint.&lt;br /&gt;
** There are [http://wiki.wesnoth.org/AiWML#Deprecated_AI_Targeting_Aspects more deprecated AI aspect] which should eventually be added to this, but the [target] -&amp;gt; [goal] change would be a good and important start.&lt;br /&gt;
&lt;br /&gt;
== GUI related features ==&lt;br /&gt;
&lt;br /&gt;
Although Mordante developed the new GUI system GUI2, some dialogs still use the older GUI1 and could be improved or transferred. You should contact Mordante on IRC before starting to work on these.&lt;br /&gt;
&lt;br /&gt;
=== Theme Changes ===&lt;br /&gt;
&lt;br /&gt;
* hide the hourglass item from the statusbar when there is no timer&lt;br /&gt;
&lt;br /&gt;
=== Widget Changes ===&lt;br /&gt;
* make games sortable in the lobby (open slots, total number of players, era, XP modifier, gold per village, fog/shroud)&amp;lt;br&amp;gt;a GUI2 lobby is currently being developed, ask mordante whether this is still relevant&lt;br /&gt;
* input history (chat, commands, ..)&lt;br /&gt;
&lt;br /&gt;
== GUI2 related features ==&lt;br /&gt;
GUI2 is the new gui engine Mordante/SkeletonCrew is working on. &lt;br /&gt;
* Information on the wiki can be found here http://www.wesnoth.org/wiki/GUIToolkit&lt;br /&gt;
* The source code is under src/gui/&lt;br /&gt;
* The configuration config files are under data/gui/default&lt;br /&gt;
&lt;br /&gt;
Some tasks need the --new-widgets since the code is only shown in the experimental mode. Tasks which need this switch have the * in the title.&lt;br /&gt;
&lt;br /&gt;
=== Port the random map generator dialog to GUI2 ===&lt;br /&gt;
The map generator currently doesn't use the GUI2 framework, but there's no reason why it couldn't. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
=== More powerful village naming ===&lt;br /&gt;
'''Adding mountain names and other features to village names, having a second random name in village names'''&lt;br /&gt;
&lt;br /&gt;
Currently the village naming engine has a very good structure that could allow more powerful names to be generated. &lt;br /&gt;
Understanding how it works should be quite easy, and a few useful improvements could be added.&lt;br /&gt;
&lt;br /&gt;
* Currently villages can use lake names and river names, this should be extended to other features like bridges, swamps, mountains etc...&lt;br /&gt;
* It would be nice to have a separate list of &amp;quot;first syllabus&amp;quot; and &amp;quot;last syllabus&amp;quot; for naming. That's not really needed in English, but some translations could use it&lt;br /&gt;
* Again, it is common to have villages with more than one &amp;quot;random&amp;quot; word in them. having a $name2 variable would be nice&lt;br /&gt;
&lt;br /&gt;
Turns out this was already done, and should be removed.&lt;br /&gt;
&lt;br /&gt;
=== Debug Mode ===&lt;br /&gt;
* New debug command functionality (setting additional status.variables, possibly terrain)&lt;br /&gt;
&lt;br /&gt;
=== wesnoth-optipng ===&lt;br /&gt;
For lossless png compression we use wesnoth-optipng, a script using an external toolchain (ImageMagick, OptiPNG, Advdef). Perhaps the performance could be improved by using PNGOut instead of advdef. This task includes&lt;br /&gt;
* a quick profiling of compression ratio and decompression speed for both tools&lt;br /&gt;
* if it provides a higher compression while not significantly slowing down decompression, adapt wesnoth-optipng to use PNGOut&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[NotSoEasyCoding]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Future]]&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53358</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53358"/>
		<updated>2014-03-01T21:09:28Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h4&amp;gt;Aishiko GSOC 2014 SpriteSheets&amp;lt;/h4&amp;gt;&lt;br /&gt;
My proposal is to take the current functions for drawing sprites and&lt;br /&gt;
move it to allow for spritesheets, while hiding any of the changes from&lt;br /&gt;
campaign designers.  It should allow for the seemless intergration of &lt;br /&gt;
spritesheets and allow for a period of conversion from multiple files to &lt;br /&gt;
sheets.&lt;br /&gt;
&lt;br /&gt;
Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
  **************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53357</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53357"/>
		<updated>2014-03-01T21:03:57Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
**************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC_Ideas_SpriteSheets2014&amp;diff=53356</id>
		<title>SoC Ideas SpriteSheets2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC_Ideas_SpriteSheets2014&amp;diff=53356"/>
		<updated>2014-03-01T21:01:44Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* SpriteSheet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Idea}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
===SpriteSheet===&lt;br /&gt;
Page for the idea: [[SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
Wesnoth uses thousands of images, each of them stored in separate files.&lt;br /&gt;
It would be more efficient to store multiple images in a single file. In order&lt;br /&gt;
to make that possible, the Wesnoth engine needs to be adapted to allow this change.&lt;br /&gt;
&lt;br /&gt;
{{#dpl:&lt;br /&gt;
 |resultsheader=''There are %PAGES% submitted student proposals for this idea''&lt;br /&gt;
 |oneresultheader=''There is 1 submitted student proposal for this idea''&lt;br /&gt;
 |suppresserrors=true&lt;br /&gt;
 |noresultsheader=''There are no submitted student proposals for this idea''&lt;br /&gt;
 |category=Summer of Code 2014 Student Page&amp;amp;SoC Ideas IDEA NAME&lt;br /&gt;
 |notcategory=SoC 2014 Not Submitted To Google&lt;br /&gt;
 |include=#Description&lt;br /&gt;
 |nottitlematch=SoC2014_Template_of_Student_page&lt;br /&gt;
 |mode=userformat&lt;br /&gt;
 |format=,,&amp;lt;br/&amp;gt;See [[%PAGE%|%TITLE%]] for more information.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;,&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Additional Information==&lt;br /&gt;
&lt;br /&gt;
Currently, all the Wesnoth unit animations are based on thousands of small png&lt;br /&gt;
images, each image representing the unit in a single pose. For terrains the&lt;br /&gt;
situation is the same, it has a base image with a lot of transitions to other&lt;br /&gt;
terrains, which are now stored as seperate images.&lt;br /&gt;
&lt;br /&gt;
In a sprite sheet approach, each unit is represented by a single, huge, image&lt;br /&gt;
where all the unit images are put on a mosaïc pattern and the game knows where&lt;br /&gt;
to look for a given image.&lt;br /&gt;
&lt;br /&gt;
The advantage of having a large image with all positions is that it's more&lt;br /&gt;
efficient in memory. Also one large file is more effecient on the harddisk and&lt;br /&gt;
faster to load than a lot of smaller files. So the change to spritesheets will&lt;br /&gt;
have a lot of advantages. Also several Wesnoth artists prefer using sprite&lt;br /&gt;
sheets over multiple single images.&lt;br /&gt;
&lt;br /&gt;
This project involves changing the Wesnoth Markup Language (WML)* definition&lt;br /&gt;
for images to specify a sub image in a sprite sheet and change the image loading&lt;br /&gt;
code of the engine. Creating tools to transform existing images to a sprite sheet&lt;br /&gt;
can be an optional objective.&lt;br /&gt;
&lt;br /&gt;
Regarding the implementation the student is free to come up with his/her own&lt;br /&gt;
solution and discuss that with the developers during the application period.&lt;br /&gt;
&lt;br /&gt;
*) WML is a XML like language, used to describe the data/content of Wesnoth.&lt;br /&gt;
&lt;br /&gt;
==Whom to ask about this==&lt;br /&gt;
&lt;br /&gt;
mordante on IRC.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53355</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53355"/>
		<updated>2014-03-01T20:59:41Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53312</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53312"/>
		<updated>2014-03-01T04:48:00Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group similar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The fields, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
      &lt;br /&gt;
        I've heard that some devs think that a spritesheet might cause issues &lt;br /&gt;
        with larger images that don't fit in a hex, I'll intentional create some &lt;br /&gt;
        sprite sheets just for testing this purpose.  I'll also see about creating &lt;br /&gt;
        some tests to check and see if the performance gains are really showing up.&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
**************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53311</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53311"/>
		<updated>2014-03-01T04:42:01Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group simliar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The feilds, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
**************Comments and Suggestions**************&lt;br /&gt;
 Please place them after this line, all are appreciated and if I can't thank you &lt;br /&gt;
personally (IE you don't attach your name to it, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53306</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53306"/>
		<updated>2014-02-28T21:41:15Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Posted 28 Feb 2014&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group simliar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The feilds, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	I don't get it yet but I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
Comments and Suggestions Please place them after this line, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SoC_Ideas_SpriteSheets2014&amp;diff=53305</id>
		<title>SoC Ideas SpriteSheets2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SoC_Ideas_SpriteSheets2014&amp;diff=53305"/>
		<updated>2014-02-28T21:38:15Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* SpriteSheet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2014Idea}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
===SpriteSheet===&lt;br /&gt;
Page for the idea: [[SoC_Ideas_SpriteSheets2014]]&lt;br /&gt;
&lt;br /&gt;
Wesnoth uses thousands of images, each of them stored in separate files.&lt;br /&gt;
It would be more efficient to store multiple images in a single file. In order&lt;br /&gt;
to make that possible, the Wesnoth engine needs to be adapted to allow this change.&lt;br /&gt;
&lt;br /&gt;
{{#dpl:&lt;br /&gt;
 |resultsheader=''There are %PAGES% submitted student proposals for this idea''&lt;br /&gt;
 |oneresultheader=''There is 1 submitted student proposal for this idea''&lt;br /&gt;
 |suppresserrors=true&lt;br /&gt;
 |noresultsheader=''There are no submitted student proposals for this idea''&lt;br /&gt;
 |category=Summer of Code 2014 Student Page&amp;amp;SoC Ideas IDEA NAME&lt;br /&gt;
 |notcategory=SoC 2014 Not Submitted To Google&lt;br /&gt;
 |include=#Description&lt;br /&gt;
 |nottitlematch=SoC2014_Template_of_Student_page&lt;br /&gt;
 |mode=userformat&lt;br /&gt;
 |format=,,&amp;lt;br/&amp;gt;See [[%PAGE%|%TITLE%]] for more information.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;,&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Student Proposal http://wiki.wesnoth.org/SpriteSheetApplicationSAB 2014/02/28&lt;br /&gt;
&lt;br /&gt;
==Additional Information==&lt;br /&gt;
&lt;br /&gt;
Currently, all the Wesnoth unit animations are based on thousands of small png&lt;br /&gt;
images, each image representing the unit in a single pose. For terrains the&lt;br /&gt;
situation is the same, it has a base image with a lot of transitions to other&lt;br /&gt;
terrains, which are now stored as seperate images.&lt;br /&gt;
&lt;br /&gt;
In a sprite sheet approach, each unit is represented by a single, huge, image&lt;br /&gt;
where all the unit images are put on a mosaïc pattern and the game knows where&lt;br /&gt;
to look for a given image.&lt;br /&gt;
&lt;br /&gt;
The advantage of having a large image with all positions is that it's more&lt;br /&gt;
efficient in memory. Also one large file is more effecient on the harddisk and&lt;br /&gt;
faster to load than a lot of smaller files. So the change to spritesheets will&lt;br /&gt;
have a lot of advantages. Also several Wesnoth artists prefer using sprite&lt;br /&gt;
sheets over multiple single images.&lt;br /&gt;
&lt;br /&gt;
This project involves changing the Wesnoth Markup Language (WML)* definition&lt;br /&gt;
for images to specify a sub image in a sprite sheet and change the image loading&lt;br /&gt;
code of the engine. Creating tools to transform existing images to a sprite sheet&lt;br /&gt;
can be an optional objective.&lt;br /&gt;
&lt;br /&gt;
Regarding the implementation the student is free to come up with his/her own&lt;br /&gt;
solution and discuss that with the developers during the application period.&lt;br /&gt;
&lt;br /&gt;
*) WML is a XML like language, used to describe the data/content of Wesnoth.&lt;br /&gt;
&lt;br /&gt;
==Whom to ask about this==&lt;br /&gt;
&lt;br /&gt;
mordante on IRC.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53304</id>
		<title>SpriteSheetApplicationSAB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=SpriteSheetApplicationSAB&amp;diff=53304"/>
		<updated>2014-02-28T21:35:05Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: Created page with &amp;quot; 1) Basics  1.1) Write a small introduction to yourself.  1.2) State your preferred email address.  1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?  1.4...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1) Basics&lt;br /&gt;
&lt;br /&gt;
1.1) Write a small introduction to yourself.&lt;br /&gt;
&lt;br /&gt;
1.2) State your preferred email address.&lt;br /&gt;
&lt;br /&gt;
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?&lt;br /&gt;
&lt;br /&gt;
1.4) Why do you want to participate in summer of code?&lt;br /&gt;
&lt;br /&gt;
	I'd like to participate in the summer of code for several reasons, and &lt;br /&gt;
	yes money is one of them.  but experience is the biggest one.&lt;br /&gt;
&lt;br /&gt;
1.5) What are you studying, subject, level and school?&lt;br /&gt;
&lt;br /&gt;
	I am currently studying computer science (read programming) and networking &lt;br /&gt;
	technology.  I am a Softmore in both, I am a current student at Sandhills &lt;br /&gt;
	Community College.&lt;br /&gt;
&lt;br /&gt;
1.6) What country are you from, at what time are you most likely to be able to&lt;br /&gt;
join IRC?&lt;br /&gt;
&lt;br /&gt;
	I currently live on the east coast of the US and can be in IRC pretty &lt;br /&gt;
	much all day, either at home or school, though if at school there will &lt;br /&gt;
	be a delay if in class and not lab.&lt;br /&gt;
&lt;br /&gt;
1.7) Do you have other commitments for the summer period ? Do you plan to take&lt;br /&gt;
any vacations ? If yes, when.&lt;br /&gt;
&lt;br /&gt;
	I have no current commitments that would impact my ability to give GSOC &lt;br /&gt;
	40 hours a week of work and attention.  But if an emergency comes up &lt;br /&gt;
	I'll find a way to make up the hours.&lt;br /&gt;
&lt;br /&gt;
2) Experience&lt;br /&gt;
&lt;br /&gt;
2.1) What programs/software have you worked on before?&lt;br /&gt;
&lt;br /&gt;
	Mostly personal projects and class projects, in C, C++, C#, PHP, Python, &lt;br /&gt;
	&amp;amp; the Arduino.  One of C++ classes was using DarkGTK (yes I know its &lt;br /&gt;
	windows only) but we used SpriteSheets, sprite collision, and mouse interaction.&lt;br /&gt;
&lt;br /&gt;
2.2) Have you developed software in a team environment before? (As opposed to&lt;br /&gt;
hacking on something on your own)&lt;br /&gt;
&lt;br /&gt;
	I have in a class environment, but I'm usually the only one left doing &lt;br /&gt;
	the heavy lifting of coding.  Though next year I'll be doing the &lt;br /&gt;
	programming capstone class where the class of 1-20 students work &lt;br /&gt;
	together to produce a program for a client, either for the college or &lt;br /&gt;
	for a community member/business.  I'm both looking forward to and &lt;br /&gt;
	dreading working on a team, wondering if I'll be able to fit in and &lt;br /&gt;
	create code that is easy to maintain and follow.&lt;br /&gt;
&lt;br /&gt;
2.3) Have you participated to the Google Summer of Code before? As a mentor or a&lt;br /&gt;
student? In what project? Were you successful? If not, why?&lt;br /&gt;
&lt;br /&gt;
	I applied last year, however, I wasn't choosen mostly because I lack &lt;br /&gt;
	good writing skills for technical documents.  At least that is what I &lt;br /&gt;
	was told.&lt;br /&gt;
&lt;br /&gt;
2.4) Are you already involved with any open source development projects? If yes,&lt;br /&gt;
please describe the project and the scope of your involvement.&lt;br /&gt;
&lt;br /&gt;
	None, I have submitted patches to the linux kernel but, I never &lt;br /&gt;
	bothered to see if they made it in.&lt;br /&gt;
&lt;br /&gt;
2.5) Gaming experience - Are you a gamer?&lt;br /&gt;
&lt;br /&gt;
	Sometimes, depends on my mood.&lt;br /&gt;
&lt;br /&gt;
2.5.1) What type of gamer are you?&lt;br /&gt;
&lt;br /&gt;
	Casual.&lt;br /&gt;
&lt;br /&gt;
2.5.2) What type of games?&lt;br /&gt;
&lt;br /&gt;
2.5.3) What type of opponents do you prefer?&lt;br /&gt;
&lt;br /&gt;
	AI oppenents, I'm not really into the whole competetive thing.&lt;br /&gt;
&lt;br /&gt;
2.5.4) Are you more interested in story or gameplay?&lt;br /&gt;
&lt;br /&gt;
	I think BOTH have to be there for a successful game.  &lt;br /&gt;
	Though to be honest I'm better at critecing story then gameplay.&lt;br /&gt;
&lt;br /&gt;
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether&lt;br /&gt;
you lean towards single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
We do not plan to favor Wesnoth players as such, but some particular projects&lt;br /&gt;
require a good feeling for the game which is hard to get without having played&lt;br /&gt;
intensively.&lt;br /&gt;
&lt;br /&gt;
	I've played Wesnoth for a year or 2, and I play exclusively single player.&lt;br /&gt;
&lt;br /&gt;
2.6) If you have contributed any patches to Wesnoth, please list them below. You&lt;br /&gt;
can also list patches that have been submitted but not committed yet and patches&lt;br /&gt;
that have not been specifically written for GSoC. If you have gained commit&lt;br /&gt;
access to our repository (during the evaluation period or earlier) please state&lt;br /&gt;
so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Communication skills&lt;br /&gt;
&lt;br /&gt;
3.1) Though most of our developers are not native English speakers, English is&lt;br /&gt;
the project's working language. Describe your fluency level in written English.&lt;br /&gt;
&lt;br /&gt;
3.2) What spoken languages are you fluent in?&lt;br /&gt;
&lt;br /&gt;
	English, I can understand a smattering of other languages but not enough &lt;br /&gt;
	to do anything deep or programming specific.&lt;br /&gt;
&lt;br /&gt;
3.3) Are you good at interacting with other players? Our developer community is&lt;br /&gt;
friendly, but the player community can be a bit rough.&lt;br /&gt;
&lt;br /&gt;
3.4) Do you give constructive advice?&lt;br /&gt;
&lt;br /&gt;
	I've been told I do on occasion.&lt;br /&gt;
&lt;br /&gt;
3.5) Do you receive advice well?&lt;br /&gt;
&lt;br /&gt;
	I do if its construtive and not attacking.  If its yelling, screaming, &lt;br /&gt;
	and insults as well, not so much.  How its given usually impacts how well&lt;br /&gt;
	I receive it.&lt;br /&gt;
	&lt;br /&gt;
3.6) Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
&lt;br /&gt;
	Given enough time yes, but the painfully obvious ones I usually see &lt;br /&gt;
	right away.&lt;br /&gt;
&lt;br /&gt;
3.7) How autonomous are you when developing ? Would you rather discuss&lt;br /&gt;
intensively changes and not start coding until you know what you want to do or&lt;br /&gt;
would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the&lt;br /&gt;
risk of having it thrown away if it doesn't match what the project want&lt;br /&gt;
&lt;br /&gt;
	I'm usually fairly autonomous, once the design has been decided, and &lt;br /&gt;
	if it doesn't work and needs a change I sometimes seek councel on what &lt;br /&gt;
	way I should go, but sometimes just go ahead and make the change.&lt;br /&gt;
	Examples:&lt;br /&gt;
	1) The flow needs changing as it doesn't work right, usually I'll seek&lt;br /&gt;
	help figuring it how to change the flow so it does work.&lt;br /&gt;
	2) An array isn't giving the flexablity needed for a function but a &lt;br /&gt;
	list will, I implement the list instead.  And inform whomever needs to &lt;br /&gt;
	know that I have done that change.&lt;br /&gt;
&lt;br /&gt;
4) Project&lt;br /&gt;
&lt;br /&gt;
4.1) Did you select a project from our list? If that is the case, what project&lt;br /&gt;
did you select? What do you want to especially concentrate on?&lt;br /&gt;
&lt;br /&gt;
	I selected one from the list, the implementing the SpriteSheets.  &lt;br /&gt;
	I would like to concentrate on 2 tasks, 1 getting SpriteSheets to just &lt;br /&gt;
	work in wesnoth, and two, provide a script/tool/utility to allow easy &lt;br /&gt;
	converting from the old single images to the sheet (assuming certian &lt;br /&gt;
	naming conventions are followed).&lt;br /&gt;
&lt;br /&gt;
4.2) If you have invented your own project, please describe the project and the&lt;br /&gt;
scope.&lt;br /&gt;
&lt;br /&gt;
	N/A&lt;br /&gt;
&lt;br /&gt;
4.3) Why did you choose this project?&lt;br /&gt;
&lt;br /&gt;
	I chosse it because I understand the concepts behind it, and felt it &lt;br /&gt;
	was a task that I could handle.  It will also force me to learn and &lt;br /&gt;
	will provide immediate gains to all users when the version that &lt;br /&gt;
	includes the change is pushed out.&lt;br /&gt;
&lt;br /&gt;
4.4) Include an estimated timeline for your work on the project. Don't forget to&lt;br /&gt;
mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an&lt;br /&gt;
exam at ABC and won't be doing much then&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	I'm still working out a timeline but I would most likely do a commit &lt;br /&gt;
	at least weekly.  And break out the commits so that similar changes &lt;br /&gt;
	are only in that commit.  Example, comment changes in one, (assuming &lt;br /&gt;
	no code changes), a converted set of sprites (aka the spritesheet) as &lt;br /&gt;
	one, and then code making use of it.  After checking to make sure that &lt;br /&gt;
	the spritesheet works, removal of the converted individual sprite image &lt;br /&gt;
	files.&lt;br /&gt;
	&lt;br /&gt;
4.5) Include as much technical detail about your implementation as you can&lt;br /&gt;
&lt;br /&gt;
	At this point I think I would take 1 sprite (character) and create a &lt;br /&gt;
	spritesheet of it, and then test with that one.  To allow testing I'd &lt;br /&gt;
	likely have it check for a spritesheet if it finds one it uses that, &lt;br /&gt;
	otherwise it uses the individual sprite images, in this way the game &lt;br /&gt;
	still works, until all the sprites have been turned into spritesheets.&lt;br /&gt;
	&lt;br /&gt;
	Once I have completed getting a character spritesheet to work, I'd &lt;br /&gt;
	then move on to the map sprites to spritesheets, again using the same &lt;br /&gt;
	methodology of check and if it finds a spritesheet use it otherwise, &lt;br /&gt;
	use the individual images.  Though, on the grouping I'm not sure how &lt;br /&gt;
	I'd do that mordante and I'd have to discuss grouping, since a map can &lt;br /&gt;
	have any or all of the different tiles, and they are not chained like &lt;br /&gt;
	the unit/character sprites are, I'd have to group simliar tiles together.&lt;br /&gt;
	Like the water images, shorelines, docks, and water villages, as one.&lt;br /&gt;
	The feilds, human villages and castles in one.  Swamp things together, &lt;br /&gt;
	and so on.&lt;br /&gt;
&lt;br /&gt;
4.6) What do you expect to gain from this project?&lt;br /&gt;
&lt;br /&gt;
	Experience, learning to work on a team where most actually pull their &lt;br /&gt;
	own weight and the success of the project as a whole is not on my &lt;br /&gt;
	shoulders.  This is too big a project for me to even think of that!  &lt;br /&gt;
	and I'd not be able to, not in 3 months.&lt;br /&gt;
&lt;br /&gt;
4.7) What would make you stay in the Wesnoth community after the conclusion of&lt;br /&gt;
SOC?&lt;br /&gt;
&lt;br /&gt;
	Finding that the community is a non-hostile place to contribute, that &lt;br /&gt;
	individuals are treated with courtsey or the respect they have earned.&lt;br /&gt;
	That I'm encouraged to help other areas of the code, such as, &amp;quot;Aishi, &lt;br /&gt;
	the spritesheets work, do you think you could help with the transistion &lt;br /&gt;
	effects for the map?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Practical considerations&lt;br /&gt;
&lt;br /&gt;
5.1) Are you familiar with any of the following tools or languages?&lt;br /&gt;
&lt;br /&gt;
    Git (used for all commits)&lt;br /&gt;
    	Enough to realize I don't like it and find it hard to use, but&lt;br /&gt;
    	if I can get some help working out how to do it a few times&lt;br /&gt;
	I'm confident that I can get it.&lt;br /&gt;
    C++ (language used for all the normal source code)&lt;br /&gt;
    	Its my favourite language and I'm comfortable using the language&lt;br /&gt;
    	and looking up what I don't know and making it work.  I'm also not&lt;br /&gt;
    	afraid to ask, for help/documentation if I get stuck.&lt;br /&gt;
    STL, Boost, Sdl (C++ libraries used by Wesnoth)&lt;br /&gt;
    	I've not, YET.  Well I might, I never really looked into where a lib or &lt;br /&gt;
    	function comes from when I use, I'll have to pay a bit more attention &lt;br /&gt;
    	now.  But they are no on my documentation read list, I'm confident&lt;br /&gt;
    	that by the time coding begins that I'll be able to leverage them to &lt;br /&gt;
    	obtain results, and be more effienent as I go.  Even going back and &lt;br /&gt;
    	making a section more effient if I realize that I over looked a better &lt;br /&gt;
    	tool then I orginally used.&lt;br /&gt;
    Python (optional, mainly used for tools)&lt;br /&gt;
    	I'm familiar enough to use it, follow it (assuming good coding &lt;br /&gt;
    	conventions are followed).&lt;br /&gt;
    build environments (eg cmake/scons)&lt;br /&gt;
    	I tend to use cmake and the gcc compiler, basically I use which ever &lt;br /&gt;
    	build environment I have available and if its a new one I look up (via &lt;br /&gt;
    	the man page or the internet) how to use it, and if the defaults &lt;br /&gt;
    	settings don't work to add flags/options to get it to compile.&lt;br /&gt;
    WML (the wesnoth specific scenario language)&lt;br /&gt;
    	Absolutely none before now, again on my read list&lt;br /&gt;
    Lua (used in combination with WML to create scenarios)&lt;br /&gt;
    	None but I don't create senarios at this point, and if its only used &lt;br /&gt;
    	in that context, it shouldn't have any barring on the project(s) I'm &lt;br /&gt;
    	interested in doing at this point. &lt;br /&gt;
&lt;br /&gt;
5.2) Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
	Kate, as its just what I'm used to, I like how it's mimaliztic and &lt;br /&gt;
	non-intrutsive.&lt;br /&gt;
	Visual Studio for my C# class because that is what they have to work &lt;br /&gt;
	in when I turn it in.&lt;br /&gt;
&lt;br /&gt;
5.3) What programming languages are you fluent in?&lt;br /&gt;
	I'm not sure what you mean by fluent, if you mean know every builtin &lt;br /&gt;
	function and every conseviable combination of calls, I doubt very many &lt;br /&gt;
	could claim to be fluent.  However if you mean, comfortable, and able &lt;br /&gt;
	to figure out things you don't knoe, either by looking it up or by &lt;br /&gt;
	context then C (and its children, C++, C#, Arduino) python, and PHP.  &lt;br /&gt;
	After being fluent in English doesn't mean you know every word or &lt;br /&gt;
	special rule for the language.&lt;br /&gt;
&lt;br /&gt;
5.4) Would you mind talking with your mentor on telephone / internet phone? We&lt;br /&gt;
would like to have a backup way for communications for the case that somehow&lt;br /&gt;
emails and IRC do fail. If you are willing to do so, please do list a phone&lt;br /&gt;
number (including international code) so that we are able to contact you. You&lt;br /&gt;
should probably *only* add this number in the application for you submit to&lt;br /&gt;
google since the info in the wiki is available in public. We will *not* make any&lt;br /&gt;
use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does&lt;br /&gt;
arise!&lt;br /&gt;
	I wouldn't mind and in some cases prefer it.  I'm not the most observant &lt;br /&gt;
	when it comes to my email, I usually just get notices and spam that can &lt;br /&gt;
	be ignored (high noise to signal ratio in my mailbox at the moment).  &lt;br /&gt;
	Though when expecting something I check it more often at least once a &lt;br /&gt;
	day if not more.&lt;br /&gt;
&lt;br /&gt;
Comments and Suggestions Please place them after this line, Thank you.&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53303</id>
		<title>EasyCoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53303"/>
		<updated>2014-02-28T21:32:32Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* More powerful village naming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Foreword ==&lt;br /&gt;
&lt;br /&gt;
'''We are permanently updating this page. Parts marked by &amp;lt;s&amp;gt;strikeout&amp;lt;/s&amp;gt; will likely be deleted shortly.&lt;br /&gt;
&lt;br /&gt;
This page is here to document easy to do coding tasks. It is not here to double the feature request database, and should only be filled by people that know the code well enough to judge the difficulty of a given task. &lt;br /&gt;
&lt;br /&gt;
If you are such a person, you should feel free to edit this page.&lt;br /&gt;
&lt;br /&gt;
If you're not, you should post a feature request and discuss your idea on the forum or IRC. A coder with better knowledge of the code might give you the green light to add your feature here.&lt;br /&gt;
&lt;br /&gt;
Anybody should feel free to add &amp;quot;clues&amp;quot; to any tasks, that is entry points, traps to avoid, person to contact to discuss and so on.&lt;br /&gt;
&lt;br /&gt;
If you plan to work on a feature, write your name at the bottom of the feature, with the date. Note that if you are too long at working on a feature I'll &amp;quot;free&amp;quot; it back (that is if you're not working on it. If you have problems implementing it, just tell us....)&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If none of these are to your liking, feel free to check our [http://gna.org/bugs/?group=wesnoth bug tracker] with a broad spectrum of tasks.&lt;br /&gt;
&lt;br /&gt;
== MP related features ==&lt;br /&gt;
&lt;br /&gt;
=== Add possibility to switch off dependency checking ===&lt;br /&gt;
MP add-ons can define dependencies. Currently there's no way to force a &amp;quot;broken&amp;quot; configuration, although overzealous use of the system by UMC authors could make this feature useful. Add an option to the MP game creation screen to switch on/off dependency checking. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== WML related features ==&lt;br /&gt;
&lt;br /&gt;
=== Side-specific results ===&lt;br /&gt;
Giving result=defeat or result=victory for specific sides. ([http://gna.org/bugs/index.php?4960 FR #4960]) -- [[User:dlr365|dlr365]] -- patch submitted [https://gna.org/bugs/index.php?4960]&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]] 08:58, 28 February 2010 (UTC) Patch seems abandonned, but can be used for further work feel free to take over the FR&lt;br /&gt;
&lt;br /&gt;
=== Support for leaderless multiplayergames ===&lt;br /&gt;
Add support for the WML key victory_when_enemies_defeated= in the scenario tag during multiplayergames. ([https://gna.org/bugs/index.php?8106 FR #8106])&lt;br /&gt;
&lt;br /&gt;
=== Support variable recall cost in wml ===&lt;br /&gt;
see https://gna.org/bugs/?16538&lt;br /&gt;
&lt;br /&gt;
the syntax needs to be discussed and refined, but the overall idea is good&lt;br /&gt;
&lt;br /&gt;
make sure to update whiteboard to handle this correctly&lt;br /&gt;
&lt;br /&gt;
Ask Boucman&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
See [[FutureWML]]; some ideas there are easier than others.&lt;br /&gt;
&lt;br /&gt;
== Improvements to AI ==&lt;br /&gt;
&lt;br /&gt;
Note: not all of these might be simple tasks.  Talk to Crab or mattsc.&lt;br /&gt;
&lt;br /&gt;
* Add option to take avoided hexes into account in wesnoth.find_path()&lt;br /&gt;
&lt;br /&gt;
* Make the (old) simple aspect syntax work when the Lua engine is defined for a side.  Setting aspects in the [side] tag like this:&lt;br /&gt;
 [ai]&lt;br /&gt;
     aggression=0.123&lt;br /&gt;
 [/ai]&lt;br /&gt;
does not work if the Lua engine is defined. You either need to use the [aspect] tag in the [side] tag with 'engine=lua', or use the code above in a [modify_side] tag in an event.  Making the above syntax available (as it is with the c++ engine) would be nice.  The same also applies to the FAI engine and to aspects set for AI sides in MP games.&lt;br /&gt;
&lt;br /&gt;
* Add a Lua function ai.get_individual_attacks() that returns all the single attacks the side can do (as opposed to attack combinations).  This needs to include an option to recalculate and take the current situation on the map into account (making the function believe that the game state has changed).&lt;br /&gt;
&lt;br /&gt;
* Set up an option the allows us to exclude units from the move-to-targets phase similar to [filter_own] for the combat phase (other than setting ai_special=guardian, which has a number of other side effects). Actually, having this option for all CA's would be nice.&lt;br /&gt;
&lt;br /&gt;
* Change the aspects &amp;quot;passive_leader&amp;quot;, &amp;quot;passive_leader_shares_keep&amp;quot;, &amp;quot;leader_ignores_keep&amp;quot; to work with multiple leaders. The idea is to change the type of those aspects from yes/no to string so both &amp;quot;passive_leader=yes&amp;quot; and &amp;quot;passive_leader=leader_id_1,leader_id_2&amp;quot; is possible.&lt;br /&gt;
&lt;br /&gt;
* ai.get_new_enemy_dst_src and related functions have several problems:&lt;br /&gt;
** They use the current moves of the enemy units, which generally are all zero.&lt;br /&gt;
** Hexes occupied by other enemy units count as not reachable.&lt;br /&gt;
**Units with zero moves are not listed at all, not even for the hex they are on.&lt;br /&gt;
**Working around this with a Lua wrapper makes this actually slower than ai_helper.get_enemy_dst_src, which makes the functions pretty much useless, as speed is the only thing speaking for them.&lt;br /&gt;
&lt;br /&gt;
* Clean up Micro AI candidate actions code.  The Micro AIs were developed over quite a long period while we were trying to figure out how all of this works (and in part also by students participating in the Google Code-in project).  As a result, the code in some of them is quite inconsistent, not cleaned up, uncommented (or wrongly commented), etc.  '''Important notes:'''&lt;br /&gt;
**This is not meant as a single task, but rather as a series of tasks, involving individual MAIs or sets of related MAIs. Please do not submit a pull request in which the code of all MAIs has been modified. &lt;br /&gt;
**The Micro AIs are still being worked on pretty constantly, so if you are planning to work on this task, please let mattsc know (either on IRC or via forum PM), so that we can avoid conflicts as much as possible.&lt;br /&gt;
&lt;br /&gt;
* Add new options (keys or tags) to the Micro AIs.  As an example, some (but certainly not all) Micro AIs might benefit from taking some (but certainly not all) of the default AI aspects into account.&lt;br /&gt;
&lt;br /&gt;
* Write a script that automatically changes WML from the deprecated [ai][target] to the new [ai][goal] syntax.  Ideally, this would be part of wmllint.&lt;br /&gt;
** There are [http://wiki.wesnoth.org/AiWML#Deprecated_AI_Targeting_Aspects more deprecated AI aspect] which should eventually be added to this, but the [target] -&amp;gt; [goal] change would be a good and important start.&lt;br /&gt;
&lt;br /&gt;
== GUI related features ==&lt;br /&gt;
&lt;br /&gt;
Although Mordante developed the new GUI system GUI2, some dialogs still use the older GUI1 and could be improved or transferred. You should contact Mordante on IRC before starting to work on these.&lt;br /&gt;
&lt;br /&gt;
=== Theme Changes ===&lt;br /&gt;
&lt;br /&gt;
* hide the hourglass item from the statusbar when there is no timer&lt;br /&gt;
&lt;br /&gt;
=== Widget Changes ===&lt;br /&gt;
* make games sortable in the lobby (open slots, total number of players, era, XP modifier, gold per village, fog/shroud)&amp;lt;br&amp;gt;a GUI2 lobby is currently being developed, ask mordante whether this is still relevant&lt;br /&gt;
* input history (chat, commands, ..)&lt;br /&gt;
&lt;br /&gt;
== GUI2 related features ==&lt;br /&gt;
GUI2 is the new gui engine Mordante/SkeletonCrew is working on. &lt;br /&gt;
* Information on the wiki can be found here http://www.wesnoth.org/wiki/GUIToolkit&lt;br /&gt;
* The source code is under src/gui/&lt;br /&gt;
* The configuration config files are under data/gui/default&lt;br /&gt;
&lt;br /&gt;
Some tasks need the --new-widgets since the code is only shown in the experimental mode. Tasks which need this switch have the * in the title.&lt;br /&gt;
&lt;br /&gt;
=== Port the random map generator dialog to GUI2 ===&lt;br /&gt;
The map generator currently doesn't use the GUI2 framework, but there's no reason why it couldn't. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
=== More powerful village naming ===&lt;br /&gt;
'''Adding mountain names and other features to village names, having a second random name in village names'''&lt;br /&gt;
&lt;br /&gt;
Currently the village naming engine has a very good structure that could allow more powerful names to be generated. &lt;br /&gt;
Understanding how it works should be quite easy, and a few useful improvements could be added.&lt;br /&gt;
&lt;br /&gt;
* Currently villages can use lake names and river names, this should be extended to other features like bridges, swamps, mountains etc...&lt;br /&gt;
* It would be nice to have a separate list of &amp;quot;first syllabus&amp;quot; and &amp;quot;last syllabus&amp;quot; for naming. That's not really needed in English, but some translations could use it&lt;br /&gt;
* Again, it is common to have villages with more than one &amp;quot;random&amp;quot; word in them. having a $name2 variable would be nice&lt;br /&gt;
&lt;br /&gt;
Turns out this was already done, and should be removed.&lt;br /&gt;
&lt;br /&gt;
=== Debug Mode ===&lt;br /&gt;
* New debug command functionality (setting additional status.variables, possibly terrain)&lt;br /&gt;
&lt;br /&gt;
=== wesnoth-optipng ===&lt;br /&gt;
For lossless png compression we use wesnoth-optipng, a script using an external toolchain (ImageMagick, OptiPNG, Advdef). Perhaps the performance could be improved by using PNGOut instead of advdef. This task includes&lt;br /&gt;
* a quick profiling of compression ratio and decompression speed for both tools&lt;br /&gt;
* if it provides a higher compression while not significantly slowing down decompression, adapt wesnoth-optipng to use PNGOut&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[NotSoEasyCoding]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Future]]&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53292</id>
		<title>EasyCoding</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EasyCoding&amp;diff=53292"/>
		<updated>2014-02-27T16:40:58Z</updated>

		<summary type="html">&lt;p&gt;Aishiko: /* More powerful village naming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Foreword ==&lt;br /&gt;
&lt;br /&gt;
'''We are permanently updating this page. Parts marked by &amp;lt;s&amp;gt;strikeout&amp;lt;/s&amp;gt; will likely be deleted shortly.&lt;br /&gt;
&lt;br /&gt;
This page is here to document easy to do coding tasks. It is not here to double the feature request database, and should only be filled by people that know the code well enough to judge the difficulty of a given task. &lt;br /&gt;
&lt;br /&gt;
If you are such a person, you should feel free to edit this page.&lt;br /&gt;
&lt;br /&gt;
If you're not, you should post a feature request and discuss your idea on the forum or IRC. A coder with better knowledge of the code might give you the green light to add your feature here.&lt;br /&gt;
&lt;br /&gt;
Anybody should feel free to add &amp;quot;clues&amp;quot; to any tasks, that is entry points, traps to avoid, person to contact to discuss and so on.&lt;br /&gt;
&lt;br /&gt;
If you plan to work on a feature, write your name at the bottom of the feature, with the date. Note that if you are too long at working on a feature I'll &amp;quot;free&amp;quot; it back (that is if you're not working on it. If you have problems implementing it, just tell us....)&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If none of these are to your liking, feel free to check our [http://gna.org/bugs/?group=wesnoth bug tracker] with a broad spectrum of tasks.&lt;br /&gt;
&lt;br /&gt;
== MP related features ==&lt;br /&gt;
&lt;br /&gt;
=== Add possibility to switch off dependency checking ===&lt;br /&gt;
MP add-ons can define dependencies. Currently there's no way to force a &amp;quot;broken&amp;quot; configuration, although overzealous use of the system by UMC authors could make this feature useful. Add an option to the MP game creation screen to switch on/off dependency checking. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== WML related features ==&lt;br /&gt;
&lt;br /&gt;
=== Side-specific results ===&lt;br /&gt;
Giving result=defeat or result=victory for specific sides. ([http://gna.org/bugs/index.php?4960 FR #4960]) -- [[User:dlr365|dlr365]] -- patch submitted [https://gna.org/bugs/index.php?4960]&lt;br /&gt;
&lt;br /&gt;
--[[User:Boucman|Boucman]] 08:58, 28 February 2010 (UTC) Patch seems abandonned, but can be used for further work feel free to take over the FR&lt;br /&gt;
&lt;br /&gt;
=== Support for leaderless multiplayergames ===&lt;br /&gt;
Add support for the WML key victory_when_enemies_defeated= in the scenario tag during multiplayergames. ([https://gna.org/bugs/index.php?8106 FR #8106])&lt;br /&gt;
&lt;br /&gt;
=== Support variable recall cost in wml ===&lt;br /&gt;
see https://gna.org/bugs/?16538&lt;br /&gt;
&lt;br /&gt;
the syntax needs to be discussed and refined, but the overall idea is good&lt;br /&gt;
&lt;br /&gt;
make sure to update whiteboard to handle this correctly&lt;br /&gt;
&lt;br /&gt;
Ask Boucman&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
See [[FutureWML]]; some ideas there are easier than others.&lt;br /&gt;
&lt;br /&gt;
== Improvements to AI ==&lt;br /&gt;
&lt;br /&gt;
Note: not all of these might be simple tasks.  Talk to Crab or mattsc.&lt;br /&gt;
&lt;br /&gt;
* Add option to take avoided hexes into account in wesnoth.find_path()&lt;br /&gt;
&lt;br /&gt;
* Make the (old) simple aspect syntax work when the Lua engine is defined for a side.  Setting aspects in the [side] tag like this:&lt;br /&gt;
 [ai]&lt;br /&gt;
     aggression=0.123&lt;br /&gt;
 [/ai]&lt;br /&gt;
does not work if the Lua engine is defined. You either need to use the [aspect] tag in the [side] tag with 'engine=lua', or use the code above in a [modify_side] tag in an event.  Making the above syntax available (as it is with the c++ engine) would be nice.  The same also applies to the FAI engine and to aspects set for AI sides in MP games.&lt;br /&gt;
&lt;br /&gt;
* Add a Lua function ai.get_individual_attacks() that returns all the single attacks the side can do (as opposed to attack combinations).  This needs to include an option to recalculate and take the current situation on the map into account (making the function believe that the game state has changed).&lt;br /&gt;
&lt;br /&gt;
* Set up an option the allows us to exclude units from the move-to-targets phase similar to [filter_own] for the combat phase (other than setting ai_special=guardian, which has a number of other side effects). Actually, having this option for all CA's would be nice.&lt;br /&gt;
&lt;br /&gt;
* Change the aspects &amp;quot;passive_leader&amp;quot;, &amp;quot;passive_leader_shares_keep&amp;quot;, &amp;quot;leader_ignores_keep&amp;quot; to work with multiple leaders. The idea is to change the type of those aspects from yes/no to string so both &amp;quot;passive_leader=yes&amp;quot; and &amp;quot;passive_leader=leader_id_1,leader_id_2&amp;quot; is possible.&lt;br /&gt;
&lt;br /&gt;
* ai.get_new_enemy_dst_src and related functions have several problems:&lt;br /&gt;
** They use the current moves of the enemy units, which generally are all zero.&lt;br /&gt;
** Hexes occupied by other enemy units count as not reachable.&lt;br /&gt;
**Units with zero moves are not listed at all, not even for the hex they are on.&lt;br /&gt;
**Working around this with a Lua wrapper makes this actually slower than ai_helper.get_enemy_dst_src, which makes the functions pretty much useless, as speed is the only thing speaking for them.&lt;br /&gt;
&lt;br /&gt;
* Clean up Micro AI candidate actions code.  The Micro AIs were developed over quite a long period while we were trying to figure out how all of this works (and in part also by students participating in the Google Code-in project).  As a result, the code in some of them is quite inconsistent, not cleaned up, uncommented (or wrongly commented), etc.  '''Important notes:'''&lt;br /&gt;
**This is not meant as a single task, but rather as a series of tasks, involving individual MAIs or sets of related MAIs. Please do not submit a pull request in which the code of all MAIs has been modified. &lt;br /&gt;
**The Micro AIs are still being worked on pretty constantly, so if you are planning to work on this task, please let mattsc know (either on IRC or via forum PM), so that we can avoid conflicts as much as possible.&lt;br /&gt;
&lt;br /&gt;
* Add new options (keys or tags) to the Micro AIs.  As an example, some (but certainly not all) Micro AIs might benefit from taking some (but certainly not all) of the default AI aspects into account.&lt;br /&gt;
&lt;br /&gt;
* Write a script that automatically changes WML from the deprecated [ai][target] to the new [ai][goal] syntax.  Ideally, this would be part of wmllint.&lt;br /&gt;
** There are [http://wiki.wesnoth.org/AiWML#Deprecated_AI_Targeting_Aspects more deprecated AI aspect] which should eventually be added to this, but the [target] -&amp;gt; [goal] change would be a good and important start.&lt;br /&gt;
&lt;br /&gt;
== GUI related features ==&lt;br /&gt;
&lt;br /&gt;
Although Mordante developed the new GUI system GUI2, some dialogs still use the older GUI1 and could be improved or transferred. You should contact Mordante on IRC before starting to work on these.&lt;br /&gt;
&lt;br /&gt;
=== Theme Changes ===&lt;br /&gt;
&lt;br /&gt;
* hide the hourglass item from the statusbar when there is no timer&lt;br /&gt;
&lt;br /&gt;
=== Widget Changes ===&lt;br /&gt;
* make games sortable in the lobby (open slots, total number of players, era, XP modifier, gold per village, fog/shroud)&amp;lt;br&amp;gt;a GUI2 lobby is currently being developed, ask mordante whether this is still relevant&lt;br /&gt;
* input history (chat, commands, ..)&lt;br /&gt;
&lt;br /&gt;
== GUI2 related features ==&lt;br /&gt;
GUI2 is the new gui engine Mordante/SkeletonCrew is working on. &lt;br /&gt;
* Information on the wiki can be found here http://www.wesnoth.org/wiki/GUIToolkit&lt;br /&gt;
* The source code is under src/gui/&lt;br /&gt;
* The configuration config files are under data/gui/default&lt;br /&gt;
&lt;br /&gt;
Some tasks need the --new-widgets since the code is only shown in the experimental mode. Tasks which need this switch have the * in the title.&lt;br /&gt;
&lt;br /&gt;
=== Port the random map generator dialog to GUI2 ===&lt;br /&gt;
The map generator currently doesn't use the GUI2 framework, but there's no reason why it couldn't. Ask lipk (forum)/lipkab (IRC).&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
=== More powerful village naming ===&lt;br /&gt;
'''Adding mountain names and other features to village names, having a second random name in village names'''&lt;br /&gt;
&lt;br /&gt;
Currently the village naming engine has a very good structure that could allow more powerful names to be generated. &lt;br /&gt;
Understanding how it works should be quite easy, and a few useful improvements could be added.&lt;br /&gt;
&lt;br /&gt;
* Currently villages can use lake names and river names, this should be extended to other features like bridges, swamps, mountains etc...&lt;br /&gt;
* It would be nice to have a separate list of &amp;quot;first syllabus&amp;quot; and &amp;quot;last syllabus&amp;quot; for naming. That's not really needed in English, but some translations could use it&lt;br /&gt;
* Again, it is common to have villages with more than one &amp;quot;random&amp;quot; word in them. having a $name2 variable would be nice&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aishiko 27/02/2014&lt;br /&gt;
&lt;br /&gt;
=== Debug Mode ===&lt;br /&gt;
* New debug command functionality (setting additional status.variables, possibly terrain)&lt;br /&gt;
&lt;br /&gt;
=== wesnoth-optipng ===&lt;br /&gt;
For lossless png compression we use wesnoth-optipng, a script using an external toolchain (ImageMagick, OptiPNG, Advdef). Perhaps the performance could be improved by using PNGOut instead of advdef. This task includes&lt;br /&gt;
* a quick profiling of compression ratio and decompression speed for both tools&lt;br /&gt;
* if it provides a higher compression while not significantly slowing down decompression, adapt wesnoth-optipng to use PNGOut&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[NotSoEasyCoding]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Future]]&lt;/div&gt;</summary>
		<author><name>Aishiko</name></author>
		
	</entry>
</feed>