Help Learning AoB
-migrated-
Help Learning AoB Posted on: 04/06/2011 9:00pm
Quote Post
Hey I want to learn how to find AoB s and stuff but on the tutorials they just teach u how to change them not find them. I don't know anything about C++ software (so sad). Can anyone please teach me how to find a AoB? I already know you have to get the .SWF file to do it and I already know how to do that.
Re: Help Learning AoB Posted on: 04/07/2011 11:40am
Quote Post
Finding them? Common sense.

I gave a short explanation of it in this thread. Most of what we (or just me, dunno about other people) do is think "how does the game behave, and how do I want to change it." Let's say that in the 10th level of a theoretical game, a giant invincible monster appears and eats you. That's totally not cool; let's make the monster never appear.

How would you go about to do this? Well, the monster's appearance is directly tied to the level you're currently in. So we're gonna search for what handles levels and see where the monster is created. But how are we going to find the level handler? Search all files for things like "level" (speaking about the case when the game's code is vanilla; no encryption or obfuscation.)

Let's assume you've found the level handler, and in it you see this horrid line:
Code: [Select]
if (level == 10) {
    spawnEvilMonster()
}
So not cool. Enraged, we go to the Raw Data, and do a search there for spawnEvilMonster. We might find something like this:
Code: [Select]
//66 04 0a
_as3_getproperty level
//24 a0
_as3_pushbyte 10
//14 01 00 00
_as3_ifne offset: 1
//4f 6d 00
_as3_callpropvoid spawnEvilMonster(param count:0)

There are several ways to fix such a monster. One is to compare the current level to a level that doesn't exist (like -7), another way is to make the if statement jump over the code instead of ever checking a condition, and yet another way is to change the function call to a NOP (No Operation.) There are probably other ways that I forgot.
Remember, we only want to match a specific part of the code, so we're going to include all its element (both the if statement and the function call.) So so far, what we've got is the initial array:
66 04 0a 24 a0 14 01 00 00 46 6d 00
Now, every options we have from now on is properly explained in the tutorials, so I'm only gonna show you the resulting arrays.

Option 1: Change level requirement
66 04 0a 24 a0 14 01 00 00 46 6d 00 =>
66 04 0a 24 f9 14 01 00 00 46 6d 00
(trust me, f9 is -7)

Option 2: Skip if statement
66 04 0a 24 a0 14 01 00 00 46 6d 00 =>
66 04 0a 24 a0 10 01 00 00 46 6d 00

Option 3: No function
66 04 0a 24 a0 14 01 00 00 46 6d 00 =>
66 04 0a 24 a0 14 01 00 00 02 02 02

Hope this helped, and feel free to ask any further questions.
Re: Help Learning AoB Posted on: 04/10/2011 7:04pm
Quote Post
how do you know which part to change?
Re: Help Learning AoB Posted on: 04/10/2011 7:27pm
Quote Post
Well, I looked at the opcodes, and I figured out what does what. For any solution I showed you here there's a tutorial section.
Besides, if you see the line "level == 10" and then in the raw code "pushbyte 10", what else can it do besides "making" the value 10?
And if you after this see "spawnEvilMonster()", and in the raw code something odd like "callpropvoid spawnEvilMonster", then it's only reasonable to assume it calls spawnEvilMonster.
Re: Help Learning AoB Posted on: 04/10/2011 10:28pm
Quote Post
So I'm trying this meathod out for this game called You Might get Nervous http://www.kongregate.com/games/lubossk/you-might-get-nervous and I want to make it so that it's stuck only on the first task so I don't have to do anything else. I searched for the key word addAction but then I'm stuck. Am I doing the right thing in the first place? If so what do I do next? If not what can I change?
Thanks