Seems like I wasn't listening for some time

Well, the way it was meant to work with DirectDrawSurfaces is to allocate them in objects you store the pictures of in, loading when your program does the loading and freeing when it won't be used again (thus avoiding the many allocating, constructing and image loadings) and draw them directly on the main surface.

As for the "hit boxes", I did mean rotated bounding boxes, yes. And to check if they're inside or outside of them, you need to use the normal vectors of the edge vectors cast on the point, then you can count if the point is on which side of the original vector quite CPU efficiently I guess. At least this would be the way I'd do it, instead of pixel-checking ^^ However, for hit checking, you can as well draw the needed-to-check pictures on the main surface when the frame starts then just draw a fillrect on them. However I'm not sure it'd be much diff from your way