I'm actually getting so nostalgic looking at this code. I remember writing little pygame applications and some scratch stuff too with these huge overarching systems. Also I like the way you're handling your level design. It reminds me of when I was writing an Undertale-esque game that used a black filled variant to act as collision for ground that got pasted over with the colored visual variant. Good stuff.