(1) Improve the area tile rendering by caching an entire tile layer and running it using glDrawArrays or glDrawElements
This will require all sprites from a given layer to come from the spritesheet.
This should result in a big performance improvement.
(2) Do the same thing for a particle generator. It should be possible to render all the particles associated with a particle generator with one call to glDrawArrays.