BUGIFX: game didn't get started in normal poverty games
[e-DoKo.git] / include / game.php
index 51d4320dfaa578315a21d32f42cb5eb51eb47b00..4dbf68f0a6e291dd194c485d8844a4c8aa49bc2b 100644 (file)
@@ -1,10 +1,11 @@
 <?php
-/* make sure that we are not called from outside the scripts, 
+/* make sure that we are not called from outside the scripts,
  * use a variable defined in config.php to check this
  */
 if(!isset($HOST))
   exit;
 
+/* calling game.php only makes sense when we give it a hash for a game */
 if(!myisset("me"))
   {
     echo "Hmm, you really shouldn't mess with the urls.<br />\n";
@@ -12,10 +13,9 @@ if(!myisset("me"))
     DB_close();
     exit();
   }
-
 $me = $_REQUEST["me"];
 
-/* test for valid ID */
+/* Ok, got a hash, but is it valid? */
 $myid = DB_get_userid('hash',$me);
 if(!$myid)
   {
@@ -25,12 +25,14 @@ if(!$myid)
     DB_close();
     exit();
   }
-    
+
+global $GAME,$RULES,$CARDS;
+
 /* user might get here by clicking on the link in an email, so session might not be set */
 if(isset($_SESSION["name"]))
   output_status($_SESSION["name"]);
 
-/* the user had done something, update the timestamp */
+/* the user has done something, update the timestamp */
 DB_update_user_timestamp($myid);
 
 /* get some information from the DB */
@@ -41,18 +43,11 @@ $mypos    = DB_get_pos_by_hash($me);
 $myhand   = DB_get_handid('hash',$me);
 $session  = DB_get_session_by_gameid($gameid);
 
-/* get prefs and save them */
-DB_get_PREF($myid);
+/* get prefs and save them in a variable*/
+$PREF = DB_get_PREF($myid);
 
 /* get rule set for this game */
-$result = mysql_query("SELECT * FROM Rulesets".
-                     " LEFT JOIN Game ON Game.ruleset=Rulesets.id ".
-                     " WHERE Game.id='$gameid'" );
-$r      = mysql_fetch_array($result,MYSQL_NUM);
-
-$RULES["dullen"]      = $r[2];
-$RULES["schweinchen"] = $r[3];
-$RULES["call"]        = $r[4];
+$RULES = DB_get_RULES($gameid);
 
 /* get some infos about the game */
 $gametype   = DB_get_gametype_by_gameid($gameid);
@@ -64,18 +59,50 @@ if($gametype=="solo")
     $GT  = $gametype." ".$GT;
   }
 
-/* does anyone have both foxes */
-$GAME["schweinchen"]=0;
-for($i=1;$i<5;$i++)
+/* do we need to worry about Schweinchen?
+ * check gametype and rules
+ * if yes, figure out if someone actually has Schweinchen
+ * save information in $GAME
+ */
+$ok=0;
+if( $gamestatus == 'pre' )
   {
-    $hash  = DB_get_hash_from_game_and_pos($gameid,$i);
-    $cards = DB_get_all_hand($hash);
-    if( in_array("19",$cards) && in_array("20",$cards) )
-      {
-       $GAME["schweinchen"]=1;
-       $GAME["schweinchen-who"]=$hash;
-      }
-  };
+    /* always need to use Schweinchen to figure out for example who has poverty */
+    $ok=1;
+  }
+else
+  {
+    /* in a game Schweinchen is not valid in all types of games */
+    if( $gametype == 'normal' || $gametype == 'silent' || $gametype=='trump' )
+      if( in_array($RULES['schweinchen'],array('both','second','secondaftercall')) )
+       $ok=1;
+  }
+
+/* these are the defaults */
+$GAME['schweinchen-who']    = NULL;
+$GAME['schweinchen-first']  = NULL;
+$GAME['schweinchen-second'] = NULL;
+
+if($ok)
+{
+  /* need to check for Schweinchen */
+  for($i=1;$i<5;$i++)
+    {
+      $hash  = DB_get_hash_from_game_and_pos($gameid,$i);
+      $cards = DB_get_all_hand($hash);
+      if( in_array("19",$cards) && in_array("20",$cards) )
+       $GAME['schweinchen-who']=$hash;
+    };
+  $GAME['schweinchen-first']  = 0; /* to keep track if they have been played already */
+  $GAME['schweinchen-second'] = 0;
+}
+/* end check for Schweinchen */
+
+/* set the $CARDS variable, needed for sorting the cards
+ * we set it to normal so that the pre-game phase is handled ok
+ * and later set it to the correct game type that is played
+ */
+set_gametype('normal');
 
 /* put everyting in a form */
 echo "<form action=\"index.php?action=game&me=$me\" method=\"post\">\n";
@@ -162,6 +189,7 @@ switch($mystatus)
                    /* whos turn is it? */
                    DB_set_player_by_gameid($gameid,$user);
                    $ok = 0;
+                   break;
                  }
              };
            if($ok)
@@ -190,59 +218,75 @@ switch($mystatus)
          }
       }
   case 'init':
-
+    /* here we ask the player if he is sick */
     $mycards = DB_get_hand($me);
-    sort($mycards);
+    $mycards = mysort($mycards,$gametype);
 
-    output_check_for_sickness($me,$mycards);
+    /* output sickness of other playes, in case the already selected and are sitting in front of the current player */
+    echo "\n<ul class=\"tricks\">\n";
+    echo "  <li class=\"nohighlight\"> Game ".DB_format_gameid($gameid).": </li>\n";
+    echo "  <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
+      "    <div class=\"trick\" id=\"trick0\">\n";
 
-    echo "<p class=\"mycards\">Your cards are: <br />\n";
-    foreach($mycards as $card)
-      display_card($card,$PREF["cardset"]);
-    echo "</p>\n";
+    for($pos=1;$pos<5;$pos++)
+      {
+       $usersick   = DB_get_sickness_by_pos_and_gameid($pos,$gameid);
+       $userid     = DB_get_userid('gameid-position',$gameid,$pos);
+       $userstatus = DB_get_hand_status_by_userid_and_gameid($userid,$gameid);
 
-    /* move on to the next stage*/
-    DB_set_hand_status_by_hash($me,'check');
-    break;
+       if($userstatus=='start' || $userstatus=='init')
+         echo " <div class=\"vorbehalt".($pos-1)."\"> still needs to decide </div>\n"; /* show this to everyone */
+       else
+         if($usersick!=NULL && $pos<=$mypos ) /* only show this for people sitting before the player */
+           echo " <div class=\"vorbehalt".($pos-1)."\"> sick </div>\n";
+         else if($usersick==NULL && $pos<=$mypos)
+           echo " <div class=\"vorbehalt".($pos-1)."\"> healthy </div>\n";
+      }
+    echo "    </div>\n  </li>\n</ul>\n";  /* end div trick, end li trick , end tricks*/
+    /* end displaying sickness */
 
