+ } else if (MenuManager::current()) {
+Index: src/object/player.cpp\r
+===================================================================\r
+--- src/object/player.cpp (revision 6139)\r
++++ src/object/player.cpp (working copy)\r
+@@ -152,7 +152,7 @@\r
+ climbing(0)
+ {
+ this->name = name;
+- controller = g_main_controller;
++ controller = (name == "Penny") ? g_secondary_controller : g_main_controller;
+ scripting_controller.reset(new CodeController());
+ sprite = sprite_manager->create("images/creatures/tux/tux.sprite");
+ airarrow = Surface::create("images/engine/hud/airarrow.png");
+@@ -1015,6 +1015,16 @@\r
+ else
+ sa_postfix = "-right";
+
++ // two-player hack: draw Penny in a different color
++ if (name == "Penny") {
++ sprite->set_color(Color(1.0f, 1.0f, 0.5f, 1.0f));
++ } else {
++ sprite->set_color(Color(1.0f, 1.0f, 1.0f, 1.0f));
++ }
++ // if/when we have complete penny gfx, we can
++ // load those instead of Tux's sprite in the
++ // constructor
++
+ /* Set Tux sprite action */
+ if(dying) {
+ sprite->set_action("gameover");
+@@ -1177,6 +1187,11 @@\r
+ return FORCE_MOVE;
+ }
+
++ Player* player = dynamic_cast<Player*> (&other);
++ if(player) {
++ return ABORT_MOVE;
++ }
++
+ if(hit.left || hit.right) {
+ try_grab(); //grab objects right now, in update it will be too late
+ }
+@@ -1276,8 +1291,11 @@\r
+ dying_timer.start(3.0);
+ set_group(COLGROUP_DISABLED);
+
+- Sector::current()->effect->fade_out(3.0);
+- sound_manager->stop_music(3.0);
++ // Two-player hack: ignore Penny's death
++ if (name != "Penny") {
++ Sector::current()->effect->fade_out(3.0);
++ sound_manager->stop_music(3.0);
++ }
+ }
+ }
+
+Index: src/supertux/game_session.cpp\r
+===================================================================\r
+--- src/supertux/game_session.cpp (revision 6139)\r
++++ src/supertux/game_session.cpp (working copy)\r
+@@ -93,6 +93,7 @@\r