Player's point of view is quite clear now...
Since I decided to continue the project I started to think again in all the things I could make to improve it, and the first thing was to make it clear where players / foes were looking at, it's basic to make you know:
- Where are you going (the red dot did not helped a lot)
- Where are going all the other players / enemies
- Can I ambush somebody?, am I being ambushed?
SPRIG: The SDL Primitive Generator
A great job from Jhonny D
To use the library you will need the subversion client, (in linux "sudo apt-get install subversion", in Windows you can use Tortoise SVN client, for example)
To download / install it under linux:
svn checkout http://sprig.googlecode.com/svn/trunk/ sprig
cd sprig
make
sudo make install
(Haven't tested it under windows yet)
I created a new function: RotateBlitTileset( x,y,image,angle), that functions draws the rotated tile (image) at x,y.
void Engine::RotateBlitTileset(int x, int y, int tile, float Angle) //Rotate and Blits a tile from our tileset to the screen { SDL_Surface * tmpBlit = SDL_CreateRGBSurface(SDL_SWSURFACE|SDL_SRCCOLORKEY |SDL_RLEACCEL,TileSize,TileSize,32,0,0,0,0); SDL_Surface * tmpBlit2 = SDL_CreateRGBSurface(SDL_SWSURFACE|SDL_SRCCOLORKEY |SDL_RLEACCEL,TileSize,TileSize,32,0,0,0,0); //1-fill temporary surface with pink SDL_FillRect(tmpBlit, 0, SDL_MapRGB(tmpBlit->format, 255, 0, 255)); start.x= (tile%10)*TileSize; //Column = tile % 8 (0-7) start.y= (tile/10)*TileSize; //Row = tile / 8 (0-7) start.w=TileSize; start.h=TileSize; end.x =0; // X end.y =0; // Y end.w = TileSize; end.h = TileSize;
//2-Blit the desired tile to the temporary surface SDL_BlitSurface(tileset, &start, tmpBlit, &end); //3-I call sprig function SPG_Rotate() to rotate the temporary surface and get the resulting surface into a 2nd temporary surface tmpBlit2 = SPG_Rotate(tmpBlit, Angle -90, SDL_MapRGB(tmpBlit-> format, 255, 0, 255)); SDL_SetColorKey(tmpBlit2,SDL_SRCCOLORKEY |SDL_RLEACCEL,SDL_MapRGB(tmpBlit2-> format, 255, 0, 255));//set the color key start.x=0; start.y=0; start.w=TileSize; start.h=TileSize; //set the cliping for the destination surface (the screen) end.x =x; // X end.y =y; // Y end.w = TileSize; end.h = TileSize; SDL_BlitSurface(tmpBlit2, NULL, screen, &end); //Blits the rotated tile to the screen SDL_FreeSurface( tmpBlit); SDL_FreeSurface( tmpBlit2); }
Notice I can't just call Sprig rotate function because I would get a rotated tile with pink background, so I have to use the tmp surface to set the color-key, that way is not optimized at all so I will think in a way to make it faster later, but at the moment is ok.
In the next post: Let's chat!