Things that could be done faster (in order of importance): * Use some partitioning scheme to make collision detection be less than O(N^2). * Implement cropping of individual sprite frames to save memory. RLE accel already takes care of this to a degree. * Sprites that are just for display (ie effects) does not need masks or all of the features of regular sprites. Make them a separate type of object. * Change alarms from O(nr waiting) to O(nr active) (ie to a sorted queue).