-  case 'check':
-    /* ok, user is in the game, saw his cards and selected his vorbehalt
-     * so first we check what he selected
-     */
     if(!myisset("solo","wedding","poverty","nines") )
       {
-       /* all these variables have a pre-selected default,
-        * so we should never get here,
-        * unless a user tries to cheat ;)
-        * can also happen if user reloads the page!
-        */
-       echo "<p class=\"message\"> You need to answer the <a href=\"$INDEX?action=game&me=$me&in=yes\">questions</a>.</p>";
-       DB_set_hand_status_by_hash($me,'init');
+       output_check_for_sickness($me,$mycards);
+
+       echo "<div class=\"mycards\">Your cards are: <br />\n";
+       foreach($mycards as $card)
+         display_card($card,$PREF["cardset"]);
+       echo "</div>\n";
+
+       break;
       }
     else
       {
-       /* check if someone selected more than one vorbehalt */
-       $Nvorbehalt = 0;
-       if($_REQUEST["solo"]!="No")       $Nvorbehalt++;
-       if($_REQUEST["wedding"] == "yes") $Nvorbehalt++;
-       if($_REQUEST["poverty"] == "yes") $Nvorbehalt++;
-       if($_REQUEST["nines"] == "yes")   $Nvorbehalt++;
-
-       if($Nvorbehalt>1)
+       /* check if someone selected more than one sickness */
+       $Nsickness = 0;
+       if($_REQUEST["solo"]!="No")       $Nsickness++;
+       if($_REQUEST["wedding"] == "yes") $Nsickness++;
+       if($_REQUEST["poverty"] == "yes") $Nsickness++;
+       if($_REQUEST["nines"] == "yes")   $Nsickness++;
+
+       if($Nsickness>1)
          {
-           echo "<p class=\"message\"> You selected more than one vorbehalt, please go back ".
+           echo "<p class=\"message\"> You selected more than one sickness, please go back ".
              "and answer the <a href=\"$INDEX?action=game&me=$me&in=yes\">question</a> again.</p>";
-           DB_set_hand_status_by_hash($me,'init');
+
+           echo "<div class=\"mycards\">Your cards are: <br />\n";
+           foreach($mycards as $card)
+             display_card($card,$PREF["cardset"]);
+           echo "</div>\n";
+
+           break;
          }
        else
          {
+           /* everything is ok, save what user said and proceed */
            echo "<p class=\"message\">Processing what you selected in the last step...";
 
            /* check if this sickness needs to be handled first */
            $gametype    = DB_get_gametype_by_gameid($gameid);
-           $startplayer = DB_get_startplayer_by_gameid($gameid);
+           $startplayer = DB_get_startplayer_by_gameid($gameid); /* need this to check which solo goes first */
 
-           if( $_REQUEST["solo"]!="No")
+           if( $_REQUEST["solo"]!="No" )
              {
                /* user wants to play a solo */
 
@@ -266,7 +310,7 @@ switch($mystatus)
              }
            else if($_REQUEST["wedding"] == "yes")
              {
-               /* TODO: add silent solo somewhere*/
+               /* silent solo is set further down */
                echo "Ok, you don't want to play a silent solo...wedding was chosen.<br />\n";
                DB_set_sickness_by_hash($me,"wedding");
              }
@@ -282,51 +326,48 @@ switch($mystatus)
                DB_set_sickness_by_hash($me,"nines");
              }
 
-           echo " Ok, done with checking, please go to the <a href=\"$INDEX?action=game&me=$me\">next step of the setup</a>.</p>";
+           echo "</p>\n";
 
            /* move on to the next stage*/
-           DB_set_hand_status_by_hash($me,'poverty');
-
-           /* check if everyone has reached this stage, send out email */
-           $userids = DB_get_all_userid_by_gameid($gameid);
-           $ok = 1;
-           foreach($userids as $user)
-             {
-               $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
-               if($userstat!='poverty' && $userstat!='play')
-                 {
-                   $ok = 0;
-                   DB_set_player_by_gameid($gameid,$user);
-                 }
-             };
-           if($ok)
-             {
-               /* reset player = everyone has to do something now */
-               DB_set_player_by_gameid($gameid,NULL);
-
-               foreach($userids as $user)
-                 {
-                   $To       = DB_get_email('userid',$user);
-                   $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                   if($userhash != $me)
-                     {
-                       $message = "Everyone finish the questionary in game ".DB_format_gameid($gameid).", ".
-                         "please visit this link now to continue: \n".
-                         " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
-                       mymail($To,$EmailName." finished setup in game ".DB_format_gameid($gameid),$message);
-                     }
-                 };
-             };
+           DB_set_hand_status_by_hash($me,'check');
          };
       };
-    break;
 
-  case 'poverty':
-    /* here we need to check if there is a solo or some other form of sickness.
-     * If so, which one is the most important one
-     * set that one in the Game table
-     * tell people about it.
+  case 'check':
+    /* here we check what all players said and figure out what game we are playing
+     * this can therefore only be handled once all players finished the last stage
      */
+
+    /* only need to redisplay the cards when the user reloads the page and lands directly here */
+    if($mystatus=='check')
+      {
+       $mycards = DB_get_hand($me);
+       $mycards = mysort($mycards,$gametype);
+
+       /* output sickness of other playes, in case the already selected and are sitting in front of the current player */
+       echo "\n<ul class=\"tricks\">\n";
+       echo "  <li class=\"nohighlight\"> Game ".DB_format_gameid($gameid).": </li>\n";
+       echo "  <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
+         "    <div class=\"trick\" id=\"trick0\">\n";
+
+       for($pos=1;$pos<5;$pos++)
+         {
+           $usersick   = DB_get_sickness_by_pos_and_gameid($pos,$gameid);
+           $userid     = DB_get_userid('gameid-position',$gameid,$pos);
+           $userstatus = DB_get_hand_status_by_userid_and_gameid($userid,$gameid);
+
+           if($userstatus=='start' || $userstatus=='init')
+             echo " <div class=\"vorbehalt".($pos-1)."\"> still needs to decide </div>\n"; /* show this to everyone */
+           else
+             if($usersick!=NULL) /* in the init-phase we only showed players with $pos<$mypos, now we can show all */
+               echo " <div class=\"vorbehalt".($pos-1)."\"> sick </div>\n";
+             else
+               echo " <div class=\"vorbehalt".($pos-1)."\"> healthy </div>\n";
+         }
+       echo "    </div>\n  </li>\n</ul>\n";  /* end div trick, end li trick , end tricks*/
+       /* end displaying sickness */
+      }
+
     echo "<div class=\"message\">\n";
     echo "<p> Checking if someone else selected solo, nines, wedding or poverty.</p>";
 
@@ -336,27 +377,47 @@ switch($mystatus)
     foreach($userids as $user)
       {
        $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
-       if($userstat!='poverty' && $userstat!='play')
-         $ok = 0;
+       if($userstat!='check')
+         {
+           $ok = 0;
+           DB_set_player_by_gameid($gameid,$user);
+           break;
+         }
       };
 
     if(!$ok)
       {
-       echo "This step can only be handled after everyone finished the last step. ".
+       echo "<p>This step can only be handled after everyone finished the last step. ".
          "Seems like this is not the case, so you need to wait a bit... ".
          "you will get an email once that is the case, please use the link in ".
-         "that email to continue the game.<br />";
+         "that email to continue the game.</p></div>";
+
+       /* display cards, if player was just at the init-phase he will still see the cards from there
+        * we can put this one here, since the last player to finish the init state won't get here and
+        * will still see his card anyway from the init-phase
+        */
+       if($mystatus=='check')
+         {
+           /* show cards */
+           echo "<div class=\"mycards\">Your cards are: <br />\n";
+           foreach($mycards as $card)
+             display_card($card,$PREF["cardset"]);
+           echo "</div>\n";
+         }
+       break;
       }
     else
       {
-       echo "Everyone has finished checking their cards, let's see what they said...<br />";
+       /* Ok, everyone finished the init-phase, time to figure out what game we
+        * are playing, in case there are any solos this already
+        * will have the correct information in it */
+
+       echo "<p> Ok, everyone is done... figuring out what kind of game we are playing.</p>";
 
-       /* check what kind of game we are playing,  in case there are any solos this already
-        *will have the correct information in it */
        $gametype    = DB_get_gametype_by_gameid($gameid);
        $startplayer = DB_get_startplayer_by_gameid($gameid);
 
-       /* check for different sickness and just output a general info */
+       /* check for sickness */
        $nines   = 0;
        $poverty = 0;
        $wedding = 0;
@@ -368,28 +429,17 @@ switch($mystatus)
            if($usersick == 'nines')
              {
                $nines = $user;
-               echo "$name has a Vorbehalt. <br />";
-               break;
+               break; /* no need to check for other poverties, since only solo can win and that is already set */
              }
            else if($usersick == 'poverty')
-             {
-               $poverty++;
-               echo "$name has a Vorbehalt. <br />";
-             }
+             $poverty++;
            else if($usersick == 'wedding')
-             {
-               $wedding=$user;
-               echo "$name has a Vorbehalt. <br />"  ;
-             }
+             $wedding=$user;
            else if($usersick == 'solo')
-             {
-               $solo++;
-               echo "$name has a Vorbehalt. <br />"  ;
-             }
+             $solo++;
          }
 
        /* now check which sickness comes first and set the gametype to it */
-
        if($gametype == "solo")
          {
            /* do nothing */
@@ -460,341 +510,431 @@ switch($mystatus)
            DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */
            $gametype = "wedding";
          };
+       /* now the gametype is set correctly in the database */
+       echo "<p> Got it :)</p>";
 
-       echo "<br />\n";
-
-       /* now the gametype is set correctly (shouldn't matter that this is calculated for every user)
-        * output what kind of game we have */
-
-       $poverty = 0;
-       foreach($userids as $user)
+       /* loop over all players, set re/contra if possible and start the game if possible */
+       $userids = DB_get_all_userid_by_gameid($gameid);
+       foreach($userids as $userid)
          {
-           /* userids are sorted by position...
-            * so output whatever the first one has, then whatever the next one has
-            * stop when the sickness is the same as the gametype
-            */
+           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$userid);
 
