diff --git a/BizHawk.MultiClient/Global.cs b/BizHawk.MultiClient/Global.cs index 95f533b17c..8df64a4e6c 100644 --- a/BizHawk.MultiClient/Global.cs +++ b/BizHawk.MultiClient/Global.cs @@ -194,6 +194,11 @@ namespace BizHawk.MultiClient } }; + public static readonly Dictionary> ANALOGS = new Dictionary> + { + {"Nintento 64 Controller", new Dictionary {{"X Axis", "X"}, {"Y Axis", "Y"}}} + }; + public static readonly Dictionary> COMMANDS = new Dictionary> { {"Atari 2600 Basic Controller", new Dictionary {{"Reset", "r"}, {"Select", "s"}}}, diff --git a/BizHawk.MultiClient/movie/InputAdapters.cs b/BizHawk.MultiClient/movie/InputAdapters.cs index 52343d825c..1b4f074488 100644 --- a/BizHawk.MultiClient/movie/InputAdapters.cs +++ b/BizHawk.MultiClient/movie/InputAdapters.cs @@ -398,6 +398,11 @@ namespace BizHawk.MultiClient return ret; } + float GetBaseFloat(string name) + { + return Source.GetFloat(name); + } + public bool IsEmpty { get @@ -595,6 +600,12 @@ namespace BizHawk.MultiClient { input.Append(IsBasePressed("P" + player + " " + button) ? Global.BUTTONS[ControlType][button] : "."); } + + foreach (string name in Global.ANALOGS[ControlType].Keys) + { + input.Append(String.Format("{0:000}", (int)GetBaseFloat("P" + player + " " + name) + 128)); + } + input.Append('|'); } @@ -880,6 +891,11 @@ namespace BizHawk.MultiClient MyBoolButtons[button] = state; } + void Force(string name, float state) + { + MyFloatControls[name] = state; + } + string ControlType { get { return Type.Name; } } class MnemonicChecker @@ -1006,7 +1022,7 @@ namespace BizHawk.MultiClient for (int player = 1; player <= Global.PLAYERS[ControlType]; player++) { - int srcindex = (player - 1) * (Global.BUTTONS[ControlType].Count + 1); + int srcindex = (player - 1) * (Global.BUTTONS[ControlType].Count + Global.ANALOGS[ControlType].Count * 3 + 1); if (mnemonic.Length < srcindex + 3 + Global.BUTTONS[ControlType].Count - 1) { @@ -1018,6 +1034,17 @@ namespace BizHawk.MultiClient { Force("P" + player + " " + button, c[srcindex + start++]); } + + foreach (string name in Global.ANALOGS[ControlType].Keys) + { + if (InputValidate.IsValidUnsignedNumber(mnemonic.Substring(srcindex + start, 3))) + { + Console.WriteLine((float)(Int32.Parse(mnemonic.Substring(srcindex + start, 3)) - 128)); + Force("P" + player + " " + name, Int32.Parse(mnemonic.Substring(srcindex + start, 3)) - 128); + } + + start += 3; + } } } diff --git a/BizHawk.MultiClient/tools/VirtualPadN64.cs b/BizHawk.MultiClient/tools/VirtualPadN64.cs index 332d12fc8d..9c5121d86a 100644 --- a/BizHawk.MultiClient/tools/VirtualPadN64.cs +++ b/BizHawk.MultiClient/tools/VirtualPadN64.cs @@ -160,13 +160,13 @@ namespace BizHawk.MultiClient private void AnalogControl1_MouseClick(object sender, MouseEventArgs e) { Global.StickyXORAdapter.SetFloat("P1 X Axis", AnalogControl1.X); - Global.StickyXORAdapter.SetFloat("P1 Y Axis", -AnalogControl1.Y); + Global.StickyXORAdapter.SetFloat("P1 Y Axis", -AnalogControl1.Y - 1); } private void AnalogControl1_MouseMove(object sender, MouseEventArgs e) { Global.StickyXORAdapter.SetFloat("P1 X Axis", AnalogControl1.X); - Global.StickyXORAdapter.SetFloat("P1 Y Axis", -AnalogControl1.Y); + Global.StickyXORAdapter.SetFloat("P1 Y Axis", -AnalogControl1.Y - 1); } } }