Right now collision checks will continue after finding a floor or ceil to be very certain that a another tri shouldn't have been hit instead.
In find_floor_from_list, it seems that having if (floor && surf->upperY < floor->lowerY) break; at the top of the loop could improve performance. This is a good check because it insures that you have found a floor, and that the current floors highest point is lower than the previously collided floor's lowest point. And because of sort order, there's no reason to continue checking after this point.
The same but reversed could be done for ceilings.
Right now collision checks will continue after finding a floor or ceil to be very certain that a another tri shouldn't have been hit instead.
In
find_floor_from_list, it seems that havingif (floor && surf->upperY < floor->lowerY) break;at the top of the loop could improve performance. This is a good check because it insures that you have found a floor, and that the current floors highest point is lower than the previously collided floor's lowest point. And because of sort order, there's no reason to continue checking after this point.The same but reversed could be done for ceilings.