├── .gitignore
├── PPTTools
├── .gitignore
├── VAMemory.dll
├── Resources
│ ├── icon.ico
│ ├── key0_0.png
│ ├── key0_1.png
│ ├── key1_0.png
│ ├── key1_1.png
│ ├── key2_0.png
│ ├── key2_1.png
│ ├── key3_0.png
│ ├── key3_1.png
│ ├── key4_0.png
│ ├── key4_1.png
│ ├── key5_0.png
│ ├── key5_1.png
│ ├── key6_0.png
│ └── key6_1.png
├── PPTTools.csproj.user
├── Program.cs
├── Modules
│ ├── APC
│ │ ├── APCForm.cs
│ │ ├── APC.cs
│ │ └── APCForm.Designer.cs
│ ├── APM
│ │ ├── APMForm.cs
│ │ ├── APM.cs
│ │ └── APMForm.Designer.cs
│ ├── KPP
│ │ ├── KPPForm.cs
│ │ ├── KPPForm.Designer.cs
│ │ └── KPP.cs
│ ├── PPS
│ │ ├── PPSForm.cs
│ │ ├── PPS.cs
│ │ └── PPSForm.Designer.cs
│ ├── Duration
│ │ ├── DurationForm.cs
│ │ ├── Duration.cs
│ │ └── DurationForm.Designer.cs
│ ├── Finesse
│ │ ├── FinesseForm.cs
│ │ ├── FinesseForm.Designer.cs
│ │ └── Finesse.cs
│ ├── FTX
│ │ ├── FTXForm.cs
│ │ ├── FTX.cs
│ │ └── FTXForm.Designer.cs
│ ├── Rating
│ │ ├── RatingForm.cs
│ │ ├── Rating.cs
│ │ └── RatingForm.Designer.cs
│ ├── Inputs
│ │ ├── InputsForm.cs
│ │ ├── Inputs.cs
│ │ └── InputsForm.Designer.cs
│ └── Module.cs
├── Properties
│ ├── Settings.settings
│ ├── AssemblyInfo.cs
│ ├── Settings.Designer.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── app.config
├── MainForm.cs
├── PPTTools.csproj
├── MainForm.Designer.cs
├── FinesseHelper.cs
├── GameHelper.cs
└── MainForm.resx
├── .gitattributes
├── README.md
└── PPTTools.sln
/.gitignore:
--------------------------------------------------------------------------------
1 | .vs
--------------------------------------------------------------------------------
/PPTTools/.gitignore:
--------------------------------------------------------------------------------
1 | bin
2 | obj
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/PPTTools/VAMemory.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/VAMemory.dll
--------------------------------------------------------------------------------
/PPTTools/Resources/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/icon.ico
--------------------------------------------------------------------------------
/PPTTools/Resources/key0_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key0_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key0_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key0_1.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key1_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key1_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key1_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key1_1.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key2_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key2_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key2_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key2_1.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key3_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key3_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key3_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key3_1.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key4_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key4_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key4_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key4_1.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key5_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key5_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key5_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key5_1.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key6_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key6_0.png
--------------------------------------------------------------------------------
/PPTTools/Resources/key6_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZetrisAI/PPT-Tools/HEAD/PPTTools/Resources/key6_1.png
--------------------------------------------------------------------------------
/PPTTools/PPTTools.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ShowAllFiles
5 |
6 |
--------------------------------------------------------------------------------
/PPTTools/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | static class Program {
6 | [STAThread]
7 | static void Main() {
8 | Application.EnableVisualStyles();
9 | Application.SetCompatibleTextRenderingDefault(false);
10 | Application.Run(new MainForm());
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/PPTTools/Modules/APC/APCForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class APCForm : Form {
6 | public APCForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(Decimal apc) {
11 | labelAPC.Text = apc.ToString("0.000 APC");
12 | }
13 |
14 | private void APCForm_Load(object sender, EventArgs e) {
15 | GameHelper.GameState._APC.Changed += OnChanged;
16 | GameHelper.GameState._APC.Update();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/PPTTools/Modules/APM/APMForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class APMForm : Form {
6 | public APMForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(Decimal apm) {
11 | labelAPM.Text = apm.ToString("0.000 APM");
12 | }
13 |
14 | private void APMForm_Load(object sender, EventArgs e) {
15 | GameHelper.GameState._APM.Changed += OnChanged;
16 | GameHelper.GameState._APM.Update();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/PPTTools/Modules/KPP/KPPForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class KPPForm : Form {
6 | public KPPForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(Decimal kpp) {
11 | labelKPP.Text = kpp.ToString("0.000 KPP");
12 | }
13 |
14 | private void KPPForm_Load(object sender, EventArgs e) {
15 | GameHelper.GameState._KPP.Changed += OnChanged;
16 | GameHelper.GameState._KPP.Update();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/PPTTools/Modules/PPS/PPSForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class PPSForm : Form {
6 | public PPSForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(Decimal pps) {
11 | labelPPS.Text = pps.ToString("0.000 PPS");
12 | }
13 |
14 | private void PPSForm_Load(object sender, EventArgs e) {
15 | GameHelper.GameState._PPS.Changed += OnChanged;
16 | GameHelper.GameState._PPS.Update();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Duration/DurationForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class DurationForm : Form {
6 | public DurationForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(string time) {
11 | labelDuration.Text = time;
12 | }
13 |
14 | private void DurationForm_Load(object sender, EventArgs e) {
15 | GameHelper.GameState._Duration.Changed += OnChanged;
16 | GameHelper.GameState._Duration.Update();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Finesse/FinesseForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class FinesseForm : Form {
6 | public FinesseForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(int errors) {
11 | labelFinesse.Text = $"Finesse: {errors.ToString()}";
12 | }
13 |
14 | private void FinesseForm_Load(object sender, EventArgs e) {
15 | GameHelper.GameState._Finesse.Changed += OnChanged;
16 | GameHelper.GameState._Finesse.Update();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/PPTTools/Modules/FTX/FTXForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class FTXForm : Form {
6 | public FTXForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(int[] score) {
11 | labelP1.Text = score[0].ToString();
12 | labelP2.Text = score[1].ToString();
13 | }
14 |
15 | private void FTXForm_Load(object sender, EventArgs e) {
16 | GameHelper.GameState._FTX.Changed += OnChanged;
17 | GameHelper.GameState._FTX.Update();
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Rating/RatingForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace PPTTools {
5 | public partial class RatingForm : Form {
6 | public RatingForm() {
7 | InitializeComponent();
8 | }
9 |
10 | private void OnChanged(int start, int current) {
11 | labelStart.Text = start.ToString();
12 | labelCurrent.Text = current.ToString();
13 | }
14 |
15 | private void RatingForm_Load(object sender, EventArgs e) {
16 | GameHelper.GameState._Rating.Changed += OnChanged;
17 | GameHelper.GameState._Rating.Update();
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Inputs/InputsForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.Windows.Forms;
4 |
5 | namespace PPTTools {
6 | public partial class InputsForm : Form {
7 | public InputsForm() {
8 | InitializeComponent();
9 | }
10 |
11 | private void OnChanged(int[] keys) {
12 | for (int i = 0; i < 7; i++)
13 | ((PictureBox)this.Controls[$"pictureKey{i}"]).BackgroundImage = (Image)PPTTools.Properties.Resources.ResourceManager.GetObject($"key{i}_{keys[i]}");
14 | }
15 |
16 | private void FTXForm_Load(object sender, EventArgs e) {
17 | GameHelper.GameState._Inputs.Changed += OnChanged;
18 | GameHelper.GameState._Inputs.Update();
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Module.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace PPTTools {
7 | namespace Modules {
8 | public abstract class Module {
9 | public readonly string Identifier;
10 | private string _filename = "";
11 | public string filename {
12 | get { return _filename; }
13 | set {
14 | _filename = value;
15 | Properties.Settings.Default[Identifier] = value;
16 | Properties.Settings.Default.Save();
17 | }
18 | }
19 |
20 | public Module(string identifier) {
21 | Identifier = identifier;
22 | filename = (string)Properties.Settings.Default[Identifier];
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Inputs/Inputs.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | namespace Modules {
3 | public class Inputs: Module {
4 | private static readonly string ModuleIdentifier = "inputs";
5 |
6 | private int[] keyStates = new int[7] {0, 0, 0, 0, 0, 0, 0};
7 |
8 | public delegate void InputsEventHandler(int[] keyStates);
9 | public event InputsEventHandler Changed;
10 |
11 | private void Raise() {
12 | if (Changed != null) {
13 | Changed.Invoke(keyStates);
14 | }
15 | }
16 |
17 | public void Reset() {
18 | Raise();
19 | }
20 |
21 | public void Update() {
22 | for (int i = 0; i < 7; i++)
23 | keyStates[i] = GameHelper.Keystroke(i);
24 |
25 | Raise();
26 | }
27 |
28 | public Inputs(): base(ModuleIdentifier) {
29 | Reset();
30 | }
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PPT Tools (DEPRECATED)
2 |
3 | These were my first effort on reverse engineering PPT, I've learned better since then, however other solutions have surpassed me and I have no interest in continuing this project. See https://github.com/bayoen.
4 |
5 | Puyo Puyo Tetris tools enhance your streaming or playing experience by providing you with useful statistics about your gameplay.
6 |
7 | ## FTX
8 |
9 | FTX is a total games won counter for Free Play games ("First to X") format. This format is usually used for professional matches. This solves the problem of having to count the wins manually, usually in Twitch stream chat.
10 |
11 | ## PPS
12 |
13 | PPS (pieces per second) counter for Tetris in Sprint, Solo and Online games. This allows streamers and competitors to track their in-game speed, follow their progress as they get faster and generally to show off.
14 |
15 | ## APM
16 |
17 | APM (attack per minute) counter for Tetris in Solo and Online games. This allows streamers and competitors to track their damange output, mostly to see how effective their gameplay actually is.
18 |
--------------------------------------------------------------------------------
/PPTTools.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.28010.2019
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPTTools", "PPTTools\PPTTools.csproj", "{23A2F118-FF17-423A-B57F-6DE28B808AC1}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {23A2F118-FF17-423A-B57F-6DE28B808AC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {23A2F118-FF17-423A-B57F-6DE28B808AC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {23A2F118-FF17-423A-B57F-6DE28B808AC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {23A2F118-FF17-423A-B57F-6DE28B808AC1}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {38E97F27-2539-48A7-9CC7-CFA3990E28D1}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Duration/Duration.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 |
4 | namespace PPTTools {
5 | namespace Modules {
6 | public class Duration: Module {
7 | private static readonly string ModuleIdentifier = "duration";
8 |
9 | int frames;
10 |
11 | public delegate void DurationEventHandler(string Time);
12 | public event DurationEventHandler Changed;
13 |
14 | private void Raise() {
15 | if (Changed != null) {
16 | Changed.Invoke(new TimeSpan((long)(frames * 166666.6666666667)).ToString("mm':'ss'.'fff"));
17 | }
18 | }
19 |
20 | public void Reset() {
21 | frames = 0;
22 | Raise();
23 | }
24 |
25 | public void Update() {
26 | frames = GameHelper.SmallFrames();
27 | Raise();
28 | }
29 |
30 | public Duration(): base(ModuleIdentifier) {
31 | Reset();
32 | Changed += Write;
33 | }
34 |
35 | private void Write(string time) {
36 | if (File.Exists(filename)) {
37 | StreamWriter sw = new StreamWriter(filename);
38 | sw.WriteLine(time);
39 | sw.Flush();
40 | sw.Close();
41 | }
42 | }
43 | }
44 | }
45 | }
--------------------------------------------------------------------------------
/PPTTools/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Rating/Rating.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 |
3 | namespace PPTTools {
4 | namespace Modules {
5 | public class Rating: Module {
6 | private static readonly string ModuleIdentifier = "rating";
7 |
8 | private int start, current;
9 |
10 | public delegate void RatingEventHandler(int StartRating, int CurrentRating);
11 | public event RatingEventHandler Changed;
12 |
13 | private void Raise() {
14 | if (Changed != null) {
15 | Changed.Invoke(start, current);
16 | }
17 | }
18 |
19 | public void Reset() {
20 | start = current = GameHelper.Rating();
21 | Raise();
22 | }
23 |
24 | public void Update() {
25 | int rating = GameHelper.Rating();
26 |
27 | if (rating != current)
28 | current = rating;
29 |
30 | Raise();
31 | }
32 |
33 | public Rating(): base(ModuleIdentifier) {
34 | Reset();
35 | Changed += Write;
36 | }
37 |
38 | private void Write(int start, int current) {
39 | if (File.Exists(filename)) {
40 | StreamWriter sw = new StreamWriter(filename);
41 | sw.WriteLine($"{start} > {current}");
42 | sw.Flush();
43 | sw.Close();
44 | }
45 | }
46 | }
47 | }
48 | }
--------------------------------------------------------------------------------
/PPTTools/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("PPTTools")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("mat1jaczyyy")]
12 | [assembly: AssemblyProduct("PPTTools")]
13 | [assembly: AssemblyCopyright("Copyright © 2018")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("23a2f118-ff17-423a-b57f-6de28b808ac1")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/PPTTools/Modules/FTX/FTX.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 |
3 | namespace PPTTools {
4 | namespace Modules {
5 | public class FTX: Module {
6 | private static readonly string ModuleIdentifier = "ftx";
7 |
8 | private int[] score, total;
9 |
10 | public delegate void FTXEventHandler(int[] Score);
11 | public event FTXEventHandler Changed;
12 |
13 | private void Raise() {
14 | if (Changed != null) {
15 | Changed.Invoke(total);
16 | }
17 | }
18 |
19 | public void Reset() {
20 | score = new int[2] { 0, 0 };
21 | total = new int[2] { 0, 0 };
22 |
23 | Raise();
24 | }
25 |
26 | public void Update() {
27 | if (GameHelper.EnsureMatch()) {
28 | for (int i = 0; i < 2; i++) {
29 | int temp = GameHelper.Score(i);
30 |
31 | if (temp > score[i])
32 | total[i]++;
33 |
34 | score[i] = temp;
35 | }
36 |
37 | Raise();
38 |
39 | } else {
40 | Reset();
41 | }
42 | }
43 |
44 | public FTX(): base(ModuleIdentifier) {
45 | Reset();
46 | Changed += Write;
47 | }
48 |
49 | private void Write(int[] score) {
50 | if (File.Exists(filename)) {
51 | StreamWriter sw = new StreamWriter(filename);
52 | sw.WriteLine($"{score[0]} - {score[1]}");
53 | sw.Flush();
54 | sw.Close();
55 | }
56 | }
57 | }
58 | }
59 | }
--------------------------------------------------------------------------------
/PPTTools/Modules/PPS/PPS.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 |
4 | namespace PPTTools {
5 | namespace Modules {
6 | public class PPS: Module {
7 | private static readonly string ModuleIdentifier = "pps";
8 |
9 | private int pieces, state, frames;
10 |
11 | public delegate void PPSEventHandler(Decimal PPS);
12 | public event PPSEventHandler Changed;
13 |
14 | private void Raise() {
15 | if (Changed != null) {
16 | if (frames == 0) {
17 | Changed.Invoke(0);
18 | } else {
19 | Changed.Invoke(Decimal.Divide(pieces, frames) * 60);
20 | }
21 | }
22 | }
23 |
24 | public void Reset() {
25 | pieces = state = 0;
26 |
27 | Raise();
28 | }
29 |
30 | public void Update() {
31 | frames = GameHelper.SmallFrames();
32 | int drop = GameHelper.PieceDropped(GameHelper.GameState.playerIndex);
33 |
34 | if (drop != state) {
35 | if (drop == 1)
36 | pieces++;
37 |
38 | state = drop;
39 | }
40 |
41 | Raise();
42 | }
43 |
44 | public PPS(): base(ModuleIdentifier) {
45 | Reset();
46 | Changed += Write;
47 | }
48 |
49 | private void Write(Decimal pps) {
50 | if (File.Exists(filename)) {
51 | StreamWriter sw = new StreamWriter(filename);
52 | sw.WriteLine(pps.ToString("0.000 PPS"));
53 | sw.Flush();
54 | sw.Close();
55 | }
56 | }
57 | }
58 | }
59 | }
--------------------------------------------------------------------------------
/PPTTools/Modules/APM/APM.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 |
4 | namespace PPTTools {
5 | namespace Modules {
6 | public class APM: Module {
7 | private static readonly string ModuleIdentifier = "apm";
8 |
9 | private int current, total, frames;
10 |
11 | public delegate void APMEventHandler(Decimal APM);
12 | public event APMEventHandler Changed;
13 |
14 | private void Raise() {
15 | if (Changed != null) {
16 | if (frames == 0) {
17 | Changed.Invoke(0);
18 | } else {
19 | Changed.Invoke(Decimal.Divide(total, frames) * 3600);
20 | }
21 | }
22 | }
23 |
24 | public void Reset() {
25 | total = 0;
26 |
27 | Raise();
28 | }
29 |
30 | public void Update() {
31 | frames = GameHelper.SmallFrames();
32 | int garbage = GameHelper.GarbageSent(GameHelper.GameState.playerIndex);
33 |
34 | if (garbage != current) {
35 | if (garbage > current) {
36 | total += garbage - current;
37 | }
38 |
39 | current = garbage;
40 | }
41 |
42 | Raise();
43 | }
44 |
45 | public APM(): base(ModuleIdentifier) {
46 | Reset();
47 | Changed += Write;
48 | }
49 |
50 | private void Write(Decimal apm) {
51 | if (File.Exists(filename)) {
52 | StreamWriter sw = new StreamWriter(filename);
53 | sw.WriteLine(apm.ToString("0.000 APM"));
54 | sw.Flush();
55 | sw.Close();
56 | }
57 | }
58 | }
59 | }
60 | }
--------------------------------------------------------------------------------
/PPTTools/Modules/APC/APC.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 |
4 | namespace PPTTools {
5 | namespace Modules {
6 | public class APC: Module {
7 | private static readonly string ModuleIdentifier = "apc";
8 |
9 | private int currentSent, totalSent, currentCleared, totalCleared;
10 |
11 | public delegate void APCEventHandler(Decimal APC);
12 | public event APCEventHandler Changed;
13 |
14 | private void Raise() {
15 | if (Changed != null) {
16 | if (totalCleared == 0) {
17 | Changed.Invoke(0);
18 | } else {
19 | Changed.Invoke(Decimal.Divide(totalSent, totalCleared));
20 | }
21 | }
22 | }
23 |
24 | public void Reset() {
25 | totalSent = totalCleared = 0;
26 |
27 | Raise();
28 | }
29 |
30 | public void Update() {
31 | int garbage = GameHelper.GarbageSent(GameHelper.GameState.playerIndex);
32 |
33 | if (garbage != currentSent) {
34 | if (garbage > currentSent) {
35 | totalSent += garbage - currentSent;
36 | }
37 |
38 | currentSent = garbage;
39 | }
40 |
41 | int lines = GameHelper.LinesCleared(GameHelper.GameState.playerIndex);
42 |
43 | if (lines != currentCleared) {
44 | if (lines > currentCleared)
45 | totalCleared += lines;
46 |
47 | currentCleared = lines;
48 | }
49 |
50 | Raise();
51 | }
52 |
53 | public APC(): base(ModuleIdentifier) {
54 | Reset();
55 | Changed += Write;
56 | }
57 |
58 | private void Write(Decimal apc) {
59 | if (File.Exists(filename)) {
60 | StreamWriter sw = new StreamWriter(filename);
61 | sw.WriteLine(apc.ToString("0.000 APC"));
62 | sw.Flush();
63 | sw.Close();
64 | }
65 | }
66 | }
67 | }
68 | }
--------------------------------------------------------------------------------
/PPTTools/Modules/Finesse/FinesseForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class FinesseForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FinesseForm));
27 | this.labelFinesse = new System.Windows.Forms.Label();
28 | this.SuspendLayout();
29 | //
30 | // labelFinesse
31 | //
32 | this.labelFinesse.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
33 | this.labelFinesse.ForeColor = System.Drawing.Color.Gainsboro;
34 | this.labelFinesse.Location = new System.Drawing.Point(10, 11);
35 | this.labelFinesse.Name = "labelFinesse";
36 | this.labelFinesse.Size = new System.Drawing.Size(198, 26);
37 | this.labelFinesse.TabIndex = 2;
38 | this.labelFinesse.Text = "Finesse: 0";
39 | //
40 | // FinesseForm
41 | //
42 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
43 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
44 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
45 | this.ClientSize = new System.Drawing.Size(218, 47);
46 | this.Controls.Add(this.labelFinesse);
47 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
48 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
49 | this.MaximizeBox = false;
50 | this.Name = "FinesseForm";
51 | this.Text = "PPT Finesse";
52 | this.TopMost = true;
53 | this.Load += new System.EventHandler(this.FinesseForm_Load);
54 | this.ResumeLayout(false);
55 |
56 | }
57 |
58 | #endregion
59 |
60 | private System.Windows.Forms.Label labelFinesse;
61 | }
62 | }
63 |
64 |
--------------------------------------------------------------------------------
/PPTTools/Modules/APC/APCForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class APCForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(APCForm));
27 | this.labelAPC = new System.Windows.Forms.Label();
28 | this.SuspendLayout();
29 | //
30 | // labelAPC
31 | //
32 | this.labelAPC.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
33 | this.labelAPC.ForeColor = System.Drawing.Color.Gainsboro;
34 | this.labelAPC.Location = new System.Drawing.Point(49, 11);
35 | this.labelAPC.Name = "labelAPC";
36 | this.labelAPC.Size = new System.Drawing.Size(165, 26);
37 | this.labelAPC.TabIndex = 2;
38 | this.labelAPC.Text = "0.000 APC";
39 | this.labelAPC.TextAlign = System.Drawing.ContentAlignment.TopRight;
40 | //
41 | // APCForm
42 | //
43 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
44 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
45 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
46 | this.ClientSize = new System.Drawing.Size(218, 47);
47 | this.Controls.Add(this.labelAPC);
48 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
49 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
50 | this.MaximizeBox = false;
51 | this.Name = "APCForm";
52 | this.Text = "PPT APC";
53 | this.TopMost = true;
54 | this.Load += new System.EventHandler(this.APCForm_Load);
55 | this.ResumeLayout(false);
56 |
57 | }
58 |
59 | #endregion
60 |
61 | private System.Windows.Forms.Label labelAPC;
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/PPTTools/Modules/APM/APMForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class APMForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(APMForm));
27 | this.labelAPM = new System.Windows.Forms.Label();
28 | this.SuspendLayout();
29 | //
30 | // labelAPM
31 | //
32 | this.labelAPM.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
33 | this.labelAPM.ForeColor = System.Drawing.Color.Gainsboro;
34 | this.labelAPM.Location = new System.Drawing.Point(49, 11);
35 | this.labelAPM.Name = "labelAPM";
36 | this.labelAPM.Size = new System.Drawing.Size(165, 26);
37 | this.labelAPM.TabIndex = 2;
38 | this.labelAPM.Text = "0.000 APM";
39 | this.labelAPM.TextAlign = System.Drawing.ContentAlignment.TopRight;
40 | //
41 | // APMForm
42 | //
43 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
44 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
45 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
46 | this.ClientSize = new System.Drawing.Size(218, 47);
47 | this.Controls.Add(this.labelAPM);
48 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
49 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
50 | this.MaximizeBox = false;
51 | this.Name = "APMForm";
52 | this.Text = "PPT APM";
53 | this.TopMost = true;
54 | this.Load += new System.EventHandler(this.APMForm_Load);
55 | this.ResumeLayout(false);
56 |
57 | }
58 |
59 | #endregion
60 |
61 | private System.Windows.Forms.Label labelAPM;
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/PPTTools/Modules/KPP/KPPForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class KPPForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KPPForm));
27 | this.labelKPP = new System.Windows.Forms.Label();
28 | this.SuspendLayout();
29 | //
30 | // labelKPP
31 | //
32 | this.labelKPP.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
33 | this.labelKPP.ForeColor = System.Drawing.Color.Gainsboro;
34 | this.labelKPP.Location = new System.Drawing.Point(49, 11);
35 | this.labelKPP.Name = "labelKPP";
36 | this.labelKPP.Size = new System.Drawing.Size(165, 26);
37 | this.labelKPP.TabIndex = 2;
38 | this.labelKPP.Text = "0.000 KPP";
39 | this.labelKPP.TextAlign = System.Drawing.ContentAlignment.TopRight;
40 | //
41 | // KPPForm
42 | //
43 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
44 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
45 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
46 | this.ClientSize = new System.Drawing.Size(218, 47);
47 | this.Controls.Add(this.labelKPP);
48 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
49 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
50 | this.MaximizeBox = false;
51 | this.Name = "KPPForm";
52 | this.Text = "PPT KPP";
53 | this.TopMost = true;
54 | this.Load += new System.EventHandler(this.KPPForm_Load);
55 | this.ResumeLayout(false);
56 |
57 | }
58 |
59 | #endregion
60 |
61 | private System.Windows.Forms.Label labelKPP;
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/PPTTools/Modules/PPS/PPSForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class PPSForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PPSForm));
27 | this.labelPPS = new System.Windows.Forms.Label();
28 | this.SuspendLayout();
29 | //
30 | // labelPPS
31 | //
32 | this.labelPPS.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
33 | this.labelPPS.ForeColor = System.Drawing.Color.Gainsboro;
34 | this.labelPPS.Location = new System.Drawing.Point(49, 11);
35 | this.labelPPS.Name = "labelPPS";
36 | this.labelPPS.Size = new System.Drawing.Size(165, 26);
37 | this.labelPPS.TabIndex = 2;
38 | this.labelPPS.Text = "0.000 PPS";
39 | this.labelPPS.TextAlign = System.Drawing.ContentAlignment.TopRight;
40 | //
41 | // PPSForm
42 | //
43 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
44 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
45 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
46 | this.ClientSize = new System.Drawing.Size(218, 47);
47 | this.Controls.Add(this.labelPPS);
48 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
49 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
50 | this.MaximizeBox = false;
51 | this.Name = "PPSForm";
52 | this.Text = "PPT PPS";
53 | this.TopMost = true;
54 | this.Load += new System.EventHandler(this.PPSForm_Load);
55 | this.ResumeLayout(false);
56 |
57 | }
58 |
59 | #endregion
60 |
61 | private System.Windows.Forms.Label labelPPS;
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Duration/DurationForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class DurationForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DurationForm));
27 | this.labelDuration = new System.Windows.Forms.Label();
28 | this.SuspendLayout();
29 | //
30 | // labelDuration
31 | //
32 | this.labelDuration.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
33 | this.labelDuration.ForeColor = System.Drawing.Color.Gainsboro;
34 | this.labelDuration.Location = new System.Drawing.Point(10, 11);
35 | this.labelDuration.Name = "labelDuration";
36 | this.labelDuration.Size = new System.Drawing.Size(198, 26);
37 | this.labelDuration.TabIndex = 2;
38 | this.labelDuration.Text = "00:00.000";
39 | this.labelDuration.TextAlign = System.Drawing.ContentAlignment.TopCenter;
40 | //
41 | // DurationForm
42 | //
43 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
44 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
45 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
46 | this.ClientSize = new System.Drawing.Size(218, 47);
47 | this.Controls.Add(this.labelDuration);
48 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
49 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
50 | this.MaximizeBox = false;
51 | this.Name = "DurationForm";
52 | this.Text = "PPT Duration";
53 | this.TopMost = true;
54 | this.Load += new System.EventHandler(this.DurationForm_Load);
55 | this.ResumeLayout(false);
56 |
57 | }
58 |
59 | #endregion
60 |
61 | private System.Windows.Forms.Label labelDuration;
62 | }
63 | }
64 |
65 |
--------------------------------------------------------------------------------
/PPTTools/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/PPTTools/Modules/KPP/KPP.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Linq;
4 |
5 | namespace PPTTools {
6 | namespace Modules {
7 | public class KPP: Module {
8 | private static readonly string ModuleIdentifier = "kpp";
9 |
10 | private int[] keyStates = new int[7] {0, 0, 0, 0, 0, 0, 0}, queue = new int[5];
11 | private int keystrokes, state, pieces, piece;
12 | private bool register = false, door = false;
13 |
14 | public delegate void KPPEventHandler(Decimal KPP);
15 | public event KPPEventHandler Changed;
16 |
17 | private void Raise() {
18 | if (Changed != null) {
19 | if (pieces == 0) {
20 | Changed.Invoke(0);
21 | } else {
22 | Changed.Invoke(Decimal.Divide(keystrokes, pieces));
23 | }
24 | }
25 | }
26 |
27 | public void Reset() {
28 | keystrokes = pieces = 0;
29 | queue = new int[5];
30 | piece = 255;
31 | register = door = false;
32 |
33 | Raise();
34 | }
35 |
36 | public void Update() {
37 | int drop = GameHelper.PieceDropped(GameHelper.GameState.playerIndex);
38 |
39 | if (drop != state) {
40 | if (drop == 1) {
41 | pieces++;
42 | register = true;
43 | door = false;
44 |
45 | if (keyStates[2] == 0) {
46 | keystrokes++;
47 | }
48 | }
49 |
50 | state = drop;
51 | }
52 |
53 | int current = GameHelper.CurrentPiece(GameHelper.GameState.playerIndex);
54 | int piecesAddress = GameHelper.NextPointer(GameHelper.GameState.playerIndex);
55 | int[] cQueue = new int[5];
56 | for (int i = 0; i < 5; i++) {
57 | cQueue[i] = GameHelper.Game.ReadByte(new IntPtr(piecesAddress + i * 0x04));
58 | }
59 |
60 | if ((register && !cQueue.SequenceEqual(queue) && current == queue[0]) || (current != piece && piece == 255)) {
61 | door = true;
62 | register = false;
63 | }
64 |
65 | if (door) {
66 | for (int i = 0; i < 7; i++) {
67 | int key = GameHelper.Keystroke(i);
68 |
69 | if (key != keyStates[i]) {
70 | if (key == 1 && GameHelper.BigFrames() >= 147)
71 | keystrokes++;
72 |
73 | keyStates[i] = key;
74 | }
75 | }
76 | }
77 |
78 | piece = current;
79 |
80 | if (!register)
81 | queue = (int[])cQueue.Clone();
82 |
83 | Raise();
84 | }
85 |
86 | public KPP(): base(ModuleIdentifier) {
87 | Reset();
88 | Changed += Write;
89 | }
90 |
91 | private void Write(Decimal kpp) {
92 | if (File.Exists(filename)) {
93 | StreamWriter sw = new StreamWriter(filename);
94 | sw.WriteLine(kpp.ToString("0.000 KPP"));
95 | sw.Flush();
96 | sw.Close();
97 | }
98 | }
99 | }
100 | }
101 | }
--------------------------------------------------------------------------------
/PPTTools/MainForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Windows.Forms;
4 |
5 | namespace PPTTools {
6 | public partial class MainForm: Form {
7 | public MainForm() {
8 | InitializeComponent();
9 | }
10 |
11 | private void MainForm_Load(object sender, EventArgs e) {
12 | GameHelper.GameState.Reset();
13 | }
14 |
15 | private void fileSelect(Modules.Module module) {
16 | SaveFileDialog sfd = new SaveFileDialog {
17 | Filter = "Text Files|*.txt",
18 | FileName = module.filename
19 | };
20 |
21 | if (sfd.ShowDialog() == DialogResult.OK) {
22 | if (!sfd.CheckFileExists) {
23 | FileStream fs = File.Create(sfd.FileName);
24 | fs.Close();
25 | }
26 | module.filename = sfd.FileName;
27 | }
28 |
29 | sfd.Dispose();
30 | }
31 |
32 | private void buttonFTX_Click(object sender, EventArgs e) {
33 | new FTXForm().Show();
34 | }
35 |
36 | private void buttonFTX_RightClick(object sender, MouseEventArgs e) {
37 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
38 | fileSelect(GameHelper.GameState._FTX);
39 | }
40 | }
41 |
42 | private void buttonPPS_Click(object sender, EventArgs e) {
43 | new PPSForm().Show();
44 | }
45 |
46 | private void buttonPPS_RightClick(object sender, MouseEventArgs e) {
47 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
48 | fileSelect(GameHelper.GameState._PPS);
49 | }
50 | }
51 |
52 | private void buttonKPP_Click(object sender, EventArgs e) {
53 | new KPPForm().Show();
54 | }
55 |
56 | private void buttonKPP_RightClick(object sender, MouseEventArgs e) {
57 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
58 | fileSelect(GameHelper.GameState._KPP);
59 | }
60 | }
61 |
62 | private void buttonAPM_Click(object sender, EventArgs e) {
63 | new APMForm().Show();
64 | }
65 |
66 | private void buttonAPM_RightClick(object sender, MouseEventArgs e) {
67 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
68 | fileSelect(GameHelper.GameState._APM);
69 | }
70 | }
71 |
72 | private void buttonAPC_Click(object sender, EventArgs e) {
73 | new APCForm().Show();
74 | }
75 |
76 | private void buttonAPC_RightClick(object sender, MouseEventArgs e) {
77 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
78 | fileSelect(GameHelper.GameState._APC);
79 | }
80 | }
81 |
82 | private void buttonFinesse_Click(object sender, EventArgs e) {
83 | new FinesseForm().Show();
84 | }
85 |
86 | private void buttonFinesse_RightClick(object sender, MouseEventArgs e) {
87 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
88 | fileSelect(GameHelper.GameState._Finesse);
89 | }
90 | }
91 |
92 | private void buttonDuration_Click(object sender, EventArgs e) {
93 | new DurationForm().Show();
94 | }
95 |
96 | private void buttonDuration_RightClick(object sender, MouseEventArgs e) {
97 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
98 | fileSelect(GameHelper.GameState._Duration);
99 | }
100 | }
101 |
102 | private void buttonRating_Click(object sender, EventArgs e) {
103 | new RatingForm().Show();
104 | }
105 |
106 | private void buttonRating_RightClick(object sender, MouseEventArgs e) {
107 | if (e.Button == MouseButtons.Right && ((Button)sender).ClientRectangle.Contains(e.Location)) {
108 | fileSelect(GameHelper.GameState._Rating);
109 | }
110 | }
111 |
112 | private void buttonInputs_Click(object sender, EventArgs e) {
113 | new InputsForm().Show();
114 | }
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/PPTTools/Modules/FTX/FTXForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class FTXForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FTXForm));
27 | this.labelP1 = new System.Windows.Forms.Label();
28 | this.labelP2 = new System.Windows.Forms.Label();
29 | this.labelDelimiter = new System.Windows.Forms.Label();
30 | this.SuspendLayout();
31 | //
32 | // labelP1
33 | //
34 | this.labelP1.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
35 | this.labelP1.ForeColor = System.Drawing.Color.Gainsboro;
36 | this.labelP1.Location = new System.Drawing.Point(26, 11);
37 | this.labelP1.Name = "labelP1";
38 | this.labelP1.Size = new System.Drawing.Size(78, 26);
39 | this.labelP1.TabIndex = 0;
40 | this.labelP1.Text = "0";
41 | this.labelP1.TextAlign = System.Drawing.ContentAlignment.TopRight;
42 | //
43 | // labelP2
44 | //
45 | this.labelP2.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
46 | this.labelP2.ForeColor = System.Drawing.Color.Gainsboro;
47 | this.labelP2.Location = new System.Drawing.Point(117, 11);
48 | this.labelP2.Name = "labelP2";
49 | this.labelP2.Size = new System.Drawing.Size(76, 26);
50 | this.labelP2.TabIndex = 0;
51 | this.labelP2.Text = "0";
52 | //
53 | // labelDelimiter
54 | //
55 | this.labelDelimiter.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
56 | this.labelDelimiter.ForeColor = System.Drawing.Color.Gainsboro;
57 | this.labelDelimiter.Location = new System.Drawing.Point(81, 11);
58 | this.labelDelimiter.Name = "labelDelimiter";
59 | this.labelDelimiter.Size = new System.Drawing.Size(59, 26);
60 | this.labelDelimiter.TabIndex = 0;
61 | this.labelDelimiter.Text = "-";
62 | this.labelDelimiter.TextAlign = System.Drawing.ContentAlignment.TopCenter;
63 | //
64 | // FTXForm
65 | //
66 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
67 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
68 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
69 | this.ClientSize = new System.Drawing.Size(218, 47);
70 | this.Controls.Add(this.labelP2);
71 | this.Controls.Add(this.labelP1);
72 | this.Controls.Add(this.labelDelimiter);
73 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
74 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
75 | this.MaximizeBox = false;
76 | this.Name = "FTXForm";
77 | this.Text = "PPT Score";
78 | this.TopMost = true;
79 | this.Load += new System.EventHandler(this.FTXForm_Load);
80 | this.ResumeLayout(false);
81 |
82 | }
83 |
84 | #endregion
85 |
86 | private System.Windows.Forms.Label labelP1;
87 | private System.Windows.Forms.Label labelP2;
88 | private System.Windows.Forms.Label labelDelimiter;
89 | }
90 | }
91 |
92 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Rating/RatingForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class RatingForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RatingForm));
27 | this.labelStart = new System.Windows.Forms.Label();
28 | this.labelCurrent = new System.Windows.Forms.Label();
29 | this.labelDelimiter = new System.Windows.Forms.Label();
30 | this.SuspendLayout();
31 | //
32 | // labelStart
33 | //
34 | this.labelStart.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
35 | this.labelStart.ForeColor = System.Drawing.Color.Gainsboro;
36 | this.labelStart.Location = new System.Drawing.Point(4, 11);
37 | this.labelStart.Name = "labelStart";
38 | this.labelStart.Size = new System.Drawing.Size(100, 26);
39 | this.labelStart.TabIndex = 0;
40 | this.labelStart.Text = "0";
41 | this.labelStart.TextAlign = System.Drawing.ContentAlignment.TopRight;
42 | //
43 | // labelCurrent
44 | //
45 | this.labelCurrent.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
46 | this.labelCurrent.ForeColor = System.Drawing.Color.Gainsboro;
47 | this.labelCurrent.Location = new System.Drawing.Point(117, 11);
48 | this.labelCurrent.Name = "labelCurrent";
49 | this.labelCurrent.Size = new System.Drawing.Size(96, 26);
50 | this.labelCurrent.TabIndex = 0;
51 | this.labelCurrent.Text = "0";
52 | //
53 | // labelDelimiter
54 | //
55 | this.labelDelimiter.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
56 | this.labelDelimiter.ForeColor = System.Drawing.Color.Gainsboro;
57 | this.labelDelimiter.Location = new System.Drawing.Point(81, 11);
58 | this.labelDelimiter.Name = "labelDelimiter";
59 | this.labelDelimiter.Size = new System.Drawing.Size(59, 26);
60 | this.labelDelimiter.TabIndex = 0;
61 | this.labelDelimiter.Text = ">";
62 | this.labelDelimiter.TextAlign = System.Drawing.ContentAlignment.TopCenter;
63 | //
64 | // RatingForm
65 | //
66 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
67 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
68 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
69 | this.ClientSize = new System.Drawing.Size(218, 47);
70 | this.Controls.Add(this.labelCurrent);
71 | this.Controls.Add(this.labelStart);
72 | this.Controls.Add(this.labelDelimiter);
73 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
74 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
75 | this.MaximizeBox = false;
76 | this.Name = "RatingForm";
77 | this.Text = "PPT Rating";
78 | this.TopMost = true;
79 | this.Load += new System.EventHandler(this.RatingForm_Load);
80 | this.ResumeLayout(false);
81 |
82 | }
83 |
84 | #endregion
85 |
86 | private System.Windows.Forms.Label labelStart;
87 | private System.Windows.Forms.Label labelCurrent;
88 | private System.Windows.Forms.Label labelDelimiter;
89 | }
90 | }
91 |
92 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Finesse/Finesse.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 |
6 | namespace PPTTools {
7 | namespace Modules {
8 | public class Finesse: Module {
9 | private static readonly string ModuleIdentifier = "finesse";
10 |
11 | private int[] keyStates = new int[7] { 0, 0, 0, 0, 0, 0, 0 }, queue;
12 | private List finesseKeys = new List();
13 |
14 | private bool register, door;
15 | private int errors, cPiece, cPiecePos, cPieceRot, state, holdPtr, piece;
16 | private int? cHold;
17 |
18 | public delegate void FinesseEventHandler(int Errors);
19 | public event FinesseEventHandler Changed;
20 |
21 | private void Raise() {
22 | if (Changed != null) {
23 | Changed.Invoke(errors);
24 | }
25 | }
26 |
27 | public void Reset() {
28 | errors = state = 0;
29 | holdPtr = GameHelper.HoldPointer(GameHelper.GameState.playerIndex);
30 | cPiece = GameHelper.NextPiece(GameHelper.GameState.playerIndex);
31 | cHold = GameHelper.FarPiece(GameHelper.GameState.playerIndex);
32 | queue = new int[5];
33 | piece = 255;
34 | register = true;
35 | door = false;
36 |
37 | Raise();
38 | }
39 |
40 | public void Update() {
41 | int drop = GameHelper.PieceDropped(GameHelper.GameState.playerIndex);
42 |
43 | if (drop == 1) {
44 | if (drop != state) {
45 | int hold = GameHelper.HoldPointer(GameHelper.GameState.playerIndex);
46 |
47 | errors += FinesseHelper.Errors((holdPtr == hold)? cPiece : cHold.Value, finesseKeys, cPiecePos, cPieceRot);
48 |
49 | finesseKeys.Clear();
50 | cPiece = GameHelper.NextPiece(GameHelper.GameState.playerIndex);
51 | cHold = (hold < 0x0800000)? GameHelper.FarPiece(GameHelper.GameState.playerIndex) : GameHelper.HoldPiece(GameHelper.GameState.playerIndex);
52 | holdPtr = hold;
53 |
54 | register = true;
55 | }
56 | } else {
57 | int current = GameHelper.CurrentPiece(GameHelper.GameState.playerIndex);
58 | int piecesAddress = GameHelper.NextPointer(GameHelper.GameState.playerIndex);
59 | int[] cQueue = new int[5];
60 | for (int i = 0; i < 5; i++) {
61 | cQueue[i] = GameHelper.Game.ReadByte(new IntPtr(piecesAddress + i * 0x04));
62 | }
63 |
64 | if ((register && !cQueue.SequenceEqual(queue) && current == queue[0]) || (current != piece && piece == 255)) {
65 | door = true;
66 | register = false;
67 | }
68 |
69 | if (door) {
70 | for (int i = 0; i < 7; i++) {
71 | int key = GameHelper.Keystroke(i);
72 |
73 | if (key != keyStates[i]) {
74 | if (key == 1 && GameHelper.BigFrames() >= 147) {
75 | if (i != 2 && i != 3) {
76 | finesseKeys.Add(i);
77 | }
78 | }
79 |
80 | keyStates[i] = key;
81 | }
82 | }
83 | }
84 |
85 | piece = current;
86 |
87 | if (!register)
88 | queue = (int[])cQueue.Clone();
89 | }
90 |
91 | state = drop;
92 |
93 | cPiecePos = GameHelper.PiecePosition(GameHelper.GameState.playerIndex);
94 | cPieceRot = GameHelper.PieceRotation(GameHelper.GameState.playerIndex);
95 |
96 | Raise();
97 | }
98 |
99 | public Finesse(): base(ModuleIdentifier) {
100 | Reset();
101 | Changed += Write;
102 | }
103 |
104 | private void Write(int errors) {
105 | if (File.Exists(filename)) {
106 | StreamWriter sw = new StreamWriter(filename);
107 | sw.WriteLine($"Finesse: {errors.ToString()}");
108 | sw.Flush();
109 | sw.Close();
110 | }
111 | }
112 | }
113 | }
114 | }
--------------------------------------------------------------------------------
/PPTTools/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace PPTTools.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.UserScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.DefaultSettingValueAttribute("")]
29 | public string apc {
30 | get {
31 | return ((string)(this["apc"]));
32 | }
33 | set {
34 | this["apc"] = value;
35 | }
36 | }
37 |
38 | [global::System.Configuration.UserScopedSettingAttribute()]
39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
40 | [global::System.Configuration.DefaultSettingValueAttribute("")]
41 | public string apm {
42 | get {
43 | return ((string)(this["apm"]));
44 | }
45 | set {
46 | this["apm"] = value;
47 | }
48 | }
49 |
50 | [global::System.Configuration.UserScopedSettingAttribute()]
51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
52 | [global::System.Configuration.DefaultSettingValueAttribute("")]
53 | public string duration {
54 | get {
55 | return ((string)(this["duration"]));
56 | }
57 | set {
58 | this["duration"] = value;
59 | }
60 | }
61 |
62 | [global::System.Configuration.UserScopedSettingAttribute()]
63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
64 | [global::System.Configuration.DefaultSettingValueAttribute("")]
65 | public string finesse {
66 | get {
67 | return ((string)(this["finesse"]));
68 | }
69 | set {
70 | this["finesse"] = value;
71 | }
72 | }
73 |
74 | [global::System.Configuration.UserScopedSettingAttribute()]
75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
76 | [global::System.Configuration.DefaultSettingValueAttribute("")]
77 | public string ftx {
78 | get {
79 | return ((string)(this["ftx"]));
80 | }
81 | set {
82 | this["ftx"] = value;
83 | }
84 | }
85 |
86 | [global::System.Configuration.UserScopedSettingAttribute()]
87 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
88 | [global::System.Configuration.DefaultSettingValueAttribute("")]
89 | public string inputs {
90 | get {
91 | return ((string)(this["inputs"]));
92 | }
93 | set {
94 | this["inputs"] = value;
95 | }
96 | }
97 |
98 | [global::System.Configuration.UserScopedSettingAttribute()]
99 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
100 | [global::System.Configuration.DefaultSettingValueAttribute("")]
101 | public string kpp {
102 | get {
103 | return ((string)(this["kpp"]));
104 | }
105 | set {
106 | this["kpp"] = value;
107 | }
108 | }
109 |
110 | [global::System.Configuration.UserScopedSettingAttribute()]
111 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
112 | [global::System.Configuration.DefaultSettingValueAttribute("")]
113 | public string pps {
114 | get {
115 | return ((string)(this["pps"]));
116 | }
117 | set {
118 | this["pps"] = value;
119 | }
120 | }
121 |
122 | [global::System.Configuration.UserScopedSettingAttribute()]
123 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
124 | [global::System.Configuration.DefaultSettingValueAttribute("")]
125 | public string rating {
126 | get {
127 | return ((string)(this["rating"]));
128 | }
129 | set {
130 | this["rating"] = value;
131 | }
132 | }
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/PPTTools/Modules/Inputs/InputsForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class InputsForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InputsForm));
27 | this.pictureKey6 = new System.Windows.Forms.PictureBox();
28 | this.pictureKey5 = new System.Windows.Forms.PictureBox();
29 | this.pictureKey4 = new System.Windows.Forms.PictureBox();
30 | this.pictureKey3 = new System.Windows.Forms.PictureBox();
31 | this.pictureKey2 = new System.Windows.Forms.PictureBox();
32 | this.pictureKey1 = new System.Windows.Forms.PictureBox();
33 | this.pictureKey0 = new System.Windows.Forms.PictureBox();
34 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey6)).BeginInit();
35 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey5)).BeginInit();
36 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey4)).BeginInit();
37 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey3)).BeginInit();
38 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey2)).BeginInit();
39 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey1)).BeginInit();
40 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey0)).BeginInit();
41 | this.SuspendLayout();
42 | //
43 | // pictureKey6
44 | //
45 | this.pictureKey6.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureKey6.BackgroundImage")));
46 | this.pictureKey6.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
47 | this.pictureKey6.Location = new System.Drawing.Point(12, 46);
48 | this.pictureKey6.Name = "pictureKey6";
49 | this.pictureKey6.Size = new System.Drawing.Size(66, 30);
50 | this.pictureKey6.TabIndex = 0;
51 | this.pictureKey6.TabStop = false;
52 | //
53 | // pictureKey5
54 | //
55 | this.pictureKey5.BackgroundImage = global::PPTTools.Properties.Resources.key5_0;
56 | this.pictureKey5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
57 | this.pictureKey5.Location = new System.Drawing.Point(48, 12);
58 | this.pictureKey5.Name = "pictureKey5";
59 | this.pictureKey5.Size = new System.Drawing.Size(30, 30);
60 | this.pictureKey5.TabIndex = 0;
61 | this.pictureKey5.TabStop = false;
62 | //
63 | // pictureKey4
64 | //
65 | this.pictureKey4.BackgroundImage = global::PPTTools.Properties.Resources.key4_0;
66 | this.pictureKey4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
67 | this.pictureKey4.Location = new System.Drawing.Point(12, 12);
68 | this.pictureKey4.Name = "pictureKey4";
69 | this.pictureKey4.Size = new System.Drawing.Size(30, 30);
70 | this.pictureKey4.TabIndex = 0;
71 | this.pictureKey4.TabStop = false;
72 | //
73 | // pictureKey3
74 | //
75 | this.pictureKey3.BackgroundImage = global::PPTTools.Properties.Resources.key2_0;
76 | this.pictureKey3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
77 | this.pictureKey3.Location = new System.Drawing.Point(142, 46);
78 | this.pictureKey3.Name = "pictureKey3";
79 | this.pictureKey3.Size = new System.Drawing.Size(30, 30);
80 | this.pictureKey3.TabIndex = 0;
81 | this.pictureKey3.TabStop = false;
82 | //
83 | // pictureKey2
84 | //
85 | this.pictureKey2.BackgroundImage = global::PPTTools.Properties.Resources.key2_0;
86 | this.pictureKey2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
87 | this.pictureKey2.Location = new System.Drawing.Point(142, 12);
88 | this.pictureKey2.Name = "pictureKey2";
89 | this.pictureKey2.Size = new System.Drawing.Size(30, 30);
90 | this.pictureKey2.TabIndex = 0;
91 | this.pictureKey2.TabStop = false;
92 | //
93 | // pictureKey1
94 | //
95 | this.pictureKey1.BackgroundImage = global::PPTTools.Properties.Resources.key1_0;
96 | this.pictureKey1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
97 | this.pictureKey1.Location = new System.Drawing.Point(176, 46);
98 | this.pictureKey1.Name = "pictureKey1";
99 | this.pictureKey1.Size = new System.Drawing.Size(30, 30);
100 | this.pictureKey1.TabIndex = 0;
101 | this.pictureKey1.TabStop = false;
102 | //
103 | // pictureKey0
104 | //
105 | this.pictureKey0.BackgroundImage = global::PPTTools.Properties.Resources.key0_0;
106 | this.pictureKey0.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
107 | this.pictureKey0.Location = new System.Drawing.Point(108, 46);
108 | this.pictureKey0.Name = "pictureKey0";
109 | this.pictureKey0.Size = new System.Drawing.Size(30, 30);
110 | this.pictureKey0.TabIndex = 0;
111 | this.pictureKey0.TabStop = false;
112 | //
113 | // InputsForm
114 | //
115 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
116 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
117 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
118 | this.ClientSize = new System.Drawing.Size(218, 88);
119 | this.Controls.Add(this.pictureKey6);
120 | this.Controls.Add(this.pictureKey5);
121 | this.Controls.Add(this.pictureKey4);
122 | this.Controls.Add(this.pictureKey3);
123 | this.Controls.Add(this.pictureKey2);
124 | this.Controls.Add(this.pictureKey1);
125 | this.Controls.Add(this.pictureKey0);
126 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
127 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
128 | this.MaximizeBox = false;
129 | this.Name = "InputsForm";
130 | this.Text = "PPT Inputs";
131 | this.TopMost = true;
132 | this.Load += new System.EventHandler(this.FTXForm_Load);
133 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey6)).EndInit();
134 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey5)).EndInit();
135 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey4)).EndInit();
136 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey3)).EndInit();
137 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey2)).EndInit();
138 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey1)).EndInit();
139 | ((System.ComponentModel.ISupportInitialize)(this.pictureKey0)).EndInit();
140 | this.ResumeLayout(false);
141 |
142 | }
143 |
144 | #endregion
145 |
146 | private System.Windows.Forms.PictureBox pictureKey0;
147 | private System.Windows.Forms.PictureBox pictureKey1;
148 | private System.Windows.Forms.PictureBox pictureKey2;
149 | private System.Windows.Forms.PictureBox pictureKey3;
150 | private System.Windows.Forms.PictureBox pictureKey4;
151 | private System.Windows.Forms.PictureBox pictureKey5;
152 | private System.Windows.Forms.PictureBox pictureKey6;
153 | }
154 | }
155 |
156 |
--------------------------------------------------------------------------------
/PPTTools/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace PPTTools.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PPTTools.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap key0_0 {
67 | get {
68 | object obj = ResourceManager.GetObject("key0_0", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Looks up a localized resource of type System.Drawing.Bitmap.
75 | ///
76 | internal static System.Drawing.Bitmap key0_1 {
77 | get {
78 | object obj = ResourceManager.GetObject("key0_1", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 |
83 | ///
84 | /// Looks up a localized resource of type System.Drawing.Bitmap.
85 | ///
86 | internal static System.Drawing.Bitmap key1_0 {
87 | get {
88 | object obj = ResourceManager.GetObject("key1_0", resourceCulture);
89 | return ((System.Drawing.Bitmap)(obj));
90 | }
91 | }
92 |
93 | ///
94 | /// Looks up a localized resource of type System.Drawing.Bitmap.
95 | ///
96 | internal static System.Drawing.Bitmap key1_1 {
97 | get {
98 | object obj = ResourceManager.GetObject("key1_1", resourceCulture);
99 | return ((System.Drawing.Bitmap)(obj));
100 | }
101 | }
102 |
103 | ///
104 | /// Looks up a localized resource of type System.Drawing.Bitmap.
105 | ///
106 | internal static System.Drawing.Bitmap key2_0 {
107 | get {
108 | object obj = ResourceManager.GetObject("key2_0", resourceCulture);
109 | return ((System.Drawing.Bitmap)(obj));
110 | }
111 | }
112 |
113 | ///
114 | /// Looks up a localized resource of type System.Drawing.Bitmap.
115 | ///
116 | internal static System.Drawing.Bitmap key2_1 {
117 | get {
118 | object obj = ResourceManager.GetObject("key2_1", resourceCulture);
119 | return ((System.Drawing.Bitmap)(obj));
120 | }
121 | }
122 |
123 | ///
124 | /// Looks up a localized resource of type System.Drawing.Bitmap.
125 | ///
126 | internal static System.Drawing.Bitmap key3_0 {
127 | get {
128 | object obj = ResourceManager.GetObject("key3_0", resourceCulture);
129 | return ((System.Drawing.Bitmap)(obj));
130 | }
131 | }
132 |
133 | ///
134 | /// Looks up a localized resource of type System.Drawing.Bitmap.
135 | ///
136 | internal static System.Drawing.Bitmap key3_1 {
137 | get {
138 | object obj = ResourceManager.GetObject("key3_1", resourceCulture);
139 | return ((System.Drawing.Bitmap)(obj));
140 | }
141 | }
142 |
143 | ///
144 | /// Looks up a localized resource of type System.Drawing.Bitmap.
145 | ///
146 | internal static System.Drawing.Bitmap key4_0 {
147 | get {
148 | object obj = ResourceManager.GetObject("key4_0", resourceCulture);
149 | return ((System.Drawing.Bitmap)(obj));
150 | }
151 | }
152 |
153 | ///
154 | /// Looks up a localized resource of type System.Drawing.Bitmap.
155 | ///
156 | internal static System.Drawing.Bitmap key4_1 {
157 | get {
158 | object obj = ResourceManager.GetObject("key4_1", resourceCulture);
159 | return ((System.Drawing.Bitmap)(obj));
160 | }
161 | }
162 |
163 | ///
164 | /// Looks up a localized resource of type System.Drawing.Bitmap.
165 | ///
166 | internal static System.Drawing.Bitmap key5_0 {
167 | get {
168 | object obj = ResourceManager.GetObject("key5_0", resourceCulture);
169 | return ((System.Drawing.Bitmap)(obj));
170 | }
171 | }
172 |
173 | ///
174 | /// Looks up a localized resource of type System.Drawing.Bitmap.
175 | ///
176 | internal static System.Drawing.Bitmap key5_1 {
177 | get {
178 | object obj = ResourceManager.GetObject("key5_1", resourceCulture);
179 | return ((System.Drawing.Bitmap)(obj));
180 | }
181 | }
182 |
183 | ///
184 | /// Looks up a localized resource of type System.Drawing.Bitmap.
185 | ///
186 | internal static System.Drawing.Bitmap key6_0 {
187 | get {
188 | object obj = ResourceManager.GetObject("key6_0", resourceCulture);
189 | return ((System.Drawing.Bitmap)(obj));
190 | }
191 | }
192 |
193 | ///
194 | /// Looks up a localized resource of type System.Drawing.Bitmap.
195 | ///
196 | internal static System.Drawing.Bitmap key6_1 {
197 | get {
198 | object obj = ResourceManager.GetObject("key6_1", resourceCulture);
199 | return ((System.Drawing.Bitmap)(obj));
200 | }
201 | }
202 | }
203 | }
204 |
--------------------------------------------------------------------------------
/PPTTools/PPTTools.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {23A2F118-FF17-423A-B57F-6DE28B808AC1}
8 | WinExe
9 | PPTTools
10 | PPTTools
11 | v4.0
12 | 512
13 | true
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 | Resources\icon.ico
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | .\VAMemory.dll
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Form
58 |
59 |
60 | DurationForm.cs
61 |
62 |
63 |
64 | Form
65 |
66 |
67 | FinesseForm.cs
68 |
69 |
70 |
71 | Form
72 |
73 |
74 | InputsForm.cs
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | Form
83 |
84 |
85 | RatingForm.cs
86 |
87 |
88 | Form
89 |
90 |
91 | KPPForm.cs
92 |
93 |
94 | Form
95 |
96 |
97 | APCForm.cs
98 |
99 |
100 |
101 | Form
102 |
103 |
104 | FTXForm.cs
105 |
106 |
107 |
108 | Form
109 |
110 |
111 | MainForm.cs
112 |
113 |
114 | Form
115 |
116 |
117 | APMForm.cs
118 |
119 |
120 | Form
121 |
122 |
123 | PPSForm.cs
124 |
125 |
126 |
127 |
128 | DurationForm.cs
129 |
130 |
131 | FinesseForm.cs
132 |
133 |
134 | InputsForm.cs
135 |
136 |
137 | RatingForm.cs
138 |
139 |
140 | KPPForm.cs
141 |
142 |
143 | APCForm.cs
144 |
145 |
146 | FTXForm.cs
147 |
148 |
149 | MainForm.cs
150 |
151 |
152 | APMForm.cs
153 |
154 |
155 | PPSForm.cs
156 |
157 |
158 | ResXFileCodeGenerator
159 | Resources.Designer.cs
160 | Designer
161 |
162 |
163 | True
164 | Resources.resx
165 | True
166 |
167 |
168 |
169 | SettingsSingleFileGenerator
170 | Settings.Designer.cs
171 |
172 |
173 | True
174 | Settings.settings
175 | True
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 | Always
196 |
197 |
198 |
199 |
200 |
--------------------------------------------------------------------------------
/PPTTools/MainForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PPTTools {
2 | partial class MainForm {
3 | ///
4 | /// Required designer variable.
5 | ///
6 | private System.ComponentModel.IContainer components = null;
7 |
8 | ///
9 | /// Clean up any resources being used.
10 | ///
11 | /// true if managed resources should be disposed; otherwise, false.
12 | protected override void Dispose(bool disposing) {
13 | if (disposing && (components != null)) {
14 | components.Dispose();
15 | }
16 | base.Dispose(disposing);
17 | }
18 |
19 | #region Windows Form Designer generated code
20 |
21 | ///
22 | /// Required method for Designer support - do not modify
23 | /// the contents of this method with the code editor.
24 | ///
25 | private void InitializeComponent() {
26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
27 | this.buttonFTX = new System.Windows.Forms.Button();
28 | this.buttonPPS = new System.Windows.Forms.Button();
29 | this.buttonKPP = new System.Windows.Forms.Button();
30 | this.buttonAPM = new System.Windows.Forms.Button();
31 | this.buttonAPC = new System.Windows.Forms.Button();
32 | this.buttonFinesse = new System.Windows.Forms.Button();
33 | this.buttonDuration = new System.Windows.Forms.Button();
34 | this.buttonRating = new System.Windows.Forms.Button();
35 | this.buttonInputs = new System.Windows.Forms.Button();
36 | this.SuspendLayout();
37 | //
38 | // buttonFTX
39 | //
40 | this.buttonFTX.Location = new System.Drawing.Point(6, 6);
41 | this.buttonFTX.Name = "buttonFTX";
42 | this.buttonFTX.Size = new System.Drawing.Size(71, 32);
43 | this.buttonFTX.TabIndex = 0;
44 | this.buttonFTX.Text = "FTX";
45 | this.buttonFTX.UseVisualStyleBackColor = true;
46 | this.buttonFTX.Click += new System.EventHandler(this.buttonFTX_Click);
47 | this.buttonFTX.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonFTX_RightClick);
48 | //
49 | // buttonPPS
50 | //
51 | this.buttonPPS.Location = new System.Drawing.Point(83, 6);
52 | this.buttonPPS.Name = "buttonPPS";
53 | this.buttonPPS.Size = new System.Drawing.Size(71, 32);
54 | this.buttonPPS.TabIndex = 0;
55 | this.buttonPPS.Text = "PPS";
56 | this.buttonPPS.UseVisualStyleBackColor = true;
57 | this.buttonPPS.Click += new System.EventHandler(this.buttonPPS_Click);
58 | this.buttonPPS.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonPPS_RightClick);
59 | //
60 | // buttonKPP
61 | //
62 | this.buttonKPP.Location = new System.Drawing.Point(160, 6);
63 | this.buttonKPP.Name = "buttonKPP";
64 | this.buttonKPP.Size = new System.Drawing.Size(71, 32);
65 | this.buttonKPP.TabIndex = 0;
66 | this.buttonKPP.Text = "KPP";
67 | this.buttonKPP.UseVisualStyleBackColor = true;
68 | this.buttonKPP.Click += new System.EventHandler(this.buttonKPP_Click);
69 | this.buttonKPP.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonKPP_RightClick);
70 | //
71 | // buttonAPM
72 | //
73 | this.buttonAPM.Location = new System.Drawing.Point(6, 44);
74 | this.buttonAPM.Name = "buttonAPM";
75 | this.buttonAPM.Size = new System.Drawing.Size(71, 32);
76 | this.buttonAPM.TabIndex = 0;
77 | this.buttonAPM.Text = "APM";
78 | this.buttonAPM.UseVisualStyleBackColor = true;
79 | this.buttonAPM.Click += new System.EventHandler(this.buttonAPM_Click);
80 | this.buttonAPM.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonAPM_RightClick);
81 | //
82 | // buttonAPC
83 | //
84 | this.buttonAPC.Location = new System.Drawing.Point(83, 44);
85 | this.buttonAPC.Name = "buttonAPC";
86 | this.buttonAPC.Size = new System.Drawing.Size(71, 32);
87 | this.buttonAPC.TabIndex = 0;
88 | this.buttonAPC.Text = "APC";
89 | this.buttonAPC.UseVisualStyleBackColor = true;
90 | this.buttonAPC.Click += new System.EventHandler(this.buttonAPC_Click);
91 | this.buttonAPC.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonAPC_RightClick);
92 | //
93 | // buttonFinesse
94 | //
95 | this.buttonFinesse.Location = new System.Drawing.Point(160, 44);
96 | this.buttonFinesse.Name = "buttonFinesse";
97 | this.buttonFinesse.Size = new System.Drawing.Size(71, 32);
98 | this.buttonFinesse.TabIndex = 0;
99 | this.buttonFinesse.Text = "Finesse";
100 | this.buttonFinesse.UseVisualStyleBackColor = true;
101 | this.buttonFinesse.Click += new System.EventHandler(this.buttonFinesse_Click);
102 | this.buttonFinesse.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonFinesse_RightClick);
103 | //
104 | // buttonDuration
105 | //
106 | this.buttonDuration.Location = new System.Drawing.Point(6, 81);
107 | this.buttonDuration.Name = "buttonDuration";
108 | this.buttonDuration.Size = new System.Drawing.Size(71, 32);
109 | this.buttonDuration.TabIndex = 0;
110 | this.buttonDuration.Text = "Duration";
111 | this.buttonDuration.UseVisualStyleBackColor = true;
112 | this.buttonDuration.Click += new System.EventHandler(this.buttonDuration_Click);
113 | this.buttonDuration.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonDuration_RightClick);
114 | //
115 | // buttonRating
116 | //
117 | this.buttonRating.Location = new System.Drawing.Point(83, 81);
118 | this.buttonRating.Name = "buttonRating";
119 | this.buttonRating.Size = new System.Drawing.Size(71, 32);
120 | this.buttonRating.TabIndex = 0;
121 | this.buttonRating.Text = "Rating";
122 | this.buttonRating.UseVisualStyleBackColor = true;
123 | this.buttonRating.Click += new System.EventHandler(this.buttonRating_Click);
124 | this.buttonRating.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonRating_RightClick);
125 | //
126 | // buttonInputs
127 | //
128 | this.buttonInputs.Location = new System.Drawing.Point(160, 81);
129 | this.buttonInputs.Name = "buttonInputs";
130 | this.buttonInputs.Size = new System.Drawing.Size(71, 32);
131 | this.buttonInputs.TabIndex = 0;
132 | this.buttonInputs.Text = "Inputs";
133 | this.buttonInputs.UseVisualStyleBackColor = true;
134 | this.buttonInputs.Click += new System.EventHandler(this.buttonInputs_Click);
135 | //
136 | // MainForm
137 | //
138 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
139 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
140 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10)))));
141 | this.ClientSize = new System.Drawing.Size(237, 119);
142 | this.Controls.Add(this.buttonFinesse);
143 | this.Controls.Add(this.buttonKPP);
144 | this.Controls.Add(this.buttonInputs);
145 | this.Controls.Add(this.buttonRating);
146 | this.Controls.Add(this.buttonAPC);
147 | this.Controls.Add(this.buttonPPS);
148 | this.Controls.Add(this.buttonDuration);
149 | this.Controls.Add(this.buttonAPM);
150 | this.Controls.Add(this.buttonFTX);
151 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
152 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
153 | this.MaximizeBox = false;
154 | this.Name = "MainForm";
155 | this.Text = "PPT Tools";
156 | this.TopMost = true;
157 | this.Load += new System.EventHandler(this.MainForm_Load);
158 | this.ResumeLayout(false);
159 |
160 | }
161 |
162 | #endregion
163 |
164 | private System.Windows.Forms.Button buttonFTX;
165 | private System.Windows.Forms.Button buttonPPS;
166 | private System.Windows.Forms.Button buttonKPP;
167 | private System.Windows.Forms.Button buttonAPM;
168 | private System.Windows.Forms.Button buttonAPC;
169 | private System.Windows.Forms.Button buttonFinesse;
170 | private System.Windows.Forms.Button buttonDuration;
171 | private System.Windows.Forms.Button buttonRating;
172 | private System.Windows.Forms.Button buttonInputs;
173 | }
174 | }
175 |
176 |
--------------------------------------------------------------------------------
/PPTTools/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\key0_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
125 | ..\Resources\key0_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
126 |
127 |
128 | ..\Resources\key1_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
129 |
130 |
131 | ..\Resources\key1_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
132 |
133 |
134 | ..\Resources\key2_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
135 |
136 |
137 | ..\Resources\key2_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
138 |
139 |
140 | ..\Resources\key3_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
141 |
142 |
143 | ..\Resources\key3_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
144 |
145 |
146 | ..\Resources\key4_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
147 |
148 |
149 | ..\Resources\key4_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
150 |
151 |
152 | ..\Resources\key5_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
153 |
154 |
155 | ..\Resources\key5_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
156 |
157 |
158 | ..\Resources\key6_0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
159 |
160 |
161 | ..\Resources\key6_1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
162 |
163 |
--------------------------------------------------------------------------------
/PPTTools/FinesseHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | namespace PPTTools {
6 | class FinesseHelper {
7 | private static readonly List[][][] finesse = new List[7][][] {
8 | new List[2][] { // S
9 | new List[8] { // Orientation A
10 | new List(new int[] {0}),
11 | new List(new int[] {0, 0}),
12 | new List(new int[] {0}),
13 | new List(),
14 | new List(new int[] {1}),
15 | new List(new int[] {1, 1}),
16 | new List(new int[] {1, 0}),
17 | new List(new int[] {1})
18 | },
19 | new List[9] { // Orientation B
20 | new List(new int[] {4, 0}),
21 | new List(new int[] {0, 5}),
22 | new List(new int[] {4, 0}),
23 | new List(new int[] {4}),
24 | new List(new int[] {5}),
25 | new List(new int[] {5, 1}),
26 | new List(new int[] {5, 1, 1}),
27 | new List(new int[] {1, 4}),
28 | new List(new int[] {5, 1})
29 | }
30 | },
31 | new List[2][] { // Z
32 | new List[8] { // Orientation A
33 | new List(new int[] {0}),
34 | new List(new int[] {0, 0}),
35 | new List(new int[] {0}),
36 | new List(),
37 | new List(new int[] {1}),
38 | new List(new int[] {1, 1}),
39 | new List(new int[] {1, 0}),
40 | new List(new int[] {1})
41 | },
42 | new List[9] { // Orientation B
43 | new List(new int[] {4, 0}),
44 | new List(new int[] {0, 5}),
45 | new List(new int[] {4, 0}),
46 | new List(new int[] {4}),
47 | new List(new int[] {5}),
48 | new List(new int[] {5, 1}),
49 | new List(new int[] {5, 1, 1}),
50 | new List(new int[] {1, 4}),
51 | new List(new int[] {5, 1})
52 | }
53 | },
54 | new List[4][] { // J
55 | new List[8] { // Orientation A
56 | new List(new int[] {0}),
57 | new List(new int[] {0, 0}),
58 | new List(new int[] {0}),
59 | new List(),
60 | new List(new int[] {1}),
61 | new List(new int[] {1, 1}),
62 | new List(new int[] {1, 0}),
63 | new List(new int[] {1})
64 | },
65 | new List[9] { // Orientation C
66 | new List(new int[] {5, 0}),
67 | new List(new int[] {0, 5}),
68 | new List(new int[] {5, 0, 0}),
69 | new List(new int[] {5, 0}),
70 | new List(new int[] {5}),
71 | new List(new int[] {5, 1}),
72 | new List(new int[] {5, 1, 1}),
73 | new List(new int[] {5, 1, 0}),
74 | new List(new int[] {5, 1})
75 | },
76 | new List[8] { // Orientation D
77 | new List(new int[] {0, 4, 4}),
78 | new List(new int[] {0, 0, 4, 4}),
79 | new List(new int[] {0, 4, 4}),
80 | new List(new int[] {4, 4}),
81 | new List(new int[] {1, 4, 4}),
82 | new List(new int[] {1, 1, 4, 4}),
83 | new List(new int[] {1, 0, 4, 4}),
84 | new List(new int[] {1, 4, 4})
85 | },
86 | new List[9] { // Orientation B
87 | new List(new int[] {4, 0}),
88 | new List(new int[] {4, 0, 0}),
89 | new List(new int[] {4, 0}),
90 | new List(new int[] {4}),
91 | new List(new int[] {4, 1}),
92 | new List(new int[] {4, 1, 1}),
93 | new List(new int[] {1, 0, 4}),
94 | new List(new int[] {1, 4}),
95 | new List(new int[] {4, 1})
96 | }
97 | },
98 | new List[4][] { // L
99 | new List[8] { // Orientation A
100 | new List(new int[] {0}),
101 | new List(new int[] {0, 0}),
102 | new List(new int[] {0}),
103 | new List(),
104 | new List(new int[] {1}),
105 | new List(new int[] {1, 1}),
106 | new List(new int[] {1, 0}),
107 | new List(new int[] {1})
108 | },
109 | new List[9] { // Orientation B
110 | new List(new int[] {5, 0}),
111 | new List(new int[] {0, 5}),
112 | new List(new int[] {5, 0, 0}),
113 | new List(new int[] {5, 0}),
114 | new List(new int[] {5}),
115 | new List(new int[] {5, 1}),
116 | new List(new int[] {5, 1, 1}),
117 | new List(new int[] {5, 1, 0}),
118 | new List(new int[] {5, 1})
119 | },
120 | new List[8] { // Orientation D
121 | new List(new int[] {0, 4, 4}),
122 | new List(new int[] {0, 0, 4, 4}),
123 | new List(new int[] {0, 4, 4}),
124 | new List(new int[] {4, 4}),
125 | new List(new int[] {1, 4, 4}),
126 | new List(new int[] {1, 1, 4, 4}),
127 | new List(new int[] {1, 0, 4, 4}),
128 | new List(new int[] {1, 4, 4})
129 | },
130 | new List[9] { // Orientation C
131 | new List(new int[] {4, 0}),
132 | new List(new int[] {4, 0, 0}),
133 | new List(new int[] {4, 0}),
134 | new List(new int[] {4}),
135 | new List(new int[] {4, 1}),
136 | new List(new int[] {4, 1, 1}),
137 | new List(new int[] {1, 0, 4}),
138 | new List(new int[] {1, 4}),
139 | new List(new int[] {4, 1})
140 | }
141 | },
142 | new List[4][] { // T
143 | new List[8] { // Orientation A
144 | new List(new int[] {0}),
145 | new List(new int[] {0, 0}),
146 | new List(new int[] {0}),
147 | new List(),
148 | new List(new int[] {1}),
149 | new List(new int[] {1, 1}),
150 | new List(new int[] {1, 0}),
151 | new List(new int[] {1})
152 | },
153 | new List[9] { // Orientation B
154 | new List(new int[] {5, 0}),
155 | new List(new int[] {0, 5}),
156 | new List(new int[] {5, 0, 0}),
157 | new List(new int[] {5, 0}),
158 | new List(new int[] {5}),
159 | new List(new int[] {5, 1}),
160 | new List(new int[] {5, 1, 1}),
161 | new List(new int[] {5, 1, 0}),
162 | new List(new int[] {5, 1})
163 | },
164 | new List[8] { // Orientation D
165 | new List(new int[] {0, 4, 4}),
166 | new List(new int[] {0, 0, 4, 4}),
167 | new List(new int[] {0, 4, 4}),
168 | new List(new int[] {4, 4}),
169 | new List(new int[] {1, 4, 4}),
170 | new List(new int[] {1, 1, 4, 4}),
171 | new List(new int[] {1, 0, 4, 4}),
172 | new List(new int[] {1, 4, 4})
173 | },
174 | new List[9] { // Orientation C
175 | new List(new int[] {4, 0}),
176 | new List(new int[] {4, 0, 0}),
177 | new List(new int[] {4, 0}),
178 | new List(new int[] {4}),
179 | new List(new int[] {4, 1}),
180 | new List(new int[] {4, 1, 1}),
181 | new List(new int[] {1, 0, 4}),
182 | new List(new int[] {1, 4}),
183 | new List(new int[] {4, 1})
184 | }
185 | },
186 | new List[1][] { // O
187 | new List[9] { // Orientation A
188 | new List(new int[] {0}),
189 | new List(new int[] {0, 1}),
190 | new List(new int[] {0, 0}),
191 | new List(new int[] {0}),
192 | new List(),
193 | new List(new int[] {1}),
194 | new List(new int[] {1, 1}),
195 | new List(new int[] {1, 0}),
196 | new List(new int[] {1})
197 | }
198 | },
199 | new List[2][] { // I
200 | new List[7] { // Orientation A
201 | new List(new int[] {0}),
202 | new List(new int[] {0, 0}),
203 | new List(new int[] {0}),
204 | new List(),
205 | new List(new int[] {1}),
206 | new List(new int[] {1, 1}),
207 | new List(new int[] {1})
208 | },
209 | new List[10] { // Orientation B
210 | new List(new int[] {4, 0}),
211 | new List(new int[] {0, 4}),
212 | new List(new int[] {0, 5}),
213 | new List(new int[] {0, 4}),
214 | new List(new int[] {4}),
215 | new List(new int[] {5}),
216 | new List(new int[] {1, 5}),
217 | new List(new int[] {1, 4}),
218 | new List(new int[] {1, 5}),
219 | new List(new int[] {5, 1})
220 | }
221 | }
222 | };
223 |
224 | public static int Errors(int piece, List keys, int pos, int rot) {
225 | keys = keys.Skip(keys.IndexOf(6) + 1).ToList();
226 | keys.RemoveAll(x => x == 6);
227 |
228 | int orient = rot; // L, J, T
229 | int placement = pos;
230 |
231 | switch (piece) {
232 | case 0: // S
233 | case 1: // Z
234 | case 6: // I
235 | orient = rot % 2;
236 | break;
237 |
238 | case 5: // O
239 | orient = 0;
240 | break;
241 | }
242 |
243 | switch (piece) {
244 | case 0: // S
245 | case 1: // Z
246 | case 2: // J
247 | case 3: // L
248 | case 4: // T
249 | if (rot != 1)
250 | placement--;
251 | break;
252 |
253 | case 5: // O
254 | if (rot > 2)
255 | placement--;
256 | break;
257 |
258 | case 6: // I
259 | if (rot == 0)
260 | placement--;
261 | if (rot == 2)
262 | placement += -2;
263 | break;
264 | }
265 |
266 | return Math.Max(0, keys.Count - finesse[piece][orient][placement].Count);
267 | }
268 | }
269 | }
270 |
--------------------------------------------------------------------------------
/PPTTools/GameHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Windows.Forms;
4 |
5 | namespace PPTTools {
6 | class GameHelper {
7 | public static VAMemory Game;
8 |
9 | public static class GameState {
10 | public static int playerIndex = 0;
11 |
12 | public static Modules.FTX _FTX;
13 | public static Modules.PPS _PPS;
14 | public static Modules.APM _APM;
15 | public static Modules.APC _APC;
16 | public static Modules.KPP _KPP;
17 | public static Modules.Finesse _Finesse;
18 | public static Modules.Rating _Rating;
19 | public static Modules.Duration _Duration;
20 | public static Modules.Inputs _Inputs;
21 |
22 | private static Timer Scan = new Timer();
23 |
24 | public static bool EnsureGame() {
25 | if (Game == null) {
26 | if (Process.GetProcessesByName("puyopuyotetris").Length != 0) {
27 | Game = new VAMemory("puyopuyotetris");
28 |
29 | _FTX = new Modules.FTX();
30 | _PPS = new Modules.PPS();
31 | _APM = new Modules.APM();
32 | _APC = new Modules.APC();
33 | _KPP = new Modules.KPP();
34 | _Finesse = new Modules.Finesse();
35 | _Rating = new Modules.Rating();
36 | _Duration = new Modules.Duration();
37 | _Inputs = new Modules.Inputs();
38 |
39 | } else {
40 | return false;
41 | }
42 |
43 | } else if (Process.GetProcessesByName("puyopuyotetris").Length == 0) {
44 | Game = null;
45 | return false;
46 | }
47 |
48 | return true;
49 | }
50 |
51 | public static void Update(object sender, EventArgs e) {
52 | if (EnsureGame()) {
53 | playerIndex = FindPlayer();
54 |
55 | if (BigFrames() < 140) {
56 | // Don't Reset FTX, it regulates itself
57 | _PPS.Reset();
58 | _APM.Reset();
59 | _APC.Reset();
60 | _KPP.Reset();
61 | _Finesse.Reset();
62 | // Don't Reset Rating, it regulates itself
63 | _Duration.Reset();
64 | _Inputs.Reset();
65 | } else {
66 | _FTX.Update();
67 | _PPS.Update();
68 | _APM.Update();
69 | _APC.Update();
70 | _KPP.Update();
71 | _Finesse.Update();
72 | _Rating.Update();
73 | _Duration.Update();
74 | _Inputs.Update();
75 | }
76 | }
77 | }
78 |
79 | public static void Reset() {
80 | if (EnsureGame()) {
81 | _FTX.Reset();
82 | _PPS.Reset();
83 | _APM.Reset();
84 | _APC.Reset();
85 | _KPP.Reset();
86 | _Finesse.Reset();
87 | _Rating.Reset();
88 | _Duration.Reset();
89 | _Inputs.Reset();
90 | }
91 | }
92 |
93 | static GameState() {
94 | EnsureGame();
95 |
96 | Update(null, EventArgs.Empty);
97 |
98 | Scan.Interval = 1;
99 | Scan.Enabled = true;
100 | Scan.Tick += Update;
101 | }
102 | }
103 |
104 | public static int Score(int index) => Game.ReadByte(new IntPtr(
105 | Game.ReadInt32(new IntPtr(
106 | 0x14057F048
107 | )) + 0x38 + index * 0x04
108 | ));
109 |
110 | public static int PieceDropped(int index) {
111 | switch (index) {
112 | case 0:
113 | return Game.ReadByte(new IntPtr(
114 | Game.ReadInt32(new IntPtr(
115 | Game.ReadInt32(new IntPtr(
116 | Game.ReadInt32(new IntPtr(
117 | Game.ReadInt32(new IntPtr(
118 | Game.ReadInt32(new IntPtr(
119 | 0x140460C08
120 | )) + 0x18
121 | )) + 0x268
122 | )) + 0x38
123 | )) + 0x3C8
124 | )) + 0x1C
125 | ));
126 |
127 | case 1:
128 | return Game.ReadByte(new IntPtr(
129 | Game.ReadInt32(new IntPtr(
130 | Game.ReadInt32(new IntPtr(
131 | Game.ReadInt32(new IntPtr(
132 | Game.ReadInt32(new IntPtr(
133 | Game.ReadInt32(new IntPtr(
134 | 0x1405989D0
135 | )) + 0x78
136 | )) + 0x20
137 | )) + 0xA8
138 | )) + 0x3C8
139 | )) + 0x1C
140 | ));
141 | }
142 |
143 | return -1;
144 | }
145 |
146 | public static int GarbageSent(int index) {
147 | switch (index) {
148 | case 0:
149 | return Game.ReadInt32(new IntPtr(
150 | Game.ReadInt32(new IntPtr(
151 | Game.ReadInt32(new IntPtr(
152 | Game.ReadInt32(new IntPtr(
153 | Game.ReadInt32(new IntPtr(
154 | 0x140461B20
155 | )) + 0x378
156 | )) + 0x28
157 | )) + 0xD0
158 | )) + 0x3C
159 | ));
160 |
161 | case 1:
162 | return Game.ReadInt32(new IntPtr(
163 | Game.ReadInt32(new IntPtr(
164 | Game.ReadInt32(new IntPtr(
165 | Game.ReadInt32(new IntPtr(
166 | Game.ReadInt32(new IntPtr(
167 | Game.ReadInt32(new IntPtr(
168 | 0x140461B20
169 | )) + 0x378
170 | )) + 0x28
171 | )) + 0x18
172 | )) + 0xD0
173 | )) + 0x64
174 | ));
175 | }
176 |
177 | return -1;
178 | }
179 |
180 | public static int Keystroke(int index) => Game.ReadByte(new IntPtr(
181 | Game.ReadInt32(new IntPtr(
182 | Game.ReadInt32(new IntPtr(
183 | Game.ReadInt32(new IntPtr(
184 | 0x140461B20
185 | )) + 0x378
186 | )) + 0xB0
187 | )) + 0x3A + index * 0x02
188 | ));
189 |
190 | public static int CurrentPiece(int index) {
191 | switch (index) {
192 | case 0:
193 | return Game.ReadByte(new IntPtr(
194 | Game.ReadInt32(new IntPtr(
195 | Game.ReadInt32(new IntPtr(
196 | Game.ReadInt32(new IntPtr(
197 | Game.ReadInt32(new IntPtr(
198 | 0x140461B20
199 | )) + 0x378
200 | )) + 0xC0
201 | )) + 0x120
202 | )) + 0x110
203 | ));
204 |
205 | case 1:
206 | return Game.ReadByte(new IntPtr(
207 | Game.ReadInt32(new IntPtr(
208 | Game.ReadInt32(new IntPtr(
209 | Game.ReadInt32(new IntPtr(
210 | Game.ReadInt32(new IntPtr(
211 | 0x140461B20
212 | )) + 0x378
213 | )) + 0x20
214 | )) + 0x40
215 | )) + 0x400
216 | ));
217 | }
218 |
219 | return -1;
220 | }
221 |
222 | public static int NextPiece(int index) {
223 | switch (index) {
224 | case 0:
225 | return Game.ReadByte(new IntPtr(
226 | Game.ReadInt32(new IntPtr(
227 | Game.ReadInt32(new IntPtr(
228 | Game.ReadInt32(new IntPtr(
229 | 0x140461B20
230 | )) + 0x378
231 | )) + 0xB8
232 | )) + 0x15C
233 | ));
234 |
235 | case 1:
236 | return Game.ReadByte(new IntPtr(
237 | Game.ReadInt32(new IntPtr(
238 | Game.ReadInt32(new IntPtr(
239 | Game.ReadInt32(new IntPtr(
240 | Game.ReadInt32(new IntPtr(
241 | 0x1405989D0
242 | )) + 0x78
243 | )) + 0x28
244 | )) + 0xB8
245 | )) + 0x15C
246 | ));
247 | }
248 |
249 | return -1;
250 | }
251 |
252 | public static int FarPiece(int index) {
253 | switch (index) {
254 | case 0:
255 | return Game.ReadByte(new IntPtr(
256 | Game.ReadInt32(new IntPtr(
257 | Game.ReadInt32(new IntPtr(
258 | Game.ReadInt32(new IntPtr(
259 | 0x140461B20
260 | )) + 0x378
261 | )) + 0xB8
262 | )) + 0x160
263 | ));
264 |
265 | case 1:
266 | return Game.ReadByte(new IntPtr(
267 | Game.ReadInt32(new IntPtr(
268 | Game.ReadInt32(new IntPtr(
269 | Game.ReadInt32(new IntPtr(
270 | Game.ReadInt32(new IntPtr(
271 | 0x1405989D0
272 | )) + 0x78
273 | )) + 0x28
274 | )) + 0xB8
275 | )) + 0x160
276 | ));
277 | }
278 |
279 | return -1;
280 | }
281 |
282 | public static int NextPointer(int index) {
283 | switch (index) {
284 | case 0:
285 | return Game.ReadInt32(new IntPtr(
286 | Game.ReadInt32(new IntPtr(
287 | Game.ReadInt32(new IntPtr(
288 | 0x140461B20
289 | )) + 0x378
290 | )) + 0xB8
291 | )) + 0x15C;
292 |
293 | case 1:
294 | return Game.ReadInt32(new IntPtr(
295 | Game.ReadInt32(new IntPtr(
296 | Game.ReadInt32(new IntPtr(
297 | Game.ReadInt32(new IntPtr(
298 | 0x1405989D0
299 | )) + 0x78
300 | )) + 0x28
301 | )) + 0xB8
302 | )) + 0x15C;
303 | }
304 |
305 | return -1;
306 | }
307 |
308 | public static int PiecePosition(int index) {
309 | switch (index) {
310 | case 0:
311 | return Game.ReadByte(new IntPtr(
312 | Game.ReadInt32(new IntPtr(
313 | Game.ReadInt32(new IntPtr(
314 | Game.ReadInt32(new IntPtr(
315 | 0x140461B20
316 | )) + 0x378
317 | )) + 0x40
318 | )) + 0x100
319 | ));
320 |
321 | case 1:
322 | return Game.ReadByte(new IntPtr(
323 | Game.ReadInt32(new IntPtr(
324 | Game.ReadInt32(new IntPtr(
325 | Game.ReadInt32(new IntPtr(
326 | Game.ReadInt32(new IntPtr(
327 | 0x140461B20
328 | )) + 0x380
329 | )) + 0xC0
330 | )) + 0x120
331 | )) + 0x1E
332 | ));
333 | }
334 |
335 | return -1;
336 | }
337 |
338 | public static int PieceRotation(int index) {
339 | switch (index) {
340 | case 0:
341 | return Game.ReadByte(new IntPtr(
342 | Game.ReadInt32(new IntPtr(
343 | Game.ReadInt32(new IntPtr(
344 | Game.ReadInt32(new IntPtr(
345 | Game.ReadInt32(new IntPtr(
346 | Game.ReadInt32(new IntPtr(
347 | 0x140460C08
348 | )) + 0x18
349 | )) + 0x268
350 | )) + 0x38
351 | )) + 0x3C8
352 | )) + 0x18
353 | ));
354 |
355 | case 1:
356 | return Game.ReadByte(new IntPtr(
357 | Game.ReadInt32(new IntPtr(
358 | Game.ReadInt32(new IntPtr(
359 | Game.ReadInt32(new IntPtr(
360 | Game.ReadInt32(new IntPtr(
361 | Game.ReadInt32(new IntPtr(
362 | 0x1405989D0
363 | )) + 0x78
364 | )) + 0x20
365 | )) + 0xA8
366 | )) + 0x3C8
367 | )) + 0x18
368 | ));
369 | }
370 |
371 | return -1;
372 | }
373 |
374 | public static int LinesCleared(int index) {
375 | switch (index) {
376 | case 0:
377 | return Game.ReadByte(new IntPtr(
378 | Game.ReadInt32(new IntPtr(
379 | Game.ReadInt32(new IntPtr(
380 | Game.ReadInt32(new IntPtr(
381 | 0x140461B20
382 | )) + 0x378
383 | )) + 0xA8
384 | )) + 0x2F8
385 | ));
386 |
387 | case 1:
388 | return Game.ReadByte(new IntPtr(
389 | Game.ReadInt32(new IntPtr(
390 | Game.ReadInt32(new IntPtr(
391 | Game.ReadInt32(new IntPtr(
392 | Game.ReadInt32(new IntPtr(
393 | Game.ReadInt32(new IntPtr(
394 | 0x140461B20
395 | )) + 0x378
396 | )) + 0xA8
397 | )) + 0x270
398 | )) + 0x20
399 | )) + 0x2F8
400 | ));
401 | }
402 |
403 | return -1;
404 | }
405 |
406 | public static int HoldPointer(int index) {
407 | switch (index) {
408 | case 0:
409 | return Game.ReadInt32(new IntPtr(
410 | Game.ReadInt32(new IntPtr(
411 | Game.ReadInt32(new IntPtr(
412 | 0x140598A20
413 | )) + 0x38
414 | )) + 0x3D0
415 | )) + 0x8;
416 |
417 | case 1:
418 | return Game.ReadInt32(new IntPtr(
419 | Game.ReadInt32(new IntPtr(
420 | Game.ReadInt32(new IntPtr(
421 | Game.ReadInt32(new IntPtr(
422 | 0x1405989D0
423 | )) + 0x270
424 | )) + 0x20
425 | )) + 0x3D0
426 | )) + 0x8;
427 | }
428 |
429 | return -1;
430 | }
431 |
432 | public static int HoldPiece(int index) => Game.ReadInt32(new IntPtr(
433 | HoldPointer(index)
434 | ));
435 |
436 | public static int BigFrames() => Game.ReadInt32(new IntPtr(
437 | Game.ReadInt32(new IntPtr(
438 | Game.ReadInt32(new IntPtr(
439 | Game.ReadInt32(new IntPtr(
440 | Game.ReadInt32(new IntPtr(
441 | 0x140460C08
442 | )) + 0x18
443 | )) + 0x268
444 | )) + 0x140
445 | )) + 0x58
446 | ));
447 |
448 | public static int SmallFrames() => Game.ReadInt32(new IntPtr(
449 | Game.ReadInt32(new IntPtr(
450 | 0x1405989F0
451 | )) + 0x594
452 | ));
453 |
454 | public static int Rating() => Game.ReadInt16(new IntPtr(
455 | 0x140599FF0
456 | ));
457 |
458 | public static int PlayerCount() => Game.ReadInt32(new IntPtr(
459 | Game.ReadInt32(new IntPtr(
460 | Game.ReadInt32(new IntPtr(
461 | 0x140473760
462 | )) + 0x20
463 | )) + 0xB4
464 | ));
465 |
466 | public static int LocalSteam() => Game.ReadInt32(new IntPtr(
467 | 0x1405A2010
468 | ));
469 |
470 | public static int PlayerSteam(int index) => Game.ReadInt32(new IntPtr(
471 | Game.ReadInt32(new IntPtr(
472 | Game.ReadInt32(new IntPtr(
473 | 0x140473760
474 | )) + 0x20
475 | )) + 0x118 + index * 0x50
476 | ));
477 |
478 | public static int FindPlayer() {
479 | if (PlayerCount() < 2)
480 | return 0;
481 |
482 | int localSteam = LocalSteam();
483 |
484 | for (int i = 0; i < 2; i++)
485 | if (localSteam == PlayerSteam(i))
486 | return i;
487 |
488 | return 0;
489 | }
490 |
491 | private enum MatchState {
492 | Menu,
493 | Match,
494 | Finished
495 | }
496 | private static MatchState matchState = MatchState.Menu;
497 |
498 | public static bool EnsureMatch() {
499 | if (Game.ReadInt32(new IntPtr(0x140573A78)) != 0x0) {
500 | if (matchState == MatchState.Match) {
501 | matchState = MatchState.Finished;
502 | }
503 | }
504 |
505 | int scoreAddress = Game.ReadInt32(new IntPtr(0x14057F048));
506 |
507 | if (scoreAddress == 0x0) {
508 | if (matchState == MatchState.Finished)
509 | matchState = MatchState.Menu;
510 |
511 | } else if (matchState == MatchState.Menu)
512 | matchState = MatchState.Match;
513 |
514 | return matchState == MatchState.Match;
515 | }
516 | }
517 | }
518 |
--------------------------------------------------------------------------------
/PPTTools/MainForm.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | 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
649 | RK5CYII=
650 |
651 |
652 |
--------------------------------------------------------------------------------