Commit graph

92 commits

Author SHA1 Message Date
mimimi085181
8b7bfe6cf9 Netplay: Fix synchronization for the Wiinote netplay
The old implementation always polled the local 1st Wiimote and used that as input for the Wiimote that is mapped to the player. But the reporting mode for Wiimotes can be different, even when using the same extensions. So an input for Wiimote 1 with a data size 4 could be used for Wiimote 2, which actually requires data size 7 at that time for example.

The 2nd problem was that the code added a dummy input into the buffer, when the reporting mode changed. But when the data from the other player hasn't arrived yet, the data in the buffer is out of order. Well, i think this is the problem, i'm not 100% sure, because i don't fully understand how the buffer works. But on the other hand, i'm pretty sure this will just force sync the players on reporting mode changes, instead of allowing them to be apart.

Pros:
- No more desyncs caused by big bugs in the code.
- Can use different extensions for different players.

Cons:
- Higher latency, because instead of polling 1 controller per player at once, all controllers are polled in order, send to the other players, before the next is processed.
- Have to setup the Wiimote, which the player is going to use, instead of the 1st one.

Now, if the controller config could temporarily be overridden with the one from another slot, the 2nd problem could be fixed. But at the same time, we would lose the ability to use different extensions. (unless we hack around it somehow, or properly send the used extension to the other players)
2016-07-16 13:00:54 +02:00
Pierre Bourdon
2de6d07360 Merge pull request #4000 from JosJuice/movie-netplay-global
Movie: Don't access g_netplay_initial_gctime directly
2016-07-11 17:09:04 +02:00
JosJuice
8df4437b6c Movie: Don't access g_netplay_initial_gctime directly
Using the global variable directly is ugly and might not be threadsafe.
2016-07-11 16:49:58 +02:00
Pierre Bourdon
f57aec0525 Merge pull request #3858 from Aestek/feature/better-netplay-gamenotfound
Netplay: check if all players have the game before starting
2016-07-11 10:06:00 +02:00
comex
8a02473237 Fix more warnings:
- Externals/soundtouch/CMakeLists.txt: add -w (since it's not our code) to
silence an unused variable warning
- Source/Core/Core/NetPlayClient.cpp: Work around a Clang/libc++ bug where
initializing a std::array the way the standard says you're supposed to produces
a warning.  (libc++'s implementation of std::array, like any sane
implementation, has a C array as a field, so the most explicit form of
initialization would use two braces, one for the struct and one for the array.
Clang has a general warning for not being explicit with braces, which is
usually sane.  But the standard only guarantees that initializing std::array
works with a single pair of braces!)  There are other places in Dolphin that
incorrectly use double braces, presumably to avoid the warning, so maybe the
warning should just be turned off, but in any case here I just switch to an
equivalent .fill().
2016-07-10 21:51:28 -04:00
Aestek
cd9a58b704 Check if all players have the game before starting netplay
https://bugs.dolphin-emu.org/issues/8885
2016-07-10 10:13:34 +02:00
mimimi085181
de7b2f984a Make tries a u32
Before this variable was an u8, which could theoretically result in desyncs with a large buffer(greater than 255*120/200=153) filled with blank inputs. If this could actually happen, i don't know. But this part of the code on its own looks like it could break.
2016-07-08 23:30:25 +02:00
mimimi085181
b962c1f392 Fix running more than one session with Wiimotes
A static var is not a good idea, when the value needs to be reset for every session. Also, the variable holds the data size, so it makes sense to set the data size, where the data is added.
2016-07-08 23:30:24 +02:00
mimimi085181
4f9fe41ee6 Revert pr#3660
https://github.com/dolphin-emu/dolphin/pull/3660
2016-07-08 20:23:33 +02:00
mimimi085181
330289cf71 Revert pr#3691
https://github.com/dolphin-emu/dolphin/pull/3691
2016-07-08 20:23:32 +02:00
mimimi085181
fcf5d4f6bc Revert pr#3802
https://github.com/dolphin-emu/dolphin/pull/3802
2016-07-07 14:25:30 +02:00
JDV
d6a2fcd26c Formatting and setting is now only temporarily changed (#1)
Add the cheat setting to the bootmanager config cache, and reformat
2016-07-05 02:23:19 +02:00
mathieui
8a2e7fddd1 Sync the "enable cheat" setting over netplay 2016-07-05 02:23:10 +02:00
Pierre Bourdon
3570c7f03a Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
mimimi085181
1d90719abe Fix latency regression
On master, when polling the 1st in-game controller, Dolphin would poll all the 1st local controllers. With the 1st commit, each client waits its turn, which would dramatically increase the lag.

Now with this commit, it even polls all local controllers at once, so it should have even less latency than master in a few setups. Like one player with 3 controllers and the 2nd one with just one controller.
2016-05-24 22:13:40 +02:00
mimimi085181
ca9027879b Netplay: Fix gamecube controller mapping
This fixes issues with setups like:
Player 1 uses port 1 and player 2 uses port 3, or
player 1 uses port 2 and player 2 uses port 3, so nobody uses port 1
2016-05-24 21:59:36 +02:00
Markus Wick
ca728d792a Merge pull request #3802 from mathieui/netplay-disable-wiimotes-for-real-i-swear
Disable wiimotes on game start if running in netplay
2016-05-20 12:38:21 +02:00
mathieui
ef0f164343 Disable wiimotes on game start if running in netplay
And restore the settings on game quit
2016-05-20 12:05:29 +02:00
degasus
2030ad4577 SCM: Use std::string.
Those macros may be defined, or not. We should support both cases, so use std::string as it also defines the length of the string.
2016-05-05 00:22:49 +02:00
Pierre Bourdon
3b6af8c7a5 Merge pull request #3691 from rukai/netplayWiiRemoval
Netplay Wii Remote Removal
2016-03-04 23:45:07 +01:00
Rukai
1b65adcd56 Fully remove wii remote netplay UI code and remove reference to WiimoteReal in NetPlayClient.cpp 2016-03-02 21:02:15 +11:00
mathieui
4fe2886c2c [netplay] Use the device only if it’s a gc controller or similar
(bad things could happen if we wire up the gba with netplay)
2016-02-25 22:58:21 +01:00
mathieui
c7750b287d netplay: default the local pad to a gc controller
if the configured local pad is none, it will make dolphin behave
incorrectly (due to the game expecting inputs from the device while it
doesn’t exist).
2016-01-28 20:24:18 +01:00
mathieui
24cb6487d4 [netplay] Fix a regression
Introduced in 6e13496d8, pads would get assigned to their netplay
position, which breaks assumptions. With this behavior, the SI devices
should be mapped properly.
2016-01-27 01:43:31 +01:00
Lioncash
c434b5b3a9 NetPlayClient: Use std::array instead of C arrays for buffers 2016-01-25 04:57:21 -05:00
Lioncash
7304c863a6 NetPlayClient: Deduplicate code for player list retrieval 2016-01-25 04:57:20 -05:00
Lioncash
e6ad76fa70 NetPlayClient: Extract control mapping checking to its own function 2016-01-25 04:57:19 -05:00
Lioncash
8588c8fd31 NetPlayClient: Make SendAsync take a unique_ptr as a parameter 2016-01-25 04:57:18 -05:00
Lioncash
c2deb337aa NetPlayClient: In-class initialize variables where possible 2016-01-25 04:57:17 -05:00
Lioncash
1d8ff504a5 NetPlayClient: Make m_state private
Also turns it into an enum class.
2016-01-25 04:57:16 -05:00
Lioncash
102672a797 NetPlayClient: Make is_connected private
This is only queried, there's no need to expose it for writing.
Even if it was written to, a data member shouldn't be part of
your public API unless its part of a dumb object or trivial struct.
2016-01-25 04:57:04 -05:00
Lioncash
d9f87b8030 NetPlayClient: Remove unnecessary includes
Replace with needed ones
2016-01-24 21:46:49 -05:00
mathieui
5e709f3d72 [netplay] Use the local type of each SI device
Instead of using SI_GCcontroller which would make it not work with gc
adapters, bongos, and other stuff.

Trying to fix issue #9263
2016-01-23 17:29:07 +01:00
Ryan Houdek
1a20772ccd Stops netplay clients from failing to send settings on game start
Clients have no need to send their configuration information on start and the server straight out ignores it.
Not to mention it shouldn't try sending a struct as a null terminated string.

Cleans up how the server sends the configuration slightly as well.
2016-01-21 07:20:21 -06:00
mathieui
40c7a2fb7d Use the current commit hash in the netplay version
So that it contains the current commit and not an arbitrary date that
may or may not be up-to-date. This will cause tears as people will not
be able to use netplay with one diverging commit that does not touch
anything related. On the other hand, users can’t be trusted.
2016-01-07 00:17:05 +01:00
flacs
49ea15b950 Merge pull request #2873 from lioncash/netleaks
NetPlay: Fix a memory leak
2015-09-16 21:56:17 +02:00
Lioncash
68c0ec281b NetPlayClient: Correctly free packet data 2015-08-18 08:32:58 -04:00
Lioncash
11f3ded296 NetPlay: Return mapping arrays and player list vectors directly
Simplifies pad map dialog initialization
2015-08-17 21:56:25 -04:00
Admiral H. Curtiss
84e42904a2 Netplay: Sync Video Mode settings. (Progressive Scan and PAL60)
Must match so that Wii games don't desync, especially PAL games.
2015-06-24 12:41:10 +02:00
Tillmann Karras
c9af7def28 Fix some warnings 2015-06-23 21:11:56 +02:00
Admiral H. Curtiss
abb65515b9 Netplay: Sync GameCube SRAM. 2015-06-14 16:52:08 +02:00
degasus
c375111076 Options: merge SCoreStartupParameter into SConfig 2015-06-12 19:07:45 +02:00
comex
9c63b78397 Fix indeterminism in GPU thread mode. 2015-06-06 02:14:06 -04:00
comex
f2631a835e Simplify and improve.
Note - I removed a SleepCurrentThread(1) the patch added which seemed to
be unrelated to the actual job at hand.  If there was a real need for it
(which sounds like it would be an enet-related bug - enet_host_service
is supposed to *sleep*), that needs to be dealt with...
2015-06-06 01:28:01 -04:00
Rachel Bryk
04ca54623c Compare timebase of netplay users to detect desyncs. 2015-06-06 00:52:02 -04:00
Lioncash
de2e84344d Core: Convert volatile bools to atomics
Converts over bools that are typically used as loop checks into atomics.
2015-06-04 21:21:11 -04:00
JosJuice
95a2abc1ce Use PanicAlertT instead of PanicAlert when appropriate
I tried to change messages that contained instructions for users,
while avoiding messages that are so technical that most users
wouldn't understand them even if they were in the right language.
2015-06-04 13:25:06 +02:00
Lioncash
ac26f8e79f Pass strings by const reference where possible 2015-05-28 20:54:55 -04:00
Ryan Houdek
96ef0fce38 Merge pull request #2450 from lioncash/alloc
NetPlayClient: Remove unnecessary array allocation
2015-05-25 23:42:49 -04:00
Tillmann Karras
30ebb2459e Set copyright year to when a file was created 2015-05-25 13:22:31 +02:00