Now regarding batching, I've never worked with this before and have no clue what to do with it. So I may just be missing what you're saying, but I don't know what to do exactly to move the coords for each "creature/texture". If batching is the way to do it, I still have no clue how to do it with VBO's xD.
To keep things simple, let's forget about batching for now. It's just an optimization, and one that you may not even need.
I guess the thing I'm still stuck on is.. so the vertex Vbo I have saves the data for the location. You're saying a static mesh doesn't change, but for a game the texture for each creature/item/entity can and most likely will move. Therefore the data will change, so I would need to do something to chanhe that data That's what I thought the SubData mathod was for, but I didn't understand how that was done.
I think I understand buffers... but I guess the way data (x,y) for each vertex is stored/changed is a little unclear for me cause Idk what to do to change it :/
Although I think I understand what you're getting at above, there are several things there that are inaccurate or incorrect as stated. There are probably some things that need to be cleared up conceptually here. Apologies if this seems too basic, but it might be worth clarifying some terminology.
A mesh, as you probably know, is a collection of data such as vertex positions, texture coordinates, and so on that can be used to render something. (The quads you're working with are meshes, just simple ones.) A texture is an image that's 'painted' onto mesh geometry. For a simple 2-d game, entities are often just quad meshes with a single texture (I think that's what you're doing).
A transform specifies how some set of geometry should be positioned, oriented, and otherwise shaped and placed in the world. Transforms can be pretty complex, but for a 2-d game all you usually need is translation (the position of the object), and maybe scale (its size) and orientation (what angle it's at). If your entities don't change size and never rotate, all you need is translation (position). In the OpenGL fixed-function pipeline, there's a family of functions (e.g. glTranslatef() and so on) that allow you to specify the transform for the next draw call.
An entity in your game will typically consist of a mesh, a texture, and a transform. I think some of your confusion is in thinking that the mesh and/or texture somehow have to 'move' if your entity moves. They don't. The mesh and texture can be entirely static and unchanging; you move the entity by changing the transform.
mesh+texture+transform = entity
Mesh and texture are static, transform changes as needed.
Once again I'll stop there due to length, but maybe that will help clear things up a bit.