-           $name     = DB_get_name('userid',$user);
-           $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+           switch($gametype)
+             {
+             case "solo":
+               /* are we the solo player? set us to re, else set us to contra */
+               $pos = DB_get_pos_by_hash($userhash);
+               if($pos == $startplayer)
+                 DB_set_party_by_hash($userhash,"re");
+               else
+                 DB_set_party_by_hash($userhash,"contra");
+               DB_set_hand_status_by_hash($userhash,'play');
+               break;
 
-           if($usersick)
-             echo "$name has $usersick. <br />"; /*TODO: perhaps save this in a string and store in Game? */
+             case "wedding":
+               /* set person with the wedding to re, do the rest during the game */
+               $usersick = DB_get_sickness_by_userid_and_gameid($userid,$gameid);
+               if($usersick == "wedding")
+                 DB_set_party_by_hash($userhash,"re");
+               else
+                 DB_set_party_by_hash($userhash,"contra");
 
-           if($usersick=="poverty")
-             $poverty++;
-           if($usersick == "wedding" && $gametype =="wedding")
-             break;
-           if($usersick == "poverty" && $gametype =="poverty")
-             break;
-           if($usersick == "poverty" && $gametype =="dpoverty" && $poverty==2)
-             break;
-           if($usersick == "solo" && $gametype =="solo")
-             break;
-         };
+               DB_set_hand_status_by_hash($userhash,'play');
+               break;
 
-       /* output Schweinchen in case the rules need it */
-       if( $gametype != "solo")
-         if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" )
-           echo DB_get_name('hash',$GAME["schweinchen-who"])." has Schweinchen. <br />";
+             case "normal":
+               $hand = DB_get_all_hand($userhash);
+
+               if(in_array('3',$hand)||in_array('4',$hand))
+                 DB_set_party_by_hash($userhash,"re");
+               else
+                 DB_set_party_by_hash($userhash,"contra");
+               DB_set_hand_status_by_hash($userhash,'play');
+               break;
+             case "poverty":
+             case "dpoverty":
+               /* set person with poverty to play status */
+               $usersick = DB_get_sickness_by_userid_and_gameid($userid,$gameid);
+               if($usersick == "poverty")
+                 DB_set_hand_status_by_hash($userhash,'play');
+
+               /* set status of first player to be asked to poverty */
+               $who = DB_get_sickness_by_gameid($gameid);
+               if($who > 6) $who= $who/10; /* in case we have dpoverty */
+               $whoid = DB_get_userid('gameid-position',$gameid,$who);
+               if($whoid==$userid)
+                 DB_set_hand_status_by_hash($userhash,'poverty');
+             }
+         }
+       /* check for silent solo, set game type to solo in this case */
+       $gametype = DB_get_gametype_by_gameid($gameid);
+       $userids  = DB_get_all_userid_by_gameid($gameid);
+       foreach($userids as $userid)
+         {
+           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$userid);
 
-       echo "<br />\n";
+           if($gametype=='normal')
+             {
+               $userhand = DB_get_all_hand($userhash);
+               if(check_wedding($userhand))
+                 {
+                   /* normal game type and player has both queens -> silent solo */
+                   /* keep startplayer, just set gametype to silent solo */
+                   DB_set_gametype_by_gameid($gameid,"solo");
+                   DB_set_solo_by_gameid($gameid,'silent');
+                 }
+             }
+         }
 
-       /* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/
-       switch($gametype)
+       /* send out email to first player or poverty person*/
+       if($gametype!="poverty" && $gametype!="dpoverty")
          {
-         case "solo":
-           /* are we the solo player? set us to re, else set us to contra */
-           $pos = DB_get_pos_by_hash($me);
-           if($pos == $startplayer)
-             DB_set_party_by_hash($me,"re");
+           $startplayer = DB_get_startplayer_by_gameid($gameid);
+           $email       = DB_get_email('position-gameid',$startplayer,$gameid);
+           $hash        = DB_get_hash_from_game_and_pos($gameid,$startplayer);
+           $who         = DB_get_userid('email',$email);
+           DB_set_player_by_gameid($gameid,$who);
+
+           if($hash!=$me)
+             {
+               if(DB_get_email_pref_by_hash($hash)!="emailaddict")
+                 {
+                   /* email startplayer */
+                   $message = "It's your turn now in game ".DB_format_gameid($gameid).".\n".
+                     "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$hash."\n\n" ;
+                   mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message);
+                 }
+             }
            else
-             DB_set_party_by_hash($me,"contra");
-           DB_set_hand_status_by_hash($me,'play');
-           break;
+             echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />\n";
+         }
+       else
+         {
+           /* set status of first player to be asked to poverty */
+           $who   = DB_get_sickness_by_gameid($gameid);
+           if($who > 6) $who= $who/10; /* in case we have dpoverty */
 
-         case "wedding":
-           /* set person with the wedding to re, do the rest during the game */
-           $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
-           if($usersick == "wedding")
-             DB_set_party_by_hash($me,"re");
+           $whoid = DB_get_userid('gameid-position',$gameid,$who);
+           if($whoid==$myid)
+             echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />\n";
            else
-             DB_set_party_by_hash($me,"contra");
+             {
+               $email   = DB_get_email('position-gameid',$who,$gameid);
+               $whohash = DB_get_hash_from_game_and_pos($gameid,$who);
+               DB_set_player_by_gameid($gameid,$whoid);
 
-           echo "Whoever will make the first trick will be on the re team. <br />\n";
-           echo " Ok, the game can start now, please finish <a href=\"$INDEX?action=game&me=$me\">the setup</a>.<br />";
-           DB_set_hand_status_by_hash($me,'play');
-           break;
+               if(DB_get_email_pref_by_hash($hash)!="emailaddict")
+                 {
+                   /* email player for poverty */
+                   $message = "Poverty: It's your turn now in game ".DB_format_gameid($gameid).".\n".
+                     "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$whohash."\n\n" ;
+                   mymail($email,$EmailName."Poverty (game ".DB_format_gameid($gameid).") ",$message);
+                 }
+             }
+         }
+       echo "</div>\n";
+       break;
+      }
+  case 'poverty':
+    /* user only gets here in a poverty game, several things have to be handled here:
+     * A) ask, if user wants to take trump
+     *      yes-> take trump,
+     *            poverty: set re/contra
+     *            dpoverty: first time: set re, send email to second player
+     *                      second time: set contra
+     *            poverty: set status of other players to 'play'
+     *            set status to play in case 0 trump
+     *      no -> set status to play,
+     *            ask next player or cancle the game if no more players
+     * B) user took trump and has too many cards (e.g. count(cards)>12 and re/contra set)
+     *         ask to give cards back, set status to play, once player has 12 cards
+     *
+     * it is easier to check B) first
+     */
 
-         case "normal":
-           $hand = DB_get_all_hand($me);
+    /* output pre game in case user reloads */
 
-           if(in_array('3',$hand)||in_array('4',$hand))
-             DB_set_party_by_hash($me,"re");
-           else
-             DB_set_party_by_hash($me,"contra");
-           DB_set_hand_status_by_hash($me,'play');
-           break;
-         case "poverty":
-         case "dpoverty":
-           /* check if poverty resolved (e.g. DB.Game who set to NULL)
-            *   yes? =>trump was taken, start game; break;
-            */
-           $who = DB_get_sickness_by_gameid($gameid);
-           if($who<0)
-             { /* trump has been taken */
-               DB_set_hand_status_by_hash($me,'play');
-               break;
-             };
 
-           if($who>9) /*= two people still have trump on the table*/
-             $add = 10;
-           else
-             $add = 1;
+    set_gametype($gametype); /* this sets the $CARDS variable */
+    $myparty = DB_get_party_by_hash($me);
 
-           /* check if we are being asked now
-            *    no? display wait message, e.g. player X is asked at the moment
-            */
-           $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
-           if(myisset("trump") && $_REQUEST["trump"]=="no" && ($who==$mypos || $who==$mypos*10))
+    /* the following is part B) of whats needs to be done)
+    /*    check if user wants to give cards back */
+    if(myisset("exchange"))
+      {
+       $exchange    = $_REQUEST['exchange'];
+       $partnerhash = DB_get_partner_hash_by_hash($me);
+       $partnerid   = DB_get_userid('hash',$partnerhash);
+       $partnerhand = DB_get_handid('gameid-userid',$gameid,$partnerid);
+
+       /* if exchange is set to a value>0, exchange that card back to the partner */
+       if($exchange >0)
+         {
+           $result = DB_query("UPDATE Hand_Card SET hand_id='$partnerhand'".
+                              " WHERE hand_id='$myhand' AND card_id=".DB_quote_smart($exchange));
+         };
+      }
+
+    /* update hand */
+    $mycards = DB_get_hand($me);
+    $mycards = mysort($mycards,$gametype);
+
+    /* check if user need to give more cards back */
+    if( ($myparty=='re' || $myparty=='contra') && count($mycards)>12)
+      {
+       echo "<div class=\"poverty\"> you need to get rid of a few cards</div>\n";
+
+       $type="exchange";
+       echo "<div class=\"mycards\">Your cards are: <br />\n";
+       foreach($mycards as $card)
+         display_link_card($card,$PREF["cardset"],$type);
+       echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select card to give back\" />\n";
+       echo "</div>\n";
+      }
+    else if( ($myparty=='re' || $myparty=='contra') && count($mycards)==12)
+      {
+       /* user is done, ready to play */
+       DB_set_hand_status_by_hash($me,'play');
+
+       /* email start player */
+       $startplayer = DB_get_startplayer_by_gameid($gameid);
+       $email       = DB_get_email('position-gameid',$startplayer,$gameid);
+       $hash        = DB_get_hash_from_game_and_pos($gameid,$startplayer);
+       $who         = DB_get_userid('email',$email);
+       DB_set_player_by_gameid($gameid,$who);
+
+       if($hash!=$me)
+         {
+           if(DB_get_email_pref_by_hash($hash)!="emailaddict")
              {
-               /* user doesn't want to take trump */
-               /* set next player who needs to be asked */
-               $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
-               $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+               /* email startplayer */
+               $message = "It's your turn now in game ".DB_format_gameid($gameid).".\n".
+                 "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$hash."\n\n" ;
+               mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message);
+             }
+         }
+       else
+         echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />\n";
+      }
 
