diff --git a/.gitignore b/.gitignore
index 9491a2f..a8a8685 100644
--- a/.gitignore
+++ b/.gitignore
@@ -360,4 +360,6 @@ MigrationBackup/
.ionide/
# Fody - auto-generated XML schema
-FodyWeavers.xsd
\ No newline at end of file
+FodyWeavers.xsd
+/UI_Creation_Manual.md
+/UI_Creation_VirindiViewService_Manual.md
diff --git a/GearCycler/GearCore.cs b/GearCycler/GearCore.cs
deleted file mode 100644
index 09b380a..0000000
--- a/GearCycler/GearCore.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.IO;
-using System.Runtime.InteropServices;
-using Decal.Adapter;
-using Decal.Adapter.Wrappers;
-using VirindiViewService;
-using VirindiViewService.Controls;
-
-namespace GearCycler
-{
- [ComVisible(true)]
- [Guid("9b6a07e1-ae78-47f4-b09c-174f6a27d7a3")] // Replace with your own unique GUID if needed
- [FriendlyName("GearCycler")]
- public class GearCore : PluginBase
- {
- public HudView view;
- private HudButton btnCycle;
-
- protected override void Startup()
- {
- try
- {
- string xml = File.ReadAllText("ViewXML\\mainview.xml");
- view = HudView.ReadXmlLayout(xml);
- view.Visible = true;
-
- btnCycle = (HudButton)view.Controls["btnCycle"];
- btnCycle.Hit += (s, e) =>
- {
- CoreManager.Current.Actions.AddChatText("[GearCycler] Button clicked!", 1);
- };
- }
- catch (Exception ex)
- {
- CoreManager.Current.Actions.AddChatText($"[GearCycler] Failed to load UI: {ex.Message}", 1);
- }
- }
-
- protected override void Shutdown()
- {
- btnCycle?.Dispose();
- view?.Dispose();
- }
- }
-}
diff --git a/GearCycler/GearCycler.csproj b/GearCycler/GearCycler.csproj
deleted file mode 100644
index b4344de..0000000
--- a/GearCycler/GearCycler.csproj
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {1293560E-2A56-417F-8116-8CE0420DC97C}
- Library
- Properties
- GearCycler
- GearCycler
- v4.8
- 512
- true
-
-
- true
- full
- false
- bin\Debug\
- TRACE;DEBUG;VVS_REFERENCED;DECAL_INTEROP
- prompt
- 4
- x86
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
-
- ..\MosswartMassacre\lib\Decal.Adapter.dll
-
-
- False
- True
- ..\MosswartMassacre\lib\Decal.Interop.Core.DLL
-
-
- False
- True
- ..\MosswartMassacre\lib\Decal.Interop.Inject.dll
-
-
-
-
-
-
-
-
-
-
-
- ..\MosswartMassacre\lib\VirindiViewService.dll
-
-
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/GearCycler/Properties/AssemblyInfo.cs b/GearCycler/Properties/AssemblyInfo.cs
deleted file mode 100644
index c45a3b8..0000000
--- a/GearCycler/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("GearCycler")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("GearCycler")]
-[assembly: AssemblyCopyright("Copyright © 2025")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("f5462318-d26a-4ab0-8981-80edd9ec9c99")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/GearCycler/Properties/Resources.Designer.cs b/GearCycler/Properties/Resources.Designer.cs
deleted file mode 100644
index 40b9adf..0000000
--- a/GearCycler/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace GearCycler.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GearCycler.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/GearCycler/Properties/Resources.resx b/GearCycler/Properties/Resources.resx
deleted file mode 100644
index 4fdb1b6..0000000
--- a/GearCycler/Properties/Resources.resx
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/GearCycler/ViewXML/mainView.xml b/GearCycler/ViewXML/mainView.xml
deleted file mode 100644
index 1300d02..0000000
--- a/GearCycler/ViewXML/mainView.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/GearCycler/lib/Decal.Adapter.dll b/GearCycler/lib/Decal.Adapter.dll
deleted file mode 100644
index c27e132..0000000
Binary files a/GearCycler/lib/Decal.Adapter.dll and /dev/null differ
diff --git a/GearCycler/lib/Decal.Interop.Core.DLL b/GearCycler/lib/Decal.Interop.Core.DLL
deleted file mode 100644
index b8de808..0000000
Binary files a/GearCycler/lib/Decal.Interop.Core.DLL and /dev/null differ
diff --git a/GearCycler/lib/Decal.Interop.Inject.dll b/GearCycler/lib/Decal.Interop.Inject.dll
deleted file mode 100644
index f186c93..0000000
Binary files a/GearCycler/lib/Decal.Interop.Inject.dll and /dev/null differ
diff --git a/GearCycler/lib/VirindiViewService.dll b/GearCycler/lib/VirindiViewService.dll
deleted file mode 100644
index 1e3f4fc..0000000
Binary files a/GearCycler/lib/VirindiViewService.dll and /dev/null differ
diff --git a/GearCycler/lib/VirindiViewService.xml b/GearCycler/lib/VirindiViewService.xml
deleted file mode 100644
index c43230e..0000000
--- a/GearCycler/lib/VirindiViewService.xml
+++ /dev/null
@@ -1,386 +0,0 @@
-
-
-
- VirindiViewService
-
-
-
-
- Implies Top and Left
-
-
-
-
- Provides theme elements, which can be drawn by controls.
-
-
-
-
- Displays an element from the current theme.
-
-
-
-
- The base class for all Virindi Views controls.
-
-
-
-
- Called after this control is added to a ControlGroup. This is when the Name and details have been set.
-
-
-
-
- Add and initialize a child control of this control. The child may be removed by disposing it.
-
-
-
-
-
- Called when a child of this control is disposed.
-
-
-
-
-
- Recursively disposes all children and removes this control from the view, if it is initialized.
-
-
-
-
- Handles a mouse wheel event. Parent controls must pass this on to applicable children if necessary.
-
-
-
-
-
-
- Fires the MouseEvent event for mouse down, and sets this control as the focus control if CanTakeFocus is true.
-
- Parent controls must pass this on to applicable children if necessary.
-
-
-
-
-
- Fires the MouseEvent event for mouse up as well as the Hit event.
-
- Parent controls must pass this on to applicable children if necessary.
-
-
-
-
-
-
- Fired when the mousedown originated outside the current view. The base version of this method
- passes on the event to all children if the 'up' point is within its saved rect.
-
- Mouseup point
-
-
-
- Tracks mouseover and fires the MouseOverChange event, as well as the MouseEvent event for mouse move.
-
- Parent controls must pass this on to applicable children if necessary.
-
-
-
-
-
- Parses a key message and fires the specific key event methods.
-
- Key events are only sent to the control with focus.
-
-
-
-
-
-
-
-
- WARNING: ONLY A PARENT CONTROL SHOULD CALL THIS METHOD.
-
- This method is overridden in derived controls to handle the actual control drawing. Overridden methods should call
- the base, draw, and recursively call this method on all child controls.
-
-
-
-
-
- WARNING: ONLY A PARENT CONTROL SHOULD CALL THIS METHOD.
-
- Notifies a control of changed saved draw options. This method saves its parameters in the Savedxxx properties.
- Parent controls should override this method and recursively notify children of their new draw options, altering
- their pClipRegion to reflect their new position in the View.
-
- This base method also fires the DrawStateChange and ThemeChanged events.
-
- This control's area, relative to the view area.
- The theme applied to this control.
- The context of this control, eg. inside a listbox.
- The position of the View, in game window coordinates.
-
-
-
- WARNING: ONLY A PARENT CONTROL SHOULD SET THIS PROPERTY.
-
-
-
-
- List of XmlAttributes present on the XmlNode that was used to construct this control, if the control was loaded from XML. Otherwise, empty.
-
-
-
-
- The XmlNode used to construct this control, if the control was loaded from XML. Otherwise, null.
-
-
-
-
- The name that this control will be initialized with.
-
-
-
-
- A multiline uneditable scrolling text box.
-
-
-
-
- A single image control.
-
-
-
-
- A button using custom images.
-
-
-
-
- A doubly-linked list with a Dictionary index. Duplicate items are not allowed.
- -Add is O(1)
- -Contains is O(1)
- -Remove is O(1)
- -Get/set by index is O(n)
- -Insert is O(n)
- -RemoveAt is O(n)
- Additionally, a cached pointer (with associated index) is kept pointing to the last used index item.
- When looking up an item by index, the list is walked from the head, tail, or cached index pointer.
- Thus, doing multiple operations in index order is O(1) even without an enumerator.
-
-
-
-
-
- This method gets the node corresponding to a particular index. To get there,
- the list is traversed from the head, tail, or cached index pointer (if valid).
-
-
-
-
-
-
- Web browser control, using Awesomium (free license version)
-
-
-
-
- A horizontal scrollbar.
-
-
-
-
- Summary description for ByteCursor.
-
-
-
-
- A checkbox with optional associated text. Uses its parent to provide the background.
-
-
-
-
- A single-line text input box.
-
-
-
-
- Called before render so the required size of the new target area can be calculated.
- The returned value is the size of the desired draw area, not including outer borders and
- style-dependent padding. This size must be less than or equal to MaximumSize in each dimension.
-
-
-
-
-
-
- Draw this element. When this is called, the background and borders will already have been drawn, and
- target will already be in BeginRender. This method should leave the target in render mode.
-
-
-
-
-
-
-
- A renderer for string-only tooltips.
-
-
-
-
- Represents an unordered set of items. Duplicates are not allowed.
- (This is really just a dictionary which only holds keys.)
- Should be used when a collection of non-duplicate items is needed and
- the order doesn't matter.
-
-
-
-
- A series of titled tabs along the top, each one having an associated control which appears
- on the bottom when its tab is enabled.
-
-
-
-
- A progressbar.
-
-
-
-
- A regular pushbutton-style control.
-
-
-
-
- Calls the non-hooked IDirect3DDevice9::BeginScene function. When rendering inside a VVS view or texture, use DxTexture.BeginRender() instead.
-
-
-
-
-
- Calls the non-hooked IDirect3DDevice9::EndScene function. When rendering inside a VVS view or texture, use DxTexture.EndRender() instead.
-
-
-
-
-
- Gets the current instance of the VVS bar.
-
-
-
-
- A console containing game chat.
-
-
-
-
- Initializes Direct3D drawing and sets the rendertarget to this texture. Calls to this method should be minimized to improve performance. DxTexture.EndRender() must be called after calling this method.
-
-
-
-
-
-
-
-
-
- Ends Direct3D rendering and resets the rendertarget. Must be called after DxTexture.BeginRender().
-
-
-
-
- Note: Before use, FlushSprite() may need to be called to ensure correct ordering.
-
-
-
-
-
-
-
-
- Note: Before use, you must call BeginUserDrawOperation().
-
-
-
-
-
-
-
-
- Note: Before use, you must call BeginUserDrawOperation().
-
-
-
-
-
-
-
-
-
- A vertically scrolling list, containing a number of rows and columns. Every row
- has the same number and types of columns. Each column contains a specified control type.
-
-
-
-
- A number of images on top of each other, which always draw in the proper order.
-
-
-
-
- A simple text display control. Uses its parent to provide the background.
-
-
-
-
- A container for multiple controls with set locations and sizes within.
-
-
-
-
- A dropdown list.
-
-
-
-
- If the context menu is not visible, it is created at the specified point.
-
-
-
-
- If the context menu is not visible, it is created at the specified point with the specified theme.
-
-
-
-
- Provides information about an associated tooltip.
-
-
-
-
- The HudControl that the tip is attached to.
-
-
-
-
- Deprecated.
- Returns the text associated with a tooltip only if the tip contains a cStringRenderer.
-
-
-
-
- A vertical scrollbar.
-
-
-
-
- A horizontal slider.
-
-
-
-
- A control that allows easy access to underlying draw methods.
-
-
-
-
diff --git a/GearCycler/mainView.xml b/GearCycler/mainView.xml
deleted file mode 100644
index d68a2a3..0000000
--- a/GearCycler/mainView.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file