Slejur Newbie cheater Reputation: 0
Joined: 08 May 2010 Posts: 11
|
Posted: Fri Jul 30, 2010 1:35 pm Post subject: Help with the game Anno 1404 |
|
|
Hi everyone!
I wonder if someone can help me with the game Anno 1404.
I have tried the cheats which Recifense has created for Anno 1404 v1.00.1762
But it doesn't work for me, the game just crash. I am using Anno 1404 v1.02.2619
I am mostly interested in "unlimited" cargo in a warehouse/warehouses.
I have succeeded to give all warehouses unlimited cargo, including my enemies' (the AI:s). Which is not really what I had in mind.
So I try to modify Recifense's warehouse cheat, to work on my version of Anno 1404.
But my "cheating" skills is unfortunately lacking, so maybe you could give me some hints/solution to solve my problems.
Code from Recifense's cheat table "Anno 1404 - Version 1.00.1762 (GM and More)"
Anno4.exe+344715:
jmp _MonWareHouse
_BackMW:
...
...
...
//=========================================
// ESI = pStoreHouse
// ECX = pStoreItem
_MonWareHouse:
push ebx
cmp dword ptr [iEnableMW],0
je _ExitMW // Jump if feature is disabled
or esi,esi
je _ExitMW // Jump if invalid pointer
or ecx,ecx
je _ExitMW // Jump if invalid pointer
cmp dword ptr [esi+00000324],0 // Player´s Warehouse?
jne _ExitMW // Jump if false
mov ebx,[esi+08] // Get default capacity
mov [ecx+14],ebx // Update item qtty.
_ExitMW:
pop ebx
cmp byte ptr [esp+14],00 // Original code
jmp _BackMW // Back to main code
...
...
...
Anno4.exe+344715:
cmp byte ptr [esp+14],00
End code
My first question is:
or esi,esi
je _ExitMW // Jump if invalid pointer
or ecx,ecx
je _ExitMW // Jump if invalid pointer
why is this needed? Is it to check if esi/ecx is pointing at "null" or nothing = hex 0?
my second question is:
cmp dword ptr [esi+00000324],0 // Player´s Warehouse?
How do I find the new address/offset ([esi+new offset]) for the player?
In the newer version of Anno 1404, the address ([esi+00000324]) holds nothing of interests, when I am expecting the value 0.
My method which I believe is the right way, to find out what address (esi) holds, is to do this:
In the game I transfer wood between a warehouse and a ship, until a find the address which holds the wood value for that warehouse. Then in CE 5.6, I do a "Find out what writes to this address". Then I do a last transfer, and pause the game. In CE again, I can see what value esi holds and I create a new pointer with the address, esi, set the offset to 0x324 and change the type to byte. But unfortunately the pointer holds rubbish.
Is my method to find out what address esi holds wrong? Or are there other ways to find out what esi is?
My second attempt is to go to Anno4.exe+344715 using the "Memory View" in CE. The only thing I found around that area is a lot of "nop", which is not helping me much. But then in Module mode when the Memory View should show Anno4.exe+XXXXXX, it showed all kind of [blabla].dll+XXXXXX. So I simply add Anno4.exe value which I get from CE with 0x344715 and manually move to the area. Maybe its the wrong way of doing it.
My third attempt is to find the assembly code "cmp byte ptr [esp+14],00" in Memory View. I got a lot of hits, but I found 4 which I believed is the right place to search. Because it had the name "StorageAndWarehouse.dll+XXXXXX" or something like that. But no luck, so I am out of idea.
Any help is appreciated!
And sorry for my bad english, not my native language.
|
|