-               if($firstsick=="poverty")
+    /* the following is part A) of what needs to be done */
+    if(!myisset("trump"))
+      {
+       if(!$myparty)
+         {
+           echo "<div class=\"poverty\">\n";
+           $userids = DB_get_all_userid_by_gameid($gameid);
+           foreach($userids as $user)
+             {
+               $name      = DB_get_name('userid',$user);
+               $usersick  = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+               $userhash  = DB_get_hash_from_gameid_and_userid($gameid,$user);
+               $userparty = DB_get_party_by_hash($userhash);
+
+               if($usersick=="poverty" && !$userparty)
                  {
-                   if($secondsick=="poverty")
-                     DB_set_sickness_by_gameid($gameid,$who+$add*3);
-                   else
-                     DB_set_sickness_by_gameid($gameid,$who+$add*2);
+                   $hash    = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                   $cards   = DB_get_hand($hash);
+                   /* count trump */
+                   $nrtrump = 0;
+                   foreach($cards as $card)
+                     if($card<27) $nrtrump++;
+                   echo "Player $name has $nrtrump trump. Do you want to take them?".
+                     "<a href=\"index.php?action=game&me=$me&amp;trump=$user\">yes</a> <br />\n";
                  }
-               else
-                 DB_set_sickness_by_gameid($gameid,$who+$add);
+             }
+           echo "<a href=\"index.php?action=game&me=$me&amp;trump=no\">No,way I take those trump...</a> <br />\n";
+           echo "</div><div>\n";
 
-               /* email next player */
-               $who = DB_get_sickness_by_gameid($gameid);
-               if($who>9) $who = $who/10;
+           echo "<div class=\"mycards\">Your cards are: <br />\n";
+           foreach($mycards as $card)
+             display_card($card,$PREF["cardset"]);
+           echo "</div></div>\n";
+         }
+       break;
+      }
+    else
+      {
+       $trump = $_REQUEST['trump'];
 
-               if($who<=4)
-                 {
-                   $To       = DB_get_email('position-gameid',$who,$gameid);
-                   $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
-                   $userid   = DB_get_userid('email',$To);
-                   DB_set_player_by_gameid($gameid,$userid);
+       if($trump=="no")
+         {
+           /* user doesn't want to take trump */
+           DB_set_hand_status_by_hash($me,'play');
 
-                   $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:".
-                     " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
-                   mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
-                 }
+           /* set next player who needs to be asked and email him*/
+           $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
+           $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
 
-               /* this user is done */
-               DB_set_hand_status_by_hash($me,'play');
-               break;
+           /* don't ask people who have poverty */
+           $next=1;
+           if($firstsick=="poverty")
+             {
+               if($secondsick=="poverty")
+                 $next=3;
+               else
+                 $next=2;
              }
-           else if(myisset("trump") && !myisset("exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
+           if($gametype=="dpoverty")
              {
-               /* user wants to take trump */
-               $trump = $_REQUEST["trump"];
-
-               /* get hand id for user $trump */
-               $userhand = DB_get_handid('gameid-userid',$gameid,$trump);
-               /* copy trump from player A to B */
-               $result = mysql_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
-
-               /* add hidden button with trump in it to get to the next point */
-               echo "</div><div class=\"poverty\">\n";
-               echo "  <input type=\"hidden\" name=\"exchange\" value=\"-1\" />\n";
-               echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
-               echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select cards to give back\" />\n";
-               echo "</div><div>\n";
+               $next=999; /* need to cancel for sure, since both would need to take the trump */
              }
-           else if(myisset("trump","exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
+
+           /* no more people to ask, need to cancel the game */
+           if($mypos+$next>4)
              {
-               $trump    = $_REQUEST["trump"];
-               $exchange = $_REQUEST["exchange"];
-               $userhand = DB_get_handid('gameid-userid',$gameid,$trump);
+               $message = "Hello, \n\n".
+                 "Game ".DB_format_gameid($gameid)." has been canceled since nobody wanted to take the trump.\n";
 
-               /* if exchange is set to a value>0, exchange that card back to user $trump */
-               if($exchange >0)
+               $userids = DB_get_all_userid_by_gameid($gameid);
+               foreach($userids as $user)
                  {
-                   $result = mysql_query("UPDATE Hand_Card SET hand_id='$userhand'".
-                                         " WHERE hand_id='$myhand' AND card_id='$exchange'" );
-                 };
+                   $To = DB_get_email('userid',$user);
+                   mymail($To,$EmailName."game ".DB_format_gameid($gameid)." canceled (poverty not resolved)",$message);
+                 }
 
-               /* if number of cards == 12, set status to play for both users */
-               $result = mysql_query("SELECT COUNT(*) FROM Hand_Card  WHERE hand_id='$myhand'" );
-               $r      = mysql_fetch_array($result,MYSQL_NUM);
-               if(!$r)
-                 {
-                   myerror("error in poverty");
-                   die();
-                 };
-               if($r[0]==12)
-                 {
-                   if($gametype=="poverty" || $who<9)
-                     {
-                       DB_set_sickness_by_gameid($gameid,-1); /* done with poverty */
-                     }
-                   else /* reduce poverty count by one, that is go to single digits $who */
-                     {
-                       $add = 1;
-                       $who = $who/10;
+               /* delete everything from the dB */
+               DB_cancel_game($me);
+
+               echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid)." has been canceled.<br /><br /></p>";
+               output_footer();
+               DB_close();
+               exit();
+             }
+           else
+             {
+               /* email next player, set his status to poverty */
+               $To       = DB_get_email('position-gameid',$mypos+$next,$gameid);
+               $userhash = DB_get_hash_from_game_and_pos($gameid,$mypos+$next);
+               $userid   = DB_get_userid('email',$To);
 
-                       /* whom to ask next */
-                       $firstsick  = DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
-                       $secondsick = DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+               DB_set_player_by_gameid($gameid,$userid);
+               DB_set_hand_status_by_hash($userhash,'poverty');
 
-                       if($firstsick!="poverty")
-                         DB_set_sickness_by_gameid($gameid,$who+$add);
-                       else
-                         {
-                           if($secondsick!="poverty")
-                             DB_set_sickness_by_gameid($gameid,$who+$add*2);
-                           else
-                             DB_set_sickness_by_gameid($gameid,$who+$add*3);
-                         };
-
-                       /* email next player */
-                       $who = DB_get_sickness_by_gameid($gameid);
-                       if($who<=4)
-                         {
-                           $To       = DB_get_email('position-gameid',$who,$gameid);
-                           $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
-                           $userid   = DB_get_userid('email',$To);
-                           DB_set_player_by_gameid($gameid,$userid);
-
-                           $message = "Someone has poverty, it's your turn to decide, ".
-                             "if you want to take the trump. Please visit:".
-                             " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
-                           mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
-                         }
-                     }
+               $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:".
+                 " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
+               mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
+             }
+         }
+       else
+         {
+           /* player wants to take trump, change cards */
 
-                   /* this user is done */
-                   DB_set_hand_status_by_hash($me,'play');
-                   /* and so is his partner */
-                   $hash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
-                   DB_set_hand_status_by_hash($hash,'play');
+           /* user wants to take trump */
+           $trump = $_REQUEST["trump"];
+           $userhand = DB_get_handid('gameid-userid',$gameid,$trump);
+           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
 
-                   /* set party to re, unless we had dpoverty, in that case check if we need to set re/contra*/
-                   $re_set = 0;
-                   foreach($userids as $user)
-                     {
-                       $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                       $party    = DB_get_party_by_hash($userhash);
-                       if($party=="re")
-                         $re_set = 1;
-                     }
-                   if($re_set)
+           /* copy trump from player A to B */
+           $result = DB_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
+
+           /* reload cards */
+           $mycards = DB_get_hand($me);
+
+           /* set re/contra */
+           if($gametype=='poverty')
+             {
+               $userids = DB_get_all_userid_by_gameid($gameid);
+               foreach($userids as $user)
+                 {
+                   $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                   if($hash==$userhash||$hash==$me)
                      {
-                       DB_set_party_by_hash($me,"contra");
-                       DB_set_party_by_hash($hash,"contra");
+                       DB_set_party_by_hash($hash,"re");
                      }
                    else
                      {
-                       foreach($userids as $user)
-                         {
-                           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                           if($userhash==$hash||$userhash==$me)
-                             DB_set_party_by_hash($userhash,"re");
-                           else
-                             DB_set_party_by_hash($userhash,"contra");
-                         }
+                       DB_set_party_by_hash($hash,"contra");
+                       DB_set_hand_status_by_hash($hash,'play'); /* the contra party is ready to play */
                      }
-
-
-                   break;
                  }
-               else
+               /* check if we are done (in case of no trump handed over), if so, go to 'play' phase right away*/
+               if(count($mycards)==12)
                  {
-                   /* else show all trump, have lowest card pre-selected, have hidden setting for */
-                   echo "</div><div class=\"poverty\"> you need to get rid of a few cards</div>\n";
-
-                   set_gametype($gametype); /* this sets the $CARDS variable */
-                   $mycards = DB_get_hand($me);
-                   $mycards = mysort($mycards,$gametype);
-
-                   $type="exchange";
-                   echo "<div class=\"mycards\">Your cards are: <br />\n";
-                   foreach($mycards as $card)
-                     display_link_card($card,$PREF["cardset"],$type);
-                   echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
-                   echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select one card to give back\" />\n";
-                   echo "</div><div>\n";
+                   DB_set_hand_status_by_hash($me,'play');
                  }
              }
-           else if($who == $mypos || $who == $mypos*10)
+           else /*dpoverty*/
              {
-               echo "</div><div class=\"poverty\">\n";
+               /* has the re party already been set?*/
+               $re_set=0;
+               $userids = DB_get_all_userid_by_gameid($gameid);
                foreach($userids as $user)
                  {
-                   $name     = DB_get_name('userid',$user);
-                   $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
-
-                   if($usersick=="poverty")
-                     {
-                       $hash    = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                       $cards   = DB_get_hand($hash);
-                       $nrtrump = count_trump($cards);
-                       /* count trump */
-                       if($nrtrump<4)
-                         echo "Player $name has $nrtrump trump. Do you want to take them?".
-                           "<a href=\"index.php?action=game&me=$me&amp;trump=$user\">yes</a> <br />\n";
-                     }
+                   $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                   $party = DB_get_party_by_hash($hash);
+                   if($party=='re')
+                     $re_set=1;
+                 }
+               if($re_set)
+                 {
+                   DB_set_party_by_hash($me,'contra');
+                   DB_set_party_by_hash($userhash,'contra');
                  }
-               echo "<a href=\"index.php?action=game&me=$me&amp;trump=no\">No,way I take those trump...</a> <br />\n";
-               echo "</div><div>\n";
-
-               echo "Your cards are: <br />\n";
-               $mycards = DB_get_hand($me);
-               sort($mycards);
-               echo "<p class=\"mycards\">Your cards are: <br />\n";
-               foreach($mycards as $card)
-                 display_card($card,$PREF["cardset"]);
-               echo "</p>\n";
-             }
-           else
-             {
-               $mysick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
-               if($mysick=="poverty")
-                 echo "The others are asked if they want to take your trump, you have to wait (you'll get an email).";
                else
-                 echo "it's not your turn yet to decide if you want to take the trump or not.";
-             }
-         };
-       /* check if no one wanted to take trump, in that case the gamesickness would be set to 5 or 50 */
-       $who = DB_get_sickness_by_gameid($gameid);
-       if($who==5 || $who==50)
-         {
-           $message = "Hello, \n\n".
-             "Game ".DB_format_gameid($gameid)." has been canceled since nobody wanted to take the trump.\n";
+                 {
+                   DB_set_party_by_hash($me,'re');
+                   DB_set_party_by_hash($userhash,'re');
 
-           $userids = DB_get_all_userid_by_gameid($gameid);
-           foreach($userids as $user)
-             {
-               $To = DB_get_email('userid',$user);
-               mymail($To,$EmailName."game ".DB_format_gameid($gameid)." canceled (poverty not resolved)",$message);
-             }
+                   /* send out email to second non-poverty player */
+                   $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
+                   $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
 
-           /* delete everything from the dB */
-           DB_cancel_game($me);
+                   $next=1;
+                   if($firstsick=="poverty")
+                     if($secondsick=="poverty")
+                       $next=3;
+                     else
+                       $next=2;
 
-           echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid)." has been canceled.<br /><br /></p>";
-           output_footer();
-           DB_close();
-           exit();
+                   if($mypos+$next>4)
+                     echo "<div class=\"message\">Error in poverty, please contact the Admin</div>\n";
+
+                   $To       = DB_get_email('position-gameid',$mypos+$next,$gameid);
+                   $userhash = DB_get_hash_from_game_and_pos($gameid,$mypos+$next);
+                   $userid   = DB_get_userid('email',$To);
+
+                   DB_set_player_by_gameid($gameid,$userid);
+                   DB_set_hand_status_by_hash($userhash,'poverty');
+
+                   $message = "Two people have poverty, it's your turn to decide, if you want to take the trump. Please visit:".
+                     " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
+                   mymail($To,$EmailName." double poverty (game ".DB_format_gameid($gameid).")",$message);
+
+
+                 }
+             }
+           echo "<div class=\"message\"> Please, <a href=\"$INDEX?action=game&me=$me\">continue</a> here.</div>\n";
          }
+      }
+    echo "</div>";
+    break;
 
-       /* check if all players are ready to play */
+  case 'play':
+  case 'gameover':
+    /* both entries here,  so that the tricks are visible for both.
+     * in case of 'play' there is a break later that skips the last part
+     */
+
+    /* check if all players are ready to play,
+     * if so, send out email to the startplayer
+     * only need to do this if the game hasn't started yet
+     */
+    $gamestatus = DB_get_game_status_by_gameid($gameid);
+    if($gamestatus == 'pre')
+      {
        $ok = 1;
+       $userids = DB_get_all_userid_by_gameid($gameid);
        foreach($userids as $user)
-         if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
-           {
-             $ok = 0;
-             DB_set_player_by_gameid($gameid,$user);
-           }
-
+         {
+           $userstatus = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
+           if($userstatus !='play' && $userstatus!='gameover')
+             {
+               $ok = 0;
+               DB_set_player_by_gameid($gameid,$user);
+               break;
+             }
+         }
        if($ok)
          {
            /* only set this after all poverty, etc. are handled*/
@@ -814,20 +954,8 @@ switch($mystatus)
                  "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$hash."\n\n" ;
                mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message);
              }
-           else
-             echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />";
          }
