summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorRachel Bryk <RachelBryk@gmail.com>2014-11-02 01:58:59 -0500
committerRachel Bryk <RachelBryk@gmail.com>2014-11-03 00:30:29 -0500
commitf9495a484ced8088e1f8ca00f05bde2eecf9c347 (patch)
tree1335923cb69458df913e984d77a4c98145ea2c16 /Source/Core
parent9daaf94f3c8caf71dab16c7e591ce7905c1416c4 (diff)
Allow hard resets to be recorded in movies.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Movie.cpp18
-rw-r--r--Source/Core/Core/Movie.h8
-rw-r--r--Source/Core/DolphinWX/FrameTools.cpp2
3 files changed, 18 insertions, 10 deletions
diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp
index cb667bdeac..2efef5a9b5 100644
--- a/Source/Core/Core/Movie.cpp
+++ b/Source/Core/Core/Movie.cpp
@@ -21,6 +21,7 @@
#include "Core/DSP/DSPCore.h"
#include "Core/HW/DVDInterface.h"
#include "Core/HW/EXI_Device.h"
+#include "Core/HW/ProcessorInterface.h"
#include "Core/HW/SI.h"
#include "Core/HW/Wiimote.h"
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"
@@ -65,6 +66,7 @@ static std::string s_videoBackend = "unknown";
static int s_iCPUCore = 1;
bool g_bClearSave = false;
bool g_bDiscChange = false;
+bool g_bReset = false;
static std::string s_author = "";
std::string g_discChange = "";
u64 g_titleID = 0;
@@ -576,6 +578,8 @@ static void SetInputDisplayString(ControllerState padState, int controllerID)
s_InputDisplay[controllerID].append(" LEFT");
if (padState.DPadRight)
s_InputDisplay[controllerID].append(" RIGHT");
+ if (padState.reset)
+ s_InputDisplay[controllerID].append(" RESET");
s_InputDisplay[controllerID].append(Analog1DToString(padState.TriggerL, " L"));
s_InputDisplay[controllerID].append(Analog1DToString(padState.TriggerR, " R"));
@@ -726,6 +730,11 @@ void CheckPadStatus(GCPadStatus* PadStatus, int controllerID)
s_padState.CStickX = PadStatus->substickX;
s_padState.CStickY = PadStatus->substickY;
+ s_padState.disc = g_bDiscChange;
+ g_bDiscChange = false;
+ s_padState.reset = g_bReset;
+ g_bReset = false;
+
SetInputDisplayString(s_padState, controllerID);
}
@@ -736,12 +745,6 @@ void RecordInput(GCPadStatus* PadStatus, int controllerID)
CheckPadStatus(PadStatus, controllerID);
- if (g_bDiscChange)
- {
- s_padState.disc = g_bDiscChange;
- g_bDiscChange = false;
- }
-
EnsureTmpInputSize((size_t)(s_currentByte + 8));
memcpy(&(tmpInput[s_currentByte]), &s_padState, 8);
s_currentByte += 8;
@@ -1111,6 +1114,9 @@ void PlayController(GCPadStatus* PadStatus, int controllerID)
}
}
+ if (s_padState.reset)
+ ProcessorInterface::ResetButton_Tap();
+
SetInputDisplayString(s_padState, controllerID);
CheckInputEnd();
}
diff --git a/Source/Core/Core/Movie.h b/Source/Core/Core/Movie.h
index 314509bcee..98660bc42d 100644
--- a/Source/Core/Core/Movie.h
+++ b/Source/Core/Core/Movie.h
@@ -39,18 +39,18 @@ struct ControllerState
DPadLeft:1, DPadRight:1;
bool L:1, R:1; // Binary triggers, 2 bits
bool disc:1; // Checks for disc being changed
- bool reserved:3; // Reserved bits used for padding, 4 bits
+ bool reset:1; // Console reset button
+ bool reserved:2; // Reserved bits used for padding, 2 bits
u8 TriggerL, TriggerR; // Triggers, 16 bits
u8 AnalogStickX, AnalogStickY; // Main Stick, 16 bits
u8 CStickX, CStickY; // Sub-Stick, 16 bits
-
-}; // Total: 60 + 4 = 64 bits per frame
+};
static_assert(sizeof(ControllerState) == 8, "ControllerState should be 8 bytes");
#pragma pack(pop)
// Global declarations
-extern bool g_bDiscChange, g_bClearSave;
+extern bool g_bDiscChange, g_bClearSave, g_bReset;
extern u64 g_titleID;
extern u64 g_currentFrame, g_totalFrames;
diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp
index 0c27b52308..82fa89cec4 100644
--- a/Source/Core/DolphinWX/FrameTools.cpp
+++ b/Source/Core/DolphinWX/FrameTools.cpp
@@ -1307,6 +1307,8 @@ void CFrame::OnStop(wxCommandEvent& WXUNUSED (event))
void CFrame::OnReset(wxCommandEvent& WXUNUSED (event))
{
+ if (Movie::IsRecordingInput())
+ Movie::g_bReset = true;
ProcessorInterface::ResetButton_Tap();
}