 |
Cheat Engine The Official Site of Cheat Engine
|
| View previous topic :: View next topic |
| Author |
Message |
Neuffexx How do I cheat?
Reputation: 0
Joined: 05 Nov 2025 Posts: 3
|
Posted: Wed Nov 05, 2025 2:34 pm Post subject: RPGM VX Ace Infinite Items Via Auto Assemble |
|
|
Just recently picked up CE for a small game.
Had no problem finding and manipulating Character Stats once I knew you had to search for them via operation (number*2+1).
And I can even directly find and manipulate inventory items this way.
However, trying to do anything along the lines of scrpting the items to not decrease when used has me stumped.
Found the value of several items, checked to see what accessed them (as nothing was writing to these addresses ever) when I use the items, which were 3 instructions, but only 1 showing up on actual use.
I confirmed that edi is in fact the address of the item I was using and that eax is the new decremented value.
I assumed that it would be as simple as template injecting: | Code: |
[ENABLE]
...
newmem:
// Max value based on what game allows
//i.e. x99 = 199, by taking original value 99 *2+1
mov eax,199
originalcode:
mov [edi+08],eax
pop edi
pop esi
exit:
jmp returnhere
"RGSS301.dll"+887F0:
jmp newmem
returnhere:
[DISABLE]
...
| in order to change the value back to max before it could be assigned a lower value, therefore always staying at max when using an item.
Bit all that running this script does is cause some crash with an error message:
| Code: | Script 'Scene_ItemBase' line 118: NoMethodError occured.
undefined method `item_test` for nil:NilClass |
Im brand new to this, so maybe im just messing up the assembly instructions or I dont understand if the actual way the game handles the items doesnt allow me to do it this way, any ideas / help would be much appreciated!
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4711
|
Posted: Wed Nov 05, 2025 5:09 pm Post subject: |
|
|
It's probably interpreted. Modifying assembly instructions is a bad idea- that changes the interpreter, not the game.
Right click that instruction in the disassembler, select "Find out what addresses this instruction accesses", and play the game for a bit (if you can). Tons of addresses should appear.
Change the bytecode being executed by the interpreter instead. If you don't know what format the bytecode is in, that'll be difficult to reverse engineer from CE. Try a decompiler instead.
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
Neuffexx How do I cheat?
Reputation: 0
Joined: 05 Nov 2025 Posts: 3
|
Posted: Fri Nov 07, 2025 10:16 am Post subject: |
|
|
| ParkourPenguin wrote: | | It's probably interpreted. Modifying assembly instructions is a bad idea- that changes the interpreter, not the game ... |
Could you elaborate a bit more on what you mean by interpreted?
And why would modifying assembly instructions then be considered a bad idea vs if it wasnt interpreted?
Like I said im new to this, so trying to understand.
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4711
|
Posted: Fri Nov 07, 2025 2:20 pm Post subject: |
|
|
I'm referring to how the code that the programmer wrote gets executed by your computer. For the most part, there's 3 ways this can happen.
Static compilation is as straightforward as it gets. A compiler transforms code written in some higher-level programming language into machine code (aka assembly) that the computer can run. The problem with this is that a program that was compiled to work on one type of computer usually won't work if you try to run it on another type of computer. This leads to several different builds of an application for each platform it supports- e.g. many applications have separate builds for windows, mac, and linux.
An interpreter tries to solve that issue of platform-dependent builds. Source code written by the programmer is now compiled to an intermediate representation (IR). This IR is designed to be run on any computer via an interpreter. The interpreter is a program that is statically compiled and will execute that IR for the local machine. The problem with this is that there's a lot of overhead: the interpreter must read the IR and translate it to some native machine code operation every single time the code is executed.
Just-In-Time (JIT) compilation tries to solve that issue. Source code gets compiled to IR the same way, but at runtime, the IR doesn't get interpreted: it gets compiled to native machine code. Initially, this has a larger cost than interpretation, but it ends up being significantly faster in the long run since IR code only needs to be compiled once to machine code.
With regards to Cheat Engine, when you find a value and look at what instructions access it, you're hoping to find that the game was either statically compiled or JIT compiled. In those cases, changing such instructions is analogous to changing the source code that the programmer wrote. e.g. changing a `sub` instruction that decreases your money after you buy something to an `add` instruction will increase your money every time you buy something.
If the game was interpreted, however, changing such instructions now changes the way the interpreter executes the code: e.g. changing a `sub` to an `add` could change every subtract operation in the game to an add operation. Obviously, this will have unintended side effects, likely crashing the game.
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
Neuffexx How do I cheat?
Reputation: 0
Joined: 05 Nov 2025 Posts: 3
|
Posted: Thu Nov 13, 2025 3:32 am Post subject: |
|
|
| ParkourPenguin wrote: | | I'm referring to how the code that the programmer wrote gets executed by your computer. For the most part, there's 3 ways this can happen. | Very interesting, that makes a lot of sense, had not considered that at all.
I see now why it remained the same, irrelevant of what item I was using, rather than simply being the same 'function' call that I initially thought I was seeing.
| ParkourPenguin wrote: | | ... that'll be difficult to reverse engineer from CE. Try a decompiler instead.. | Im honestly a little at a loss when it comes to this, though I will try it anyways.
But I am more so curious as to how I could use a decompiler for this, I understand in concept that its the reverse process of what a compiler does.
However, I cant really see how it can tie into using CE for an actively running excecutable. As in my mind it would simply be a code file id get out of it, not affect the application directly.
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|