-       else
-         echo "\n <br />";
       }
-    echo "</div>\n";
-    break;
-  case 'play':
-  case 'gameover':
-    /* both entries here,  so that the tricks are visible for both.
-     * in case of 'play' there is a break later that skips the last part
-     */
-
     /* figure out what kind of game we are playing,
      * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"],
      * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"]
@@ -839,14 +967,17 @@ switch($mystatus)
     if($gametype=="solo")
       {
        $gametype = DB_get_solo_by_gameid($gameid);
-       $GT       = $gametype." ".$GT;
+       if($gametype=='silent')
+         $GT = 'normal';
+       else
+         $GT = $gametype." ".$GT;
       }
     else
       $gametype = "normal";
 
     set_gametype($gametype); /* this sets the $CARDS variable */
 
-    /* get some infos about the game */
+    /* get some infos about the game, need to reset this, since it might have changed */
     $gamestatus = DB_get_game_status_by_gameid($gameid);
 
     /* has the game started? No, then just wait here...*/
@@ -854,16 +985,24 @@ switch($mystatus)
       {
        echo "<p class=\"message\"> You finished the setup, but not everyone else finished it... ".
          "You need to wait for the others. Just wait for an email. </p>";
+
+       $mycards = DB_get_hand($me);
+       $mycards = mysort($mycards,$gametype);
+
+       echo "<div class=\"mycards\">Your cards are: <br />\n";
+       foreach($mycards as $card)
+         display_card($card,$PREF["cardset"]);
+       echo "</div>\n";
+
        break; /* not sure this works... the idea is that you can
                * only  play a card after everyone is ready to play */
       }
 
     /* get time from the last action of the game */
-    $result  = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
-    $r       = mysql_fetch_array($result,MYSQL_NUM);
+    $r = DB_query_array("SELECT mod_date from Game WHERE id='$gameid' " );
     $gameend = time() - strtotime($r[0]);
 
