I've made a collision system that I've nicknamed dynamic incremental collision. That might not be its actual name, but I like it. Essentially, the way it works is by moving the player in small steps in the x direction until they hit a wall, and then they move back. Then they move in the y direction in the same way. The dynamic part comes from how if the player is not moving diagonally, they can slip past small obstacles, defined by the slope variable. In this project, I have it set to four.