Sorry to take so long to reply. I needed to have my code handy for copy-paste.
So, I use the osc mode by loading it in my game class; I did not hack the game.py to include it (not that I haven't hacked my game.py, though).
So, in my game class' python file, I do the following.
# add support for OSC
OSC_closed_switches = ['troughL','troughC','troughR']
self.osc = modes.OSC_Mode(game=self, priority=1, closed_switches=OSC_closed_switches)
but it's worth noting that if you want to do things 'right' you have to be prepared that your init() or your run_loop() might fail, so most my init() function call is defined in a try block and the except calls end_run_loop() -- in main, my run_loop() is in a try and the except there also calls end_run_loop(). end_run_loop() is responsible for killing osc mode if it's there and active, like such:
if(hasattr(self,'osc') and self.osc is not None):
In the Except for init, I reraise the original exception. Going beyond simply calling 'raise' at the end of an except, it makes sense to store the original exception and reraise it to preserve the original call stack and line numbers. This block explains it pretty well:http://www.ianbicking.org/blog/2007/09/re-raising-exceptions.html
Of course, this should be the default behavior not just in Buffy but also in SkeletonGame; I guess I should double check this is actually the case