-    /* handel comments in case player didn't play a card, allow comments a week after the end of the game */
+    /* handle comments in case player didn't play a card, allow comments a week after the end of the game */
     if( (!myisset("card") && $mystatus=='play') || ($mystatus=='gameover' && ($gameend < 60*60*24*7)) )
       if(myisset("comment"))
        {
@@ -885,23 +1024,23 @@ switch($mystatus)
        };
 
     /* get everything relevant to display the tricks */
-    $result = mysql_query("SELECT Hand_Card.card_id as card,".
-                         "       Hand.position as position,".
-                         "       Play.sequence as sequence, ".
-                         "       Trick.id, ".
-                         "       GROUP_CONCAT(CONCAT('<span>',User.fullname,': ',Comment.comment,'</span>')".
-                         "                    SEPARATOR '\n' ), ".
-                         "       Play.create_date, ".
-                         "       Hand.user_id ".
-                         "FROM Trick ".
-                         "LEFT JOIN Play ON Trick.id=Play.trick_id ".
-                         "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ".
-                         "LEFT JOIN Hand ON Hand_Card.hand_id=Hand.id ".
-                         "LEFT JOIN Comment ON Play.id=Comment.play_id ".
-                         "LEFT JOIN User On User.id=Comment.user_id ".
-                         "WHERE Trick.game_id='".$gameid."' ".
-                         "GROUP BY Trick.id, sequence ".
-                         "ORDER BY Trick.id, sequence  ASC");
+    $result = DB_query("SELECT Hand_Card.card_id as card,".
+                      "       Hand.position as position,".
+                      "       Play.sequence as sequence, ".
+                      "       Trick.id, ".
+                      "       GROUP_CONCAT(CONCAT('<span>',User.fullname,': ',Comment.comment,'</span>')".
+                      "                    SEPARATOR '\n' ), ".
+                      "       Play.create_date, ".
+                      "       Hand.user_id ".
+                      "FROM Trick ".
+                      "LEFT JOIN Play ON Trick.id=Play.trick_id ".
+                      "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ".
+                      "LEFT JOIN Hand ON Hand_Card.hand_id=Hand.id ".
+                      "LEFT JOIN Comment ON Play.id=Comment.play_id ".
+                      "LEFT JOIN User On User.id=Comment.user_id ".
+                      "WHERE Trick.game_id='".$gameid."' ".
+                      "GROUP BY Trick.id, sequence ".
+                      "ORDER BY Trick.id, sequence  ASC");
     $trickNR   = 1;
     $lasttrick = DB_get_max_trickid($gameid);
 
@@ -915,7 +1054,7 @@ switch($mystatus)
 
     /* output vorbehalte */
     $mygametype =  DB_get_gametype_by_gameid($gameid);
-    if($mygametype != "normal") /* only show when needed */
+    if($mygametype != 'normal' && $mygametype != 'silent') /* only show when needed */
       {
        echo "  <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
          "    <div class=\"trick\" id=\"trick0\">\n";
@@ -938,7 +1077,7 @@ switch($mystatus)
       }
 
     /* output tricks */
-    while($r = mysql_fetch_array($result,MYSQL_NUM))
+    while($r = DB_fetch_array($result))
       {
        $pos     = $r[1];
        $seq     = $r[2];
@@ -947,8 +1086,11 @@ switch($mystatus)
        $user    = $r[6];
 
        /* check if first schweinchen has been played */
-       if( $GAME["schweinchen"] && ($r[0] == 19 || $r[0] == 20) )
-         $GAME["schweinchen"]++;
+       if( $GAME['schweinchen-who'] && ($r[0] == 19 || $r[0] == 20) )
+         if(!$GAME['schweinchen-first'])
+           $GAME['schweinchen-first'] = 1; /* playing the first fox */
+         else
+           $GAME['schweinchen-second'] = 1; /* this must be the second fox */
 
        /* save card to be able to find the winner of the trick later */
        $play[$seq] = array("card"=>$r[0],"pos"=>$pos);
@@ -1019,12 +1161,12 @@ switch($mystatus)
       {
        $card   = $_REQUEST["card"];
        $handid = DB_get_handid('hash',$me);
+       $commentSchweinchen =""; /* used to add a comment when Schweinchen is being played */
 
        /* check if we have card and that we haven't played it yet*/
        /* set played in hand_card to true where hand_id and card_id*/
-       $result = mysql_query("SELECT id FROM Hand_Card WHERE played='false' and ".
+       $r = DB_query_array("SELECT id FROM Hand_Card WHERE played='false' and ".
                              "hand_id='$handid' AND card_id=".DB_quote_smart($card));
-       $r = mysql_fetch_array($result,MYSQL_NUM);
        $handcardid = $r[0];
 
        if($handcardid) /* everything ok, play card  */
@@ -1034,19 +1176,19 @@ switch($mystatus)
 
            /* check if a call was made, must do this before we set the card status to played */
            if(myisset("call")  && $_REQUEST["call"]  == "120" && can_call(120,$me))
-             $result = mysql_query("UPDATE Hand SET point_call='120' WHERE hash='$me' ");
+             $result = DB_query("UPDATE Hand SET point_call='120' WHERE hash='$me' ");
            if(myisset("call")  && $_REQUEST["call"]  == "90" && can_call(90,$me))
-             $result = mysql_query("UPDATE Hand SET point_call='90'  WHERE hash='$me' ");
+             $result = DB_query("UPDATE Hand SET point_call='90'  WHERE hash='$me' ");
            if(myisset("call")  && $_REQUEST["call"]  == "60" && can_call(60,$me))
-             $result = mysql_query("UPDATE Hand SET point_call='60'  WHERE hash='$me' ");
+             $result = DB_query("UPDATE Hand SET point_call='60'  WHERE hash='$me' ");
            if(myisset("call")  && $_REQUEST["call"]  == "30" && can_call(30,$me))
-             $result = mysql_query("UPDATE Hand SET point_call='30'  WHERE hash='$me' ");
+             $result = DB_query("UPDATE Hand SET point_call='30'  WHERE hash='$me' ");
            if(myisset("call")  && $_REQUEST["call"]  == "0" && can_call(0,$me))
-             $result = mysql_query("UPDATE Hand SET point_call='0'   WHERE hash='$me' ");
+             $result = DB_query("UPDATE Hand SET point_call='0'   WHERE hash='$me' ");
 
            /* mark card as played */
-           mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=".
-                       DB_quote_smart($card));
+           DB_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=".
+                    DB_quote_smart($card));
 
            /* get trick id or start new trick */
            $a = DB_get_current_trickid($gameid);
@@ -1056,20 +1198,23 @@ switch($mystatus)
 
            $playid = DB_play_card($trickid,$handcardid,$sequence);
 
-           /* check special output for schweinchen in case
-            * schweinchen is in the rules, a fox has been played and the gametype is correct
+           /* check special output for schweinchen in case in case a fox is being played
+            * check for correct rules, etc. has already been done
             */
-           if( $GAME["schweinchen"] && 
-               ($card == 19 || $card == 20) && 
-               ($gametype == "normal" || $gametype == "silent"|| $gametype=="trump"))
+           if( $GAME["schweinchen-who"] && ($card == 19 || $card == 20) )
              {
-               $GAME["schweinchen"]++; // count how many have been played including this one
-               if($GAME["schweinchen"]==3 && $RULES["schweinchen"]=="second" )
-                 DB_insert_comment("Schweinchen! ",$playid,$myid);
-               if($RULES["schweinchen"]=="both" )
-                 DB_insert_comment("Schweinchen! ",$playid,$myid);
+               if(!$GAME['schweinchen-first'])
+                 $GAME['schweinchen-first'] = 1; /* playing the first fox */
+               else
+                 $GAME['schweinchen-second'] = 1; /* this must be the second fox */
+
+               if( ($GAME['schweinchen-second']==1 && $RULES['schweinchen']=='second') || $RULES['schweinchen']=='both')
+                 {
+                   DB_insert_comment("Schweinchen! ",$playid,$myid);
+                   $commentSchweinchen = "Schweinchen! ";
+                 }
                if ($debug)
-                 echo "schweinchen = ".$GAME["schweinchen"]." ---<br />";
+                 echo "schweinchen = ".$GAME["schweinchen-who"]." ---<br />";
              }
 
            /* if sequence == 4 check who one in case of wedding */
@@ -1115,19 +1260,19 @@ switch($mystatus)
                $winner = get_winner($play,$gametype); /* returns the position */
 
                /* check if someone caught a fox */
-               /* first check if we should account for solos at all, 
+               /* first check if we should account for solos at all,
                 * since it doesn't make sense in some games
                 */
                $ok = 0; /* fox shouldn't be counted */
                if(DB_get_gametype_by_gameid($gameid)=="solo")
                  {
                    $solo = DB_get_solo_by_gameid($gameid);
-                   if($solo == "trump" || $solo == "silent")
+                   if($solo == 'trump' || $solo == 'silent')
                      $ok = 1; /* for trump solos and silent solos, foxes are ok */
                  }
                else
                  $ok = 1; /* for all other games (not solos) foxes are ok too */
-                 
+
                if($ok==1)
                  foreach($play as $played)
                    {
@@ -1142,11 +1287,11 @@ switch($mystatus)
                            $party2 = DB_get_party_by_gameid_and_userid($gameid,$uid2);
 
                            if($party1 != $party2)
-                             mysql_query("INSERT INTO Score".
-                                         " VALUES( NULL,NULL,$gameid,'$party1',$uid1,$uid2,'fox')");
+                             DB_query("INSERT INTO Score".
+                                      " VALUES( NULL,NULL,$gameid,'$party1',$uid1,$uid2,'fox')");
                          }
                    }
