| 146 | } |
| 147 | |
| 148 | void nthread_start(bool setTurnUpperBit) |
| 149 | { |
| 150 | last_tick = SDL_GetTicks(); |
| 151 | sgbPacketCountdown = 1; |
| 152 | sgbSyncCountdown = 1; |
| 153 | sgbTicsOutOfSync = true; |
| 154 | if (setTurnUpperBit) |
| 155 | nthread_set_turn_upper_bit(); |
| 156 | else |
| 157 | turn_upper_bit = 0; |
| 158 | _SNETCAPS caps; |
| 159 | caps.size = 36; |
| 160 | SNetGetProviderCaps(&caps); |
| 161 | gdwTurnsInTransit = caps.defaultturnsintransit; |
| 162 | if (gdwTurnsInTransit == 0) |
| 163 | gdwTurnsInTransit = 1; |
| 164 | if (caps.defaultturnssec <= 20 && caps.defaultturnssec != 0) |
| 165 | sgbNetUpdateRate = 20 / caps.defaultturnssec; |
| 166 | else |
| 167 | sgbNetUpdateRate = 1; |
| 168 | uint32_t largestMsgSize = 512; |
| 169 | if (caps.maxmessagesize < 0x200) |
| 170 | largestMsgSize = caps.maxmessagesize; |
| 171 | gdwLargestMsgSize = largestMsgSize; |
| 172 | gdwNormalMsgSize = caps.bytessec * sgbNetUpdateRate / 20; |
| 173 | gdwNormalMsgSize *= 3; |
| 174 | gdwNormalMsgSize >>= 2; |
| 175 | if (caps.maxplayers > MAX_PLRS) |
| 176 | caps.maxplayers = MAX_PLRS; |
| 177 | gdwNormalMsgSize /= caps.maxplayers; |
| 178 | while (gdwNormalMsgSize < 0x80) { |
| 179 | gdwNormalMsgSize *= 2; |
| 180 | sgbNetUpdateRate *= 2; |
| 181 | } |
| 182 | if (gdwNormalMsgSize > largestMsgSize) |
| 183 | gdwNormalMsgSize = largestMsgSize; |
| 184 | if (gbIsMultiplayer) { |
| 185 | sgbThreadIsRunning = false; |
| 186 | MemCrit.lock(); |
| 187 | nthread_should_run = true; |
| 188 | Thread = SdlThread { NthreadHandler }; |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | void nthread_cleanup() |
| 193 | { |
no test coverage detected