Profile Picture
|
C / C++
Binary Analysis
C#
Linux
WPF
IDA Pro
.NET
VMware
Embeded Devices
Visual Studio
Python
Lua
JavaScript
XAML
git
VScode
Docker
Java
JSON
+
TheGuy920's GitHub Stats, Rank: A+ Total Stars Earned: 10, Total Commits in 2024 : 936, Total PRs: 22, Total Issues: 12, Contributed to (last year): 12 TheGuy920's GitHub Stats A+ Total Stars Earned: 10 Total Commits (2024): 936 Total PRs: 22 Total Issues: 12 Contributed to (last year): 12
Most Used Languages C# 79.63% Lua 17.83% Python 1.41% HTML 0.99% JavaScript 0.11% PowerShell 0.03%

Current Project

Vacation and Job Hunting 😎

IDE Mod Tool

This is my most recent unfinished project that I am most proud of. The Mod Tool is a fully fledged modding tool for the game "Scrap Mechanic". The tool is designed to be a one stop shop for modders to create, test, and publish mods for the game. The planned features for the tool were extensive and included mod validation, mod packaging, mod testing, and mod publishing to the Steam Workshop just to name a few. While planning this project, I needed to determine what was needed of this tool and what would be most useful, efficient, and convenient for modders. The game allows for custom 3d models, textures, and lua scripts to be added to the game and I was having a hard time figuring out how I could incorporate all of these features into the tool. Tools like blender, gimp, and vs code are all feature rich and powerful tools and would be hard to replicate in a single tool.

I began strategizing with LLMs and discovered that using the Windows API that it was actually possible for me to steal the window handle of another window and embed it into my own window. This was a huge breakthrough for me and I was able to embed the windows of blender, gimp, and vs code into my own tool. This allowed me to use the features of these tools without having to recreate them in my own tool. Many of these programs even allow for plugins or extensions as well as start up arguments that can be used to automatically open a file or project and even auto install plugins. This meant that not only could I use the features of these tools but I could also interface with them and automate tasks that would normally be done manually. With the ability to steal the window handle of another window, AND interface with the programs I was able to create a tool that was absolutely feature rich with no drawbacks and use the programs as if they were part of my own.

So on top of my existing plan, I now needed to add support for MANY different programs such as Blender and Maya for 3d modeling, Gimp, Photoshop, and Krita for texturing, and integrate a language server for lua scripting. The more and more ideas I had for the tool, the more and more the project felt like it was not doable and quickly became overwhelming. All of the programs mentioned above have some sort of plugin or extension interface that would require me to learn and create for so that I could expose the features of the programs to my tool.

When it came time to analyze the requirements for lua scripting, I realized that all of the nuances of Scrap Mechanic lua would be challenging to implement. The game has an outdated custom lua interpreter with custom modifications, functions, and classes that would be difficult to replicate for validation and autocompletion. I also wanted for auto lua generation when it came to things like controlling the GUI and animations. The GUI was very very limited and one feature that is possible yet challenging is GUI animations. This could be done with a tool that allows modders to create and edit animations with a visual editor and then generate the mountains of lua code necessary for such animations. This wouldnt be limited to 2d GUI animations but also allow for 3d world space animations as well.

Planned Features

  • Visual style similar to Visual Studio IDE
    • Dark and Light themes
    • Customizable color schemes
    • Feature rich toolbar
    • Customizable window layout (docking windows)
  • Direct git integration and version management
    • Full access to all git commands
    • Regular backups and mod folder / git folder segregation
  • Mod validation and packaging
    • JSON Validation
    • Lua Validation
    • Config Validation
    • Total Config Debug Window
  • Terminal integration
    • Development Environment
    • Environment Variables
  • Mod testing and debugging
    • Game hooking for detailed debugging
    • Game console output redirect
    • Auto file navigation on logged error
  • Mod publishing to Steam Workshop
    • Steam Workshop Preview Page Editor
    • Steam Workshop API Integration
  • 3d model and texture editing
    • Blender Support
      • Blender Plugin (python)
      • Blender Start Up Arguments
    • Maya Support
      • Maya Plugin (python)
      • Maya Start Up Arguments
    • Gimp Support
      • Gimp Plugin (python)
      • Gimp Start Up Arguments
    • Krita Support
      • Krita Plugin (python)
      • Krita Start Up Arguments
  • Custom lua scripting with validation and autocompletion
    • Scrap Mechanic specific lua language server
    • Integrated lua interpreter from Scrap Mechanic Lua51.dll
    • Auto code generation, formatting, & advanced syntax highlighting
  • GUI animation editor and lua generation
    • Auto frame generation
    • File size optimization
    • GUI Animation Preview, Timeline, & Keyframes
  • GUI Editor
    • XML Editor
    • XML Validation
    • XML Autocompletion
    • XML Preview
      • XML Designer
  • Lua bytecode generation and obfuscation
  • Integrated Copilot or custom GPT with enhanced background knowledge

So you might be able to tell its not a short list and for a solo developer this list alone has killed my motivation on the project. While stealing the window handle of another window to avoid recreating entire programs, some features did not have this luxury and would require me to create them from scratch. The prime example of this is the GUI editor. The game uses MyGUI XML for its GUI and all available editors or tools for this are awful experiences. With many limitations introduced by the developers of the game and MyGUI itself, the only solution is a custom one.

Plasma Modding SDK and Mod Loader

The Plasma Modding SDK and Mod Loader is still a work in progress but it is one of my most successful projects to date. This toolkit is for the game "Plasma". It includes a mod loader for developers and users, packages a game api for mods to use, and a devkit for debugging and testing mods.

The Mod Loader itself came packaged with the game API and a mod manager for users to be able to load and unload mods at will. The game API was designed to be as simple as possible for developers to use and to be able to easily add new features to the game. There were also many difficulties with reliability and performance that were overcome during the development of the game API to ensure that it was in a usable state for developers and users.

The devkit, as can be seen above, created and attached a debugging console to the game and added stack tracing and game timestamps to the console output. This hooked into several game functions in order to intercept logging information for the console and included additional handlers and delegates for unhandled exceptions and errors.

The game API was a more difficult challenge. I had to reverse engineer the game in order to understand how the game worked and how to interact with it. This was done using dnSpy and ILSpy to decompile the game and understand the game's code. When I wanted to add new features to the game, I used Harmony to patch the game's code and add new features to the game. This was done by creating a new assembly that would be loaded into the game's memory and would patch the game's code at runtime.

Custom Gui Editor

TODO (project is done, need to write about it) -----------------------------------------------------------------------------

Livestream Chat API

TODO (project is done, need to write about it)

Steam workshop content API

TODO (project is done, need to write about it)