-                 
+
                /* check for karlchen (jack of clubs in the last trick)*/
                /* same as for foxes, karlchen doesn't always make sense
                 * check what kind of game it is and set karlchen accordingly */
@@ -1159,7 +1304,7 @@ switch($mystatus)
                    if($solo == "trumpless" || $solo == "jack" || $solo == "queen" )
                      $ok = 0; /* no Karlchen in these solos */
                  }
-                 
+
                if($ok)
                  foreach($play as $played)
                    if ( $played['card']==11 || $played['card']==12 )
@@ -1169,8 +1314,8 @@ switch($mystatus)
                          $uid1   = DB_get_userid('gameid-position',$gameid,$winner);
                          $party1 = DB_get_party_by_gameid_and_userid($gameid,$uid1);
 
-                         mysql_query("INSERT INTO Score".
-                                     " VALUES( NULL,NULL,$gameid,'$party1',$uid1,NULL,'karlchen')");
+                         DB_query("INSERT INTO Score".
+                                  " VALUES( NULL,NULL,$gameid,'$party1',$uid1,NULL,'karlchen')");
                        }
                /* check for doppelopf (>40 points)*/
                $points = 0;
@@ -1183,12 +1328,12 @@ switch($mystatus)
                    $uid1   = DB_get_userid('gameid-position',$gameid,$winner);
                    $party1 = DB_get_party_by_gameid_and_userid($gameid,$uid1);
 
-                   mysql_query("INSERT INTO Score".
-                               " VALUES( NULL,NULL,$gameid,'$party1',$uid1,NULL,'doko')");
+                   DB_query("INSERT INTO Score".
+                            " VALUES( NULL,NULL,$gameid,'$party1',$uid1,NULL,'doko')");
                  }
 
                if($winner>0)
-                 mysql_query("UPDATE Trick SET winner='$winner' WHERE id='$trickid'");
+                 DB_query("UPDATE Trick SET winner='$winner' WHERE id='$trickid'");
                else
                  echo "ERROR during scoring";
 
@@ -1210,6 +1355,8 @@ switch($mystatus)
                $comment = $_REQUEST["comment"];
                if($comment != "")
                  DB_insert_comment($comment,$playid,$myid);
+               if($commentSchweinchen)
+                 $comment = $commentSchweinchen . $comment;
              };
 
            /* check for note */
@@ -1275,31 +1422,31 @@ switch($mystatus)
            else /* send out final email */
              {
                /* individual score */
-               $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
-                                     " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
-                                     " LEFT JOIN User ON User.id=Hand.user_id".
-                                     " LEFT JOIN Play ON Trick.id=Play.trick_id".
-                                     " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
-                                     " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
-                                     " WHERE Hand.game_id='$gameid'".
-                                     " GROUP BY User.fullname" );
+               $result = DB_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
+                                  " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                                  " LEFT JOIN User ON User.id=Hand.user_id".
+                                  " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                                  " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                                  " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                                  " WHERE Hand.game_id='$gameid'".
+                                  " GROUP BY User.fullname" );
                $message  = "The game is over. Thanks for playing :)\n";
                $message .= "Final score:\n";
-               while( $r = mysql_fetch_array($result,MYSQL_NUM))
+               while( $r = DB_fetch_array($result) )
                  $message .= "   ".$r[0]."(".$r[2].") ".$r[1]."\n";
 
-               $result = mysql_query("SELECT  Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
-                                     " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
-                                     " LEFT JOIN User ON User.id=Hand.user_id".
-                                     " LEFT JOIN Play ON Trick.id=Play.trick_id".
-                                     " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
-                                     " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
-                                     " WHERE Hand.game_id='$gameid'".
-                                     " GROUP BY Hand.party" );
+               $result = DB_query("SELECT  Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
+                                  " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                                  " LEFT JOIN User ON User.id=Hand.user_id".
+                                  " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                                  " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                                  " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                                  " WHERE Hand.game_id='$gameid'".
+                                  " GROUP BY Hand.party" );
                $message .= "\nTotals:\n";
                $re     = 0;
                $contra = 0;
-               while( $r = mysql_fetch_array($result,MYSQL_NUM))
+               while( $r = DB_fetch_array($result) )
                  {
                    $message .= "    ".$r[0]." ".$r[1]."\n";
                    if($r[0] == "re")
@@ -1347,12 +1494,19 @@ switch($mystatus)
                $winning_party = NULL;
 
                if($call_re == NULL && $call_contra==NULL)
-                 if($re>120)
-                   $winning_party="re";
-                 else
-                   $winning_party="contra";
+                 {
+                   /* nobody made a call, so it's easy to figure out who won */
+                   if($re>120)
+                     $winning_party="re";
+                   else
+                     $winning_party="contra";
+                 }
                else
                  {
+                   /* if one party makes a call, they only win, iff they make enough points
+                    * if only one party made a call, the other one wins,
+                    * if the first one didn't make it
+                    */
                    if($call_re)
                      {
                        $offset = 120 - $call_re;
@@ -1361,7 +1515,7 @@ switch($mystatus)
 
                        if($re > 120+$offset)
                          $winning_party="re";
-                       else if ( $call_contra == NULL )
+                       else if ($call_contra == NULL )
                          $winning_party="contra";
                      }
 
@@ -1373,7 +1527,7 @@ switch($mystatus)
 
                        if($contra > 120+$offset)
                          $winning_party="contra";
-                       else if ( $call_contra == NULL )
+                       else if ($call_re == NULL )
                          $winning_party="re";
                      }
                  }
@@ -1385,38 +1539,38 @@ switch($mystatus)
                  {
                    for( $p=$call_contra;$p<=120; $p+=30 )
                      {
-                         mysql_query("INSERT INTO Score".
-                                     " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'against$p')");
+                         DB_query("INSERT INTO Score".
+                                  " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'against$p')");
                        }
 
                      for( $p=$call_contra; $p<120; $p+=30)
                        {
                          if( $re >= $p )
-                           mysql_query("INSERT INTO Score".
-                                       " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'made$p')");
+                           DB_query("INSERT INTO Score".
+                                    " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'made$p')");
                        }
                    }
                  if($winning_party!="re" and $call_re!=NULL)
                    {
                      for( $p=$call_re;$p<=120; $p+=30 )
                        {
-                         mysql_query("INSERT INTO Score".
-                                     " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'against$p')");
+                         DB_query("INSERT INTO Score".
+                                  " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'against$p')");
                        }
 
                      for( $p=$call_re; $p<120; $p+=30)
                        {
                          if( $contra>=$p )
-                           mysql_query("INSERT INTO Score".
-                                       " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'made$p')");
+                           DB_query("INSERT INTO Score".
+                                    " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'made$p')");
                        }
                    }
 
                  /* point in case contra won */
                  if($winning_party=="contra")
                    {
-                     mysql_query("INSERT INTO Score".
-                                 " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'againstqueens')");
+                     DB_query("INSERT INTO Score".
+                              " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'againstqueens')");
                    }
 
                  /* one point each for winning and each 30 points + calls */
@@ -1429,15 +1583,15 @@ switch($mystatus)
                            $offset = 1;
 
                          if($re>$p-$offset)
-                           mysql_query("INSERT INTO Score".
-                                       " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'".(240-$p)."')");
+                           DB_query("INSERT INTO Score".
+                                    " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'".(240-$p)."')");
                        }
                      /* re called something and won */
                      foreach(array(0,30,60,90,120) as $p)
                        {
                          if($call_re!=NULL && $call_re<$p+1)
-                           mysql_query("INSERT INTO Score".
-                                       " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'call$p')");
+                           DB_query("INSERT INTO Score".
+                                    " VALUES( NULL,NULL,$gameid,'re',NULL,NULL,'call$p')");
                        }
                    }
                  else if( $winning_party=="contra")
@@ -1449,15 +1603,15 @@ switch($mystatus)
                            $offset = 1;
 
                          if($contra>$p-$offset)
