From 93dd018a611415a176971de6e8f687a91f9597c9 Mon Sep 17 00:00:00 2001
From: terminx <terminx@1a8010ca-5511-0410-912e-c29ae57300e0>
Date: Tue, 2 May 2006 08:12:15 +0000
Subject: [PATCH] Add -keepaddr command line option to disable external address
 lookup as well as a couple of potential fixes for a multiplayer issue

git-svn-id: https://svn.eduke32.com/eduke32@141 1a8010ca-5511-0410-912e-c29ae57300e0
---
 polymer/eduke32/source/game.c | 64 ++++++++++++++++++++---------------
 1 file changed, 37 insertions(+), 27 deletions(-)

diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c
index 2c102494c..c9a2de0e2 100644
--- a/polymer/eduke32/source/game.c
+++ b/polymer/eduke32/source/game.c
@@ -459,7 +459,7 @@ if( !(ps[myconnectindex].gm&MODE_GAME) ) { OSD_DispatchQueued(); }
                 if (playerquitflag[i] == 0) continue;
 
                 l = packbuf[k++];
-                l |= (long)packbuf[k++] << 8;
+                l += (long)(packbuf[k++]<<8);
 
                 if (i == myconnectindex)
                 { j += ((l&1)<<1)+(l&2)+((l&4)>>2)+((l&8)>>3)+((l&16)>>4)+((l&32)>>5)+((l&64)>>6)+((l&128)>>7)+((l&256)>>8)+((l&512)>>9)+((l&1024)>>10)+((l&2048)>>11); continue; }
@@ -505,7 +505,7 @@ if( !(ps[myconnectindex].gm&MODE_GAME) ) { OSD_DispatchQueued(); }
 
             break;
         case 1:  //[1] (receive slave sync buffer)
-            j = 3; k = packbuf[1] + ((long)packbuf[2] << 8);
+            j = 3; k = packbuf[1] + (long)(packbuf[2]<<8);
 
             osyn = (input *)&inputfifo[(movefifoend[other]-1)&(MOVEFIFOSIZ-1)][0];
             nsyn = (input *)&inputfifo[(movefifoend[other])&(MOVEFIFOSIZ-1)][0];
@@ -695,7 +695,8 @@ if( !(ps[myconnectindex].gm&MODE_GAME) ) { OSD_DispatchQueued(); }
 
             copybufbyte(&osyn[other],&nsyn[other],sizeof(input));
             k = packbuf[j++];
-            k |= (long)packbuf[j++] << 8;
+            k += (long)(packbuf[j++]<<8);
+
             if (k&1)   nsyn[other].fvel = packbuf[j]+((short)packbuf[j+1]<<8), j += 2;
             if (k&2)   nsyn[other].svel = packbuf[j]+((short)packbuf[j+1]<<8), j += 2;
             if (k&4)   nsyn[other].avel = (signed char)packbuf[j++];
@@ -7593,11 +7594,18 @@ void checkcommandline(int argc,char **argv)
 
     if(argc > 1)
     {
+        int keepaddr = 0;
+
         while(i < argc)
         {
             c = argv[i];
             if (((*c == '/') || (*c == '-')) && (!firstnet))
             {
+                if (!Bstrcasecmp(c+1,"keepaddr")) {
+                    keepaddr = 1;
+                    i++;
+                    continue;
+                }
                 if (!Bstrcasecmp(c+1,"rmnet"))
                 {
                     if (argc > i+1)
@@ -7613,47 +7621,49 @@ void checkcommandline(int argc,char **argv)
 
                             CommandNet = 0;
 
-                            for(j=0;j<rancid_players;j++)
+                            if(keepaddr == 0)
                             {
-                                if(Bstrcmp(rancid_ip_strings[j],rancid_ip_strings[MAXPLAYERS]) != 0)
+                                for(j=0;j<rancid_players;j++)
                                 {
-                                    Bstrncpy(tempbuf,rancid_ip_strings[j], 8);
-                                    Bstrcpy(tmp,strtok(tempbuf,"."));
-                                    if(Bstrcmp(tmp,"10") == 0)
+                                    if(Bstrcmp(rancid_ip_strings[j],rancid_ip_strings[MAXPLAYERS]) != 0)
                                     {
-                                        j = 0;
-                                        break;
-                                    }
-                                    if((Bstrcmp(tmp,"192") == 0) || (Bstrcmp(tmp,"172") == 0))
-                                    {
-                                        Bstrcpy(tmp,strtok(NULL,"."));
-                                        if((Bstrcmp(tmp,"168") == 0) || (Bstrcmp(tmp,"16") == 0))
+                                        Bstrncpy(tempbuf,rancid_ip_strings[j], 8);
+                                        Bstrcpy(tmp,strtok(tempbuf,"."));
+                                        if(Bstrcmp(tmp,"10") == 0)
                                         {
                                             j = 0;
                                             break;
                                         }
+                                        if((Bstrcmp(tmp,"192") == 0) || (Bstrcmp(tmp,"172") == 0))
+                                        {
+                                            Bstrcpy(tmp,strtok(NULL,"."));
+                                            if((Bstrcmp(tmp,"168") == 0) || (Bstrcmp(tmp,"16") == 0))
+                                            {
+                                                j = 0;
+                                                break;
+                                            }
+                                        }
                                     }
                                 }
-                            }
 
-                            Bstrcpy(tempbuf,rancid_ip_strings[MAXPLAYERS]);
-                            Bstrcpy(tmp,strtok(tempbuf,"."));
-                            if(j == rancid_players && ((Bstrcmp(tmp,"192") == 0) || (Bstrcmp(tmp,"172") == 0) || (Bstrcmp(tmp,"10") == 0)))
-                            {
-                                Bsprintf(tempbuf, getexternaladdress());
-                                if(tempbuf[0])
+                                Bstrcpy(tempbuf,rancid_ip_strings[MAXPLAYERS]);
+                                Bstrcpy(tmp,strtok(tempbuf,"."));
+                                if(j == rancid_players && ((Bstrcmp(tmp,"192") == 0) || (Bstrcmp(tmp,"172") == 0) || (Bstrcmp(tmp,"10") == 0)))
                                 {
-                                    for(j=0;j<rancid_players;j++)
+                                    Bsprintf(tempbuf, getexternaladdress());
+                                    if(tempbuf[0])
                                     {
-                                        if(Bstrcmp(rancid_ip_strings[j],rancid_ip_strings[MAXPLAYERS]) == 0)
+                                        for(j=0;j<rancid_players;j++)
                                         {
-                                            Bstrcpy(rancid_ip_strings[MAXPLAYERS],tempbuf);
-                                            Bstrcpy(rancid_ip_strings[j],tempbuf);
+                                            if(Bstrcmp(rancid_ip_strings[j],rancid_ip_strings[MAXPLAYERS]) == 0)
+                                            {
+                                                Bstrcpy(rancid_ip_strings[MAXPLAYERS],tempbuf);
+                                                Bstrcpy(rancid_ip_strings[j],tempbuf);
+                                            }
                                         }
                                     }
                                 }
                             }
-
                             qsort((char *)rancid_ip_strings, rancid_players, sizeof(rancid_ip_strings[0]), (int(*)(const void*,const void*))stringsort);
 
                             netparamcount = rancid_players;