Wimberton / OriginPalia

A multi-purpose tool for Palia, written in C++. For non-commercial usage, looking for contributors. Features such as ESP, Teleportation, Auto-fishing, and more.
https://www.unknowncheats.me/forum/palia/636934-originpalia-feature-packed-multitool-imagine.html
30 stars 10 forks source link

[Low-Priority] [Bug] GC not cleaning objects #15

Closed VoidPollo closed 2 months ago

VoidPollo commented 2 months ago

I posted it a while ago, forgot about it but I went ahead with 1.6.4 and got a new log to have here.

UE:

Fatal error: [File:D:\shared\Palia\Palia-release\Engine\Source\Runtime\CoreUObject\Private\UObject\ReferenceChainSearch.cpp] [Line: 1947] Fatal world leaks detected. Logging first error, check logs for additional information (PendingKill) (async) AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ This reference is preventing the old World from being GC'd ^ -> UObject* UObject::Outer = (PendingKill) BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660 -> UObject* UObject::Outer = (PendingKill) Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel -> UObject* UObject::Outer = (PendingKill) (standalone) World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

Palia:

[2024.05.16-00.50.21:741][ 57]LogLoad: Error: Some previously active worlds or related objects were not cleaned up by garbage collection!
[2024.05.16-00.50.21:742][ 57]LogLoad: Error: Once a world has become active, it cannot be reused and must be destroyed and reloaded.
[2024.05.16-00.50.21:742][ 57]LogLoad: Error: Dumping reference chains:
[2024.05.16-00.50.21:753][ 57]LogLoad: Error: Printing reference chains leading to World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root: 
[2024.05.16-00.50.21:753][ 57] (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077
[2024.05.16-00.50.21:753][ 57] -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660
[2024.05.16-00.50.21:753][ 57]  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
[2024.05.16-00.50.21:753][ 57]   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root
[2024.05.16-00.50.21:753][ 57]  
[2024.05.16-00.50.21:753][ 57] (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_01_C_CHILDACTOR_2147451661.AkComponent_2147461076
[2024.05.16-00.50.21:753][ 57] -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_01_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_01_C_CHILDACTOR_2147451661
[2024.05.16-00.50.21:754][ 57]LogLoad: Error: Old World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root not cleaned up by GC! Object AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077 is being referenced by GarbageCollectionKeepFlags:
 (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     ^ This reference is preventing the old World from being GC'd ^
 -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660
  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

[2024.05.16-00.50.21:754][ 57]LogWindows: Error: appError called: Fatal error: [File:D:\shared\Palia\Palia-release\Engine\Source\Runtime\CoreUObject\Private\UObject\ReferenceChainSearch.cpp] [Line: 1947] 
Fatal world leaks detected. Logging first error, check logs for additional information
 (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     ^ This reference is preventing the old World from being GC'd ^
 -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660
  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

[2024.05.16-00.50.21:754][ 57]  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
[2024.05.16-00.50.21:754][ 57]   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root
Wimberton commented 2 months ago

I posted it a while ago, forgot about it but I went ahead with 1.6.4 and got a new log to have here.

UE:

Fatal error: [File:D:\shared\Palia\Palia-release\Engine\Source\Runtime\CoreUObject\Private\UObject\ReferenceChainSearch.cpp] [Line: 1947] Fatal world leaks detected. Logging first error, check logs for additional information (PendingKill) (async) AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ This reference is preventing the old World from being GC'd ^ -> UObject* UObject::Outer = (PendingKill) BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660 -> UObject* UObject::Outer = (PendingKill) Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel -> UObject* UObject::Outer = (PendingKill) (standalone) World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

Palia:

[2024.05.16-00.50.21:741][ 57]LogLoad: Error: Some previously active worlds or related objects were not cleaned up by garbage collection!
[2024.05.16-00.50.21:742][ 57]LogLoad: Error: Once a world has become active, it cannot be reused and must be destroyed and reloaded.
[2024.05.16-00.50.21:742][ 57]LogLoad: Error: Dumping reference chains:
[2024.05.16-00.50.21:753][ 57]LogLoad: Error: Printing reference chains leading to World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root: 
[2024.05.16-00.50.21:753][ 57] (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077
[2024.05.16-00.50.21:753][ 57] -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660
[2024.05.16-00.50.21:753][ 57]  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
[2024.05.16-00.50.21:753][ 57]   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root
[2024.05.16-00.50.21:753][ 57]  
[2024.05.16-00.50.21:753][ 57] (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_01_C_CHILDACTOR_2147451661.AkComponent_2147461076
[2024.05.16-00.50.21:753][ 57] -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_01_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_01_C_CHILDACTOR_2147451661
[2024.05.16-00.50.21:754][ 57]LogLoad: Error: Old World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root not cleaned up by GC! Object AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077 is being referenced by GarbageCollectionKeepFlags:
 (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     ^ This reference is preventing the old World from being GC'd ^
 -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660
  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

[2024.05.16-00.50.21:754][ 57]LogWindows: Error: appError called: Fatal error: [File:D:\shared\Palia\Palia-release\Engine\Source\Runtime\CoreUObject\Private\UObject\ReferenceChainSearch.cpp] [Line: 1947] 
Fatal world leaks detected. Logging first error, check logs for additional information
 (PendingKill) (async)  AkComponent /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660.AkComponent_2147461077
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     ^ This reference is preventing the old World from being GC'd ^
 -> UObject* UObject::Outer = (PendingKill)  BP_Stables_FrontGate_02_C /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel.DESTROYED_BP_Stables_FrontGate_02_C_CHILDACTOR_2147451660
  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

[2024.05.16-00.50.21:754][ 57]  -> UObject* UObject::Outer = (PendingKill)  Level /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root:PersistentLevel
[2024.05.16-00.50.21:754][ 57]   -> UObject* UObject::Outer = (PendingKill) (standalone)  World /Game/Maps/AZ1/AZ1_01/AZ1_01_Root/_Generated_/6NSFY4M41R0FR9EMNNVD3HADC.AZ1_01_Root

This is something I'm looking into. It seems when using the teleport location options, your player may be moving to the location and not cleaning up certain audio objects which were around you at the previous location. I've looked into the options for cleanup and have some small commands ran, but it seems it's still happening.

Using the teleport location options to move within the specific world you're in seems fine. It's when trying to unload and load a new level (accessing a gate, etc)

I'll need to look into this further. Not exactly sure of the fix yet.

VoidPollo commented 2 months ago

I tried a bunch of GC related calls, .ini tweaks, etc.. I'm able to replicate this without traversing through Bahari->Kilima, just going far, and straight to the gate, then slow walk through it but then I clicked teleport home still causes it.

Doing research just seems this specific crash might just be the way the game is coded (That BP specifically).

So what I think its happening is, the AkComponent is doing its thing, then before it finishes we are forcing a GC by going to a different world, it gets marked for killing, etc, and I think right at the end is a second call to destroy the object (not sure if its the object trying to destroy itself, rather than the GC), but its already not valid. My head hurts at this point to make any sense...

But if this is a game limitation in terms of how that fence behaves, maybe theres a way to make that object just not be there for us? And maybe that would be enough for that area.

Wimberton commented 2 months ago

I tried a bunch of GC related calls, .ini tweaks, etc.. I'm able to replicate this without traversing through Bahari->Kilima, just going far, and straight to the gate, then slow walk through it but then I clicked teleport home still causes it.

Doing research just seems this specific crash might just be the way the game is coded (That BP specifically).

So what I think its happening is, the AkComponent is doing its thing, then before it finishes we are forcing a GC by going to a different world, it gets marked for killing, etc, and I think right at the end is a second call to destroy the object (not sure if its the object trying to destroy itself, rather than the GC), but its already not valid. My head hurts at this point to make any sense...

But if this is a game limitation in terms of how that fence behaves, maybe theres a way to make that object just not be there for us? And maybe that would be enough for that area.

That was my thoughts as well. Possibly just programmatically removing the Stable gates and it's children might work.

VoidPollo commented 2 months ago

hehe

Removing the objects in-fact, did help with the crashes :) I abused it going far through the map, spammed teleport everywhere and then through gates a bunch of times.

VoidPollo commented 2 months ago

I did it the lazy way, I just removed ALL stables (not just the fences), not a single crash. After a few times of traversing through worlds the fences came back but not the other stables, once the gates came back and I went through, it immediately crashed.

It's weird the fences just returned on its own, but not the actual stables? It's like the game re-spawned them without the "stables" part attached to it because I couldn't remove them again within the same running game instance. (lazy code)

But I think it proves more towards the right direction that the issue is those fence objects, if you can somewhat-permanently remove them then I think this issue can be marked as resolved.

VoidPollo commented 2 months ago

Closing now, people can make a new one once their gates don't go away and they decided to go through the gates of hell.

Mental note, not sure if too many LevelFlush and GC from teleporting could be 'a' cause for them coming back/not getting removed? Perhaps not force those with every TP if this is still an issue? anyhow... bye

Wimberton commented 2 months ago

Closing now, people can make a new one once their gates don't go away and they decided to go through the gates of hell.

Mental note, not sure if too many LevelFlush and GC from teleporting could be 'a' cause for them coming back/not getting removed? Perhaps not force those with every TP if this is still an issue? anyhow... bye

Have you noticed them coming back with the current GC commands in the teleportation list action? If so, I'll remove them, and we can go a day or so seeing if that brings more or less issues. Let me know.

VoidPollo commented 2 months ago

I can't recall if I commented them out at one point for testing. So leaving it here as food for thought.

The one thing I'm a little concerned is my other machine gets a random crash according to my significant other with the hack, we've yet to play on that machine, but the crash they get doesn't say anything really, just a violation address, the logs are vague.

So im not sure if its just a low performance pc issue or what, I'll look more into the address violation next time it happens once the project gets a few more commits going.

Wimberton commented 2 months ago

I can't recall if I commented them out at one point for testing. So leaving it here as food for thought.

The one thing I'm a little concerned is my other machine gets a random crash according to my significant other with the hack, we've yet to play on that machine, but the crash they get doesn't say anything really, just a violation address, the logs are vague.

So im not sure if its just a low performance pc issue or what, I'll look more into the address violation next time it happens once the project gets a few more commits going.

Yeah if you can provide an error log and the UnrealEngine error, we can definitely find out what's going on. When specifically is the crash happening?

01010100010100100100100101000111 commented 2 months ago

a random crash

Maybe related but, had this a few times this morning, seems more often with HWMonitor running and consistent (yesterday) with Overwolf running (Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000262) not really got any repo steps, seems quite random...

I updated to latest DLL a few hours ago and so far, been OK...

VoidPollo commented 2 months ago

a random crash

Maybe related but, had this a few times this morning, seems more often with HWMonitor running and consistent (yesterday) with Overwolf running (Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000262) not really got any repo steps, seems quite random...

I updated to latest DLL a few hours ago and so far, been OK...

I think I did read 262 last time it happened. That machine has MSI Afterburner, which maybe comes with the Rivatuner in the background (Overlay?) I'll remove it at gameplay later tonight when they play and see if it happens.

Wimberton commented 2 months ago

a random crash

Maybe related but, had this a few times this morning, seems more often with HWMonitor running and consistent (yesterday) with Overwolf running (Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000262) not really got any repo steps, seems quite random... I updated to latest DLL a few hours ago and so far, been OK...

I think I did read 262 last time it happened. That machine has MSI Afterburner, which maybe comes with the Rivatuner in the background (Overlay?) I'll remove it at gameplay later tonight when they play and see if it happens.

Sounds good. Keep me posted. I'll take a look and see what I can find otherwise. On a fishing dropdown note, it seems that the fishing locations IDs change depending on the session, so I'm having trouble getting the FName sOverrideFishingSpot value to be correctly converted from the string names back to a usable FName in the fishing override.

01010100010100100100100101000111 commented 2 months ago

@Wimberton maybe worth setting up a discord to chat on, rather than posting in issues, if you like?

Wimberton commented 2 months ago

@Wimberton maybe worth setting up a discord to chat on, rather than posting in issues, if you like?

Yeah I'm working on that as we speak. Gotta set up some minor rulesets etc for it but I'll be posting the Discord link in the README of this GitHub repo, where the other quicklinks are (Download injector, DLL, read wiki)