-                           mysql_query("INSERT INTO Score".
-                                       " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'".(240-$p)."')");
+                           DB_query("INSERT INTO Score".
+                                    " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'".(240-$p)."')");
                        }
                      /* re called something and won */
                      foreach(array(0,30,60,90,120) as $p)
                        {
                          if($call_contra!=NULL && $call_contra<$p+1)
-                           mysql_query("INSERT INTO Score".
-                                       " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'call$p')");
+                           DB_query("INSERT INTO Score".
+                                    " VALUES( NULL,NULL,$gameid,'contra',NULL,NULL,'call$p')");
                        }
                    }
 
@@ -1466,19 +1620,19 @@ switch($mystatus)
                  $message .= "\n";
                  $Tpoint = 0;
                  $message .= " Points Re: \n";
-                 $queryresult = mysql_query("SELECT score FROM Score ".
-                                            "  WHERE game_id=$gameid AND party='re'".
-                                            " ");
-                 while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
+                 $queryresult = DB_query("SELECT score FROM Score ".
+                                         "  WHERE game_id=$gameid AND party='re'".
+                                         " ");
+                 while($r = DB_fetch_array($queryresult) )
                    {
                      $message .= "   ".$r[0]."\n";
                      $Tpoint ++;
                    }
                  $message .= " Points Contra: \n";
-                 $queryresult = mysql_query("SELECT score FROM Score ".
-                                            "  WHERE game_id=$gameid AND party='contra'".
-                                            " ");
-                 while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
+                 $queryresult = DB_query("SELECT score FROM Score ".
+                                         "  WHERE game_id=$gameid AND party='contra'".
+                                         " ");
+                 while($r = DB_fetch_array($queryresult) )
                    {
                      $message .= "   ".$r[0]."\n";
                      $Tpoint --;
@@ -1514,7 +1668,7 @@ switch($mystatus)
 
                  $score = implode("\n",$score);
                  $score = $header.$score;
-                 
+
                  $message .= "Score Table:\n";
                  $message .= $score;
 
@@ -1561,15 +1715,15 @@ switch($mystatus)
          /* add pic for re/contra
           "      <img class=\"arrow\" src=\"pics/arrow".($pos-1).".png\" alt=\"table\" />\n";*/
 
-         $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party,Hand.position FROM Hand".
-                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
-                               " LEFT JOIN User ON User.id=Hand.user_id".
-                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
-                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
-                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
-                               " WHERE Hand.game_id='$gameid'".
-                               " GROUP BY User.fullname" );
-         while( $r = mysql_fetch_array($result,MYSQL_NUM))
+         $result = DB_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party,Hand.position FROM Hand".
+                            " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                            " LEFT JOIN User ON User.id=Hand.user_id".
+                            " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                            " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                            " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                            " WHERE Hand.game_id='$gameid'".
+                            " GROUP BY User.fullname" );
+         while( $r = DB_fetch_array($result))
            echo "      <div class=\"card".($r[3]-1)."\">\n".
                 "        <div class=\"score\">".$r[2]."<br /> ".$r[1]."</div>\n".
                 "      </div>\n";
@@ -1586,7 +1740,7 @@ switch($mystatus)
        echo "$note <hr \>\n";
       echo "Insert note:<input name=\"note\" type=\"text\" size=\"15\" maxlength=\"100\" />\n";
       echo "</div> \n";
-      
+
       $mycards = DB_get_hand($me);
       $mycards = mysort($mycards,$gametype);
       echo "<div class=\"mycards\">\n";
@@ -1603,7 +1757,10 @@ switch($mystatus)
 
          foreach($mycards as $card)
            {
-             if($followsuit && !same_type($card,$firstcard))
+             if( ($followsuit && !same_type($card,$firstcard)) ||
+                 ( (int)($card)==19 && ($RULES['schweinchen']=='second'||$RULES['schweinchen']=='secondaftercall')
+                   && $GAME['schweinchen-who']==$me && !$GAME['schweinchen-first'] )
+                 )
                display_card($card,$PREF["cardset"]);
              else
                display_link_card($card,$PREF["cardset"]);
@@ -1655,36 +1812,36 @@ switch($mystatus)
        }
       else
        {
-         $result = mysql_query("SELECT Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
-                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
-                               " LEFT JOIN User ON User.id=Hand.user_id".
-                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
-                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
-                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
-                               " WHERE Hand.game_id='$gameid'".
-                               " GROUP BY Hand.party" );
+         $result = DB_query("SELECT Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
+                            " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                            " LEFT JOIN User ON User.id=Hand.user_id".
+                            " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                            " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                            " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                            " WHERE Hand.game_id='$gameid'".
+                            " GROUP BY Hand.party" );
          echo "<div class=\"total\"> Totals:<br />\n";
-         while( $r = mysql_fetch_array($result,MYSQL_NUM))
+         while( $r = DB_fetch_array($result))
            echo "  ".$r[0]." ".$r[1]."<br />\n";
 
-         $queryresult = mysql_query("SELECT timediff(mod_date,create_date) ".
-                                    " FROM Game WHERE id='$gameid'");
-         $r = mysql_fetch_array($queryresult,MYSQL_NUM);
+         $queryresult = DB_query("SELECT timediff(mod_date,create_date) ".
+                                 " FROM Game WHERE id='$gameid'");
+         $r = DB_fetch_array($queryresult);
          echo "<p>This game took ".$r[0]." hours.</p>";
 
          echo "<div class=\"re\">\n Points Re: <br />\n";
-         $queryresult = mysql_query("SELECT score FROM Score ".
-                                    "  WHERE game_id=$gameid AND party='re'".
-                                    " ");
-         while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
+         $queryresult = DB_query("SELECT score FROM Score ".
+                                 "  WHERE game_id=$gameid AND party='re'".
+                                 " ");
+         while($r = DB_fetch_array($queryresult) )
            echo "   ".$r[0]."<br />\n";
          echo "</div>\n";
 
          echo "<div class=\"contra\">\n Points Contra: <br />\n";
-         $queryresult = mysql_query("SELECT score FROM Score ".
-                                    "  WHERE game_id=$gameid AND party='contra'".
-                                    " ");
-         while($r = mysql_fetch_array($queryresult,MYSQL_NUM) )
+         $queryresult = DB_query("SELECT score FROM Score ".
+                                 "  WHERE game_id=$gameid AND party='contra'".
+                                 " ");
+         while($r = DB_fetch_array($queryresult) )
            echo "   ".$r[0]."<br />\n";
          echo "</div>\n";
 
@@ -1717,8 +1874,7 @@ switch($mystatus)
       output_form_calls($me);
 
     /* get time from the last action of the game */
-    $result  = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " );
-    $r       = mysql_fetch_array($result,MYSQL_NUM);
+    $r = DB_query_array("SELECT mod_date from Game WHERE id='$gameid' " );
     $gameend = time() - strtotime($r[0]);
 
     if($gamestatus == 'play' || $gameend < 60*60*24*7)
@@ -1727,21 +1883,28 @@ switch($mystatus)
        echo "<hr />";
       }
 
-    echo "<input type=\"submit\" value=\"submit\" />\n";
+    echo "<input type=\"submit\" value=\"submit\" />\n<hr />\n";
+
+    $session = DB_get_session_by_gameid($gameid);
+    $score   = generate_score_table($session);
+
+    echo $score;
+
+    echo "</div>\n";
 
+    echo "</form>\n";
 
     if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' )
       {
-       echo "<hr />\n";
 
        $session = DB_get_session_by_gameid($gameid);
-       $result  = mysql_query("SELECT id,create_date FROM Game".
-                              " WHERE session=$session".
-                              " ORDER BY create_date DESC".
-                              " LIMIT 1");
+       $result  = DB_query("SELECT id,create_date FROM Game".
+                           " WHERE session=$session".
+                           " ORDER BY create_date DESC".
+                           " LIMIT 1");
        $r = -1;
        if($result)
-         $r = mysql_fetch_array($result,MYSQL_NUM);
+         $r = DB_fetch_array($result);
 
        if(!$session || $gameid==$r[0])
          {
@@ -1750,21 +1913,20 @@ switch($mystatus)
            $type  = DB_get_gametype_by_gameid($gameid);
 
            if($type=="solo")
-             output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid);
-           else
+             {
+               $solo = DB_get_solo_by_gameid($gameid);
+
+               if($solo!='silent') /* repeat game with same first player */
+                 output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid);
+               else /* rotate normally */
+                 output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
+             }
+           else /* rotate normally */
              output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
          }
       }
 
-    $session = DB_get_session_by_gameid($gameid);
-    $score = generate_score_table($session);
-
-    //  if(size_of($score)>30)
-      echo $score;
 
-    echo "</div>\n";
-
-    echo "</form>\n";
     output_footer();
     DB_close();
     exit();