summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorTechjar <tecknojar@gmail.com>2019-06-03 20:34:06 -0400
committerTechjar <tecknojar@gmail.com>2019-06-05 02:36:23 -0400
commit5f3bf405d4d4a26f9bf0ecb1c65d24f98b1bbbe1 (patch)
treedbec00cead26a354b4be7d389a796b852e98b884 /Source
parent4f6cdfe68675eba932bd2806d6aa1bea97c864be (diff)
Core/Movie: Store PAD_GET_ORIGIN bit in ControllerState
This fixes the desync on playback of start-from-boot input recordings made while using the GC adapter, as well as other desyncs that could potentially occur in other circumstances where this bit is used. I used a previously reserved bit in the ControllerState to store the new data, so this shouldn't significantly break backwards compatibility. However, tools that aren't aware of this new bit may set it to 0, which will break input recordings that contain it.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/Movie.cpp6
-rw-r--r--Source/Core/Core/Movie.h2
2 files changed, 7 insertions, 1 deletions
diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp
index 6af7681eb7..ea6aa486d1 100644
--- a/Source/Core/Core/Movie.cpp
+++ b/Source/Core/Core/Movie.cpp
@@ -803,6 +803,8 @@ void CheckPadStatus(const GCPadStatus* PadStatus, int controllerID)
s_padState.is_connected = PadStatus->isConnected;
+ s_padState.get_origin = (PadStatus->button & PAD_GET_ORIGIN) != 0;
+
s_padState.disc = s_bDiscChange;
s_bDiscChange = false;
s_padState.reset = s_bReset;
@@ -1182,6 +1184,10 @@ void PlayController(GCPadStatus* PadStatus, int controllerID)
PadStatus->button |= PAD_TRIGGER_L;
if (s_padState.R)
PadStatus->button |= PAD_TRIGGER_R;
+
+ if (s_padState.get_origin)
+ PadStatus->button |= PAD_GET_ORIGIN;
+
if (s_padState.disc)
{
Core::RunAsCPUThread([] {
diff --git a/Source/Core/Core/Movie.h b/Source/Core/Core/Movie.h
index 02acfa6661..dc788804f9 100644
--- a/Source/Core/Core/Movie.h
+++ b/Source/Core/Core/Movie.h
@@ -49,7 +49,7 @@ struct ControllerState
bool disc : 1; // Checks for disc being changed
bool reset : 1; // Console reset button
bool is_connected : 1; // Should controller be treated as connected
- bool reserved : 1; // Reserved bits used for padding, 1 bit
+ bool get_origin : 1; // Special bit to indicate analog origin reset
u8 TriggerL, TriggerR; // Triggers, 16 bits
u8 AnalogStickX, AnalogStickY; // Main Stick, 16 bits