Efficient hitboxes?

I’m making an RPG.
There are two things I’d like to accomplish:
1.) I really want my game to be relatively light on RAM
2.) I want to keep my game code concise and readable.
Is there any way in which I can create an efficient hitbox system that differs per room?
for instance, creating a series of hitboxes to accompany each room, like this:


I’d load the hitboxes (not the room) as a png and place it under the actual rendered objects to provide a guide for the player collision detection. Unfortunately, I can’t find a good way to make the hitboxes accurate to the png edges/alpha without creating a seemingly unnecessarily large amount of lines of code listing each collision box.
Does anyone have a way to shorten this process?
I’d also like to figure out how to create a good textbox/dialogue system without loading every single line of text at the start of the game into a million different SDL_TTF objects.

Thanks for reading my essay, and sorry if I sound stupid.

Just have a list of hitboxes as rectangles and check the player’s position against them. And when the player goes to a different room, free the hitboxes for the previous room and load in the ones for the current room.

And by all means, do not load every line of dialog as a separate object.

How experienced with programming are you?

1.) I don’t want to do this, as it will turn half my code into a list of points/dimensions. I have thought about using regex files for each room tho.
2.) I won’t, I was asking about how I could avoid this, like some kind of function that modifies a single object.
3.) I’m pretty well rounded in C++ but am new to SDL2

  1. Huh? Load the hit boxes for the current room from a file into a vector, then iterate through it.
  2. Same idea as #1. Only render the text for the current conversation. Perhaps use something like stb_ttf that lets you render the text dynamically instead of having to create static textures like SDL_TTF does. Even with SDL_TTF though, render the text for the current conversation and then destroy it when the conversation is finished.
  3. I don’t mean to sound snobby or come across like a jerk, but neither of these are hard problems, except maybe for beginners.

Yeah I did come across that idea while thinking today. I actually have a regex parser at the ready, I could just turn that into a function that pushes back into vector(s?) until the EOF and clear it every time I enter a new room
I’ll do some research on sdb_ttf too.
okeg, problem solved, thanks. c:

Additionally, I fixed my text problem easily by doing this:
1.) Created one text object
2.) Make a void function with the parameters (int x, int y, std::string dialogue) that loads the text into said object and renders it to the given position.
3.) Use that function in my main loop
idk why I didn’t think of this earlier

“Hitboxes” specifically refers to boxes, ie the rectangles that @sjr recommended. They’re extremely efficient, at the cost of not being particularly precise if the things you’re trying to hit-test against are not perfectly rectangular.

Using a graphic to determine hits is called masking. It’s a different technique from hitboxes. It’s far more precise, but less efficient both in terms of memory and CPU usage.

If you can spare the memory, a good “best of both worlds” approach to doing precise hit testing with minimal CPU usage is to generate a mask, and also a hit box big enough to encompass the entire mask. Test to see if something hits the box (super cheap), and when you get a hit, only then do you test against the mask (more expensive but now rare.)