Quote from: Rocket on May 22, 2025, 08:33 AM@rUNaW4y how about today or Friday 19:30 CET?Today it works for me, I will be in AG at that time.
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Quote from: Rocket on May 22, 2025, 08:33 AM@rUNaW4y how about today or Friday 19:30 CET?Today it works for me, I will be in AG at that time.
Quote from: Rocket on May 19, 2025, 05:31 PMQuote from: Big Billy on May 19, 2025, 04:56 PMheyo is group 2 still alive?
@CN-Wynn @TheWalrus @Rocket @rUNaW4y
yo
I'm quite active on AG as you may see, but I don't see neither @CN-Wynn nor @rUNaW4y
with @TheWalrus we'll arrange it np
Quote from: TheKomodo on April 02, 2025, 10:12 PMStart with 8 or 12?
Quote from: Kaleu on February 18, 2025, 09:04 PMQuote from: WormInjector on February 18, 2025, 08:37 PMHello!
This script demonstrates the rope mechanics that many have been curious about. It is designed to be efficient and easy to use.
Z, X = Space
If you need a customized version, feel free to contact us by email to request one for free!
*link removed*
Didn't work for me
Nvm, it's turned on and off by PageDown / PageUp
Quote from: l7cx1Cl on January 25, 2025, 08:53 PMmaterlism is the downfall of the human race
Quote from: jsgnextortex on January 17, 2025, 03:43 AMDude, Nizikawa already linked to the discord discussion where he answered pretty much everything you are asked, also right there, on the same link, there are the functions you are asking for, in 2 different formats even, the IDA project straight from Nizi and just the func names and dirs that I looted from it in txt format if thats all of what you need....you are on that discord just grab them from there.
Quote from: nizikawa on January 14, 2025, 03:42 PMHere's the glimpse of it:
First think of a simple idea you would like to implement. For example, let's make all explosions 10 times more powerful.
Ok, let's use Wormkit API to make explosions 10 times bigger. Haha, there is no wormkit API. All wormkit does is in fact loading your DLL in the game, that's all. Everything else needs to be done by you, starting from dllmain, and I really mean it. You need to carefully patch the game's code in memory in order to change its behavior in a desired way.
Try to guess how the explosions are created in the game. You can see, that the game is able to create both small and big explosions, so they probably have some "power" parameter. The explosion can be placed anywhere on the map, usually where a weapon, mine or worm explodes, so there must be a way to specify XY coordinates of the explosion. This tells us, that there is some hypotethical function "create explosion" that accepts at least "x, y, power" parameters.
With this in mind, can you think of the simplest way to make the explosions 10 times more powerful? How about modifying the "create explosion" function in a way that will multiply the
"power" parameter by 10 whenever it's called? Sounds easy.
Now, we need to find this "create explosion" function. For this to work, we need to analyze WA's code. You need a disassembler (and to make things easier, decompiler) - your two main options are Ghidra and IDA Free/Pro. I roll with IDA Pro, but Ghidra is fine too.
Once you load WA in your disassembler, you will see thousands of functions, most of them will be named something like sub_401530, sub_401550, sub_401560, sub_4015A0, sub_4015F0... where is our "create explosion"? You need to find it (given it exists and our assumption was correct).
Think of an explosion in WA. What exactly happens when stuff explodes? You see a flash, hear a bang, a hole is created in the land, worms lose hp if hit, worms are pushed away from the explosion, worms change their animation from standing to flying/hurt, worms emit blood (if set in scheme), oil barrells explode and create fire, debris in background is pushed away from the explosion... you get the idea.
If we don't know where the "create explosion" function is, maybe we can find a function that is somewhat related to creating explosion? After all, there should be some connection between creating an explosion and making a hole in the land, right?
Now, do we know any functions that implement those side effects? No, we don't know any function names and there are thousands of functions in the game. This seems impossible.
Let's analyze the side effects - some of them seem more complex than others. For example, making a hole in the ground seems more difficult than playing an explosion sound. What's seemingly the easiest side effect? I think it's damaging the worm - specifically, reducing it's hp. Let's find a function that reduces worm's HP.
Start the game in single player mode, make a playground scheme - place only one worm on the map, give yourself all ammo, infinite turn time. Launch Cheat Engine and scan for a dword "100", as your worm currently as 100 hp. You should have thousands of matches. Damage your worm a little, do a further scan for your worm's current hp. Repeat this until you have only one or very few matches. Add the address to the list and modify the value to 9999 and try damaging the worm again. If done correctly, your worm should have a lot of hp. Congrats, you found the variable that holds your current worm's HP.
Now, how to find the function that actually damages your worm? You need to check what accesses this variable. In cheat engine, select this variable and activate a memory breakpoint on write, (aka see what writes to this address). Continue damaging the worm, you will see that some addresses will appear, along with the number of accesses to the variable. You will probably see one ore two functions - copy their addresses. Go to IDA/Ghidra and go to this address. It probably does not exist, because of ASLR changing the base address of WA process. You can rebase the function address manually, but in general, you will need to disable ASLR in WA.exe for convenient debugging - https://osandamalith.com/2018/10/24/pe-sec-info-a-simple-tool-to-manipulate-aslr-and-dep-flags/
Now take a look at the code in IDA/Ghidra, does it look like something that writes the worm's HP? Look at the xref's to this function (aka functions that call this function). Probably one of them will be the one that creates an explosion. You can also look for other functions, like the one that plays sounds.
Once you identify your "create explosion" function, you will need to hook using minhook or polyhook or any other hooking library (you need to know function address or bettr, find address by function signature) and make a wrapper call that will roughly look like this:
int create_explosion_hooked(int x, int y, int power) {
return create_explosion_original(x, y, power*10);
}
Make a shared library with cmake and msvc toolchain, compile it and load in the game, voila
Sorry, i've run out of time writing this guide. That's the basic idea. Check out my modules and the discord links - i've posted over 4000 function addresses, so you don't have to find them yourself, cheers.
Quote from: nizikawa on January 14, 2025, 01:18 PMQuote from: rUNaW4y on January 14, 2025, 07:56 AM"If you can't explain it simply, you don't understand it well enough."stfu, JSG is right.
― Albert Einstein
― nizikawa
and for anyone interested in actual wormkit development, I suggest checking out those two posts on WA discord channel:
https://discord.com/channels/416225356706480128/691342271861358592/1327161154908323884
https://discord.com/channels/416225356706480128/691342271861358592/1327681546437529641
Quote from: nizikawa on January 14, 2025, 03:42 PMHere's the glimpse of it:
First think of a simple idea you would like to implement. For example, let's make all explosions 10 times more powerful.
Ok, let's use Wormkit API to make explosions 10 times bigger. Haha, there is no wormkit API. All wormkit does is in fact loading your DLL in the game, that's all. Everything else needs to be done by you, starting from dllmain, and I really mean it. You need to carefully patch the game's code in memory in order to change its behavior in a desired way.
Try to guess how the explosions are created in the game. You can see, that the game is able to create both small and big explosions, so they probably have some "power" parameter. The explosion can be placed anywhere on the map, usually where a weapon, mine or worm explodes, so there must be a way to specify XY coordinates of the explosion. This tells us, that there is some hypotethical function "create explosion" that accepts at least "x, y, power" parameters.
With this in mind, can you think of the simplest way to make the explosions 10 times more powerful? How about modifying the "create explosion" function in a way that will multiply the
"power" parameter by 10 whenever it's called? Sounds easy.
Now, we need to find this "create explosion" function. For this to work, we need to analyze WA's code. You need a disassembler (and to make things easier, decompiler) - your two main options are Ghidra and IDA Free/Pro. I roll with IDA Pro, but Ghidra is fine too.
Once you load WA in your disassembler, you will see thousands of functions, most of them will be named something like sub_401530, sub_401550, sub_401560, sub_4015A0, sub_4015F0... where is our "create explosion"? You need to find it (given it exists and our assumption was correct).
Think of an explosion in WA. What exactly happens when stuff explodes? You see a flash, hear a bang, a hole is created in the land, worms lose hp if hit, worms are pushed away from the explosion, worms change their animation from standing to flying/hurt, worms emit blood (if set in scheme), oil barrells explode and create fire, debris in background is pushed away from the explosion... you get the idea.
If we don't know where the "create explosion" function is, maybe we can find a function that is somewhat related to creating explosion? After all, there should be some connection between creating an explosion and making a hole in the land, right?
Now, do we know any functions that implement those side effects? No, we don't know any function names and there are thousands of functions in the game. This seems impossible.
Let's analyze the side effects - some of them seem more complex than others. For example, making a hole in the ground seems more difficult than playing an explosion sound. What's seemingly the easiest side effect? I think it's damaging the worm - specifically, reducing it's hp. Let's find a function that reduces worm's HP.
Start the game in single player mode, make a playground scheme - place only one worm on the map, give yourself all ammo, infinite turn time. Launch Cheat Engine and scan for a dword "100", as your worm currently as 100 hp. You should have thousands of matches. Damage your worm a little, do a further scan for your worm's current hp. Repeat this until you have only one or very few matches. Add the address to the list and modify the value to 9999 and try damaging the worm again. If done correctly, your worm should have a lot of hp. Congrats, you found the variable that holds your current worm's HP.
Now, how to find the function that actually damages your worm? You need to check what accesses this variable. In cheat engine, select this variable and activate a memory breakpoint on write, (aka see what writes to this address). Continue damaging the worm, you will see that some addresses will appear, along with the number of accesses to the variable. You will probably see one ore two functions - copy their addresses. Go to IDA/Ghidra and go to this address. It probably does not exist, because of ASLR changing the base address of WA process. You can rebase the function address manually, but in general, you will need to disable ASLR in WA.exe for convenient debugging - https://osandamalith.com/2018/10/24/pe-sec-info-a-simple-tool-to-manipulate-aslr-and-dep-flags/
Now take a look at the code in IDA/Ghidra, does it look like something that writes the worm's HP? Look at the xref's to this function (aka functions that call this function). Probably one of them will be the one that creates an explosion. You can also look for other functions, like the one that plays sounds.
Once you identify your "create explosion" function, you will need to hook using minhook or polyhook or any other hooking library (you need to know function address or bettr, find address by function signature) and make a wrapper call that will roughly look like this:
int create_explosion_hooked(int x, int y, int power) {
return create_explosion_original(x, y, power*10);
}
Make a shared library with cmake and msvc toolchain, compile it and load in the game, voila
Sorry, i've run out of time writing this guide. That's the basic idea. Check out my modules and the discord links - i've posted over 4000 function addresses, so you don't have to find them yourself, cheers.
Quote from: jsgnextortex on January 14, 2025, 02:48 AMWormkit module development is not something thats accesible enough to fit a tutorial right now, if one were to make one, it would be more about reverse engineering than anything else.....needless to say, reverse engineering is not the most intuitive of the fields to the average joe and is not usually something people look tutorials for (the kind of people thats into reverse engineering usually is not the kind that follows tutorials as a way of learning).
In conclusion, the reason why, after all these years, noone bothered to make a tutorial for it is because:
- Theres no single standard way of making a wormkit module. Everyone has their own way of working, hooking, building and handling the modules.
- The process is too complex to boil down into a tutorial accesible enough to those that seek tutorials. If done, it would either be felt "half assed and doesnt explain enough" or "too complicated" by tutorial watchers.
- The demand for such a thing is simply not there. Nowadays people scream just by seeing C++ code, I dont want to imagine their faces when they see assembly code (because, yes, you need to know some assembly to make modules).
Quote from: Kradie on December 30, 2024, 02:03 PMQuote from: TheKomodo on December 30, 2024, 02:02 PMIf Sensei is stepping down at first point in KO, shouldn't replace him with runaway?(Who was next in line).I pm'ed them, asking if they want to step in.