diff --git a/site/guides/first.html b/site/guides/first.html index 2bc305d..a083f0c 100644 --- a/site/guides/first.html +++ b/site/guides/first.html @@ -26,7 +26,7 @@ If you don't have experience with programming C#, I'd suggest you learn the basics before tackling Gamecraft modding. I've tried to make the setup as easy as possible, so that you can get straight to the interesting part: modding. But before we get started, you've got some waiting around to do; time to install some software and download some stuff.

-

To get the ball rolling, you'll need to download Visual Studio Community Edition, the .NET 4.8 Developper pack and GCIPA's latest releasefor this guide (and for Gamecraft modding). +

To get the ball rolling, you'll need to download Visual Studio Community Edition, the .NET 4.8 Developper pack and GCIPA's latest releasefor this guide (and for Gamecraft modding). I'm sorry in advance to the smart devs who don't use Windows; monodevelop may work, but I haven't had any success. You'll also need Gamecraft (and Steam) installed on your computer, unless you're magic or something. Since Visual Studio is a Microsoft product, it'll take a while to install, so while you're waiting for that to do it's thing, let's patch Gamecraft.

@@ -56,28 +56,29 @@
Blood in the cut

Your mod is installed, but it doesn't do anything yet. Let's fix that. In Visual Studio, open TestPlugin.cs and take a look at it. - This is the main Plugin file, which is interface between Unity and IPA. + This is the main Plugin file, which is the interface between Unity and IPA. It's very similar to a Unity MonoBehaviour, but with some sprinkles. - As the first modification, let's do something simple: In the OnUpdate() method, add (or uncomment) "Debug.Log("Print this to log every frame");" and then save and build the project. + As the first modification, let's do something simple: In the OnUpdate() method, add (or uncomment) "Debug.Log("Print this to log every frame");" (without quotes) and then save and build the project. Once again, copy TestMod.dll into Gamecraft's Plugins folder. Now start Gamecraft. - When you open Gamecraft's Player.log file (in something like %appdata%/../LocalLow/FreeJame/Gamecraft), you should see some wonderful spam of "Print this to log every frame". + When you open Gamecraft's Player.log file (found in something like %appdata%/../LocalLow/FreeJame/Gamecraft), you should see some wonderful spam of "Print this to log every frame". You did that! You've modified your first mod! For more advanced stuff, I'd recommend using a C# decompiler like dnSpy to read Gamecraft code and figure out what you need to modify. Also read about Harmony (included in the TestMod base configuration; see TestPatch.cs) for patching existing methods.

Gamecraft Architecture

Do I wanna know

Gamecraft modding uses a few new ideas in game development which can be quite different from common software engineering practices. - The most notable paradigm shifts are the Entity Component System (ECS) and lack of documentation (and code comments aren't included in DLLs). + The most notable paradigm shifts are the Entity Component System (ECS) and lack of documentation. + To add insult to injury, code comments aren't included in C# DLLs. Please note that I won't extensively cover Gamecraft's codebase because I don't understand all of it and I don't want to get sued for "exposing trade secrets" or copyright violations. You can learn all of this yourself by searching on the Internet and by using dnSpy, so nothing in Gamecraft is really secret.

In traditional object-oriented programs, object relationships (eg One-to-many, One-to-one, Many-to-many) are stored in both objects which makes object traversal very easy. With ECS, an entity, which is similar to an object, simply describes what components it has relationships with; usually one-to-one. - Those components are stored in an entity database, where they can be accessed and modified. + Those components are created and then stored in an entity database, where they can be accessed and modified. The entity itself is never really created, so there is no easy entity traversal. ECS does offer other advantages, like performance-friendly operations on a set of components and much better dependency decoupling between objects.

In Gamecraft, a custom-desgned ECS is used called Svelto.ECS (made by FreeJam's superstar coder Seb). Gamecraft tends to use the most recent version of Svelto.ECS, or even a version newer than what is publicly available. - Svelto.ECS does have some documentation (but nothing extensive) in the form of articles on Seb's website, but I find using dnSpy to read Svelto.ECS.dll to be much more helpful. + Svelto.ECS does have some documentation (but nothing extensive) in the form of articles on Seb's website, but I find using dnSpy to read Svelto.ECS.dll to be much more helpful. Seb also has a Discord server if you have Svelto.ECS questions. Please don't bother him with non-ECS questions; Gamecraft doesn't officially support modding and we wouldn't want them to try to actively prevent it.

In between third-party code, compiled-out code comments and the lack of official modding documentation, the hardest part of modding right now is figuring out how to do what you want to do.