Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Serious Sam 3 -- Pointer Scanning Seemed OK, but I Failed

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine
View previous topic :: View next topic  
Author Message
coffeeAchiever
Newbie cheater
Reputation: 0

Joined: 27 Dec 2014
Posts: 22

PostPosted: Sun Dec 04, 2016 6:06 pm    Post subject: Serious Sam 3 -- Pointer Scanning Seemed OK, but I Failed Reply with quote

Did a pointer scan on Serious Sam 3 health. Narrowed it down to 4 pointer addresses, and I couldn't distinguish between them:

"Sam3.exe"+00BF4578 (+440, +48, +70)
"Sam3.exe"+00BF4578 (+440, +48, +A8)
"Sam3.exe"+00BF4578 (+440, +48, +78)
"Sam3.exe"+00BF4578 (+440, +48, +B0)

They worked, at first. When I held them constant by checking Active, my health was pegged. However, eventually, the game always crashed. Once Windows actually gave an out of memory error. I think I also noticed that explosive damage would knock my health down. Or else, at some point, my health would begin to go down.

They definitely are "green addresses" -- I rebooted my computer, and they still worked for awhile. But they always eventually failed. Did a Google search and I found this thread:

[url]http://forum.cheatengine.org/viewtopic.php?p=5304985&sid=0b6895bde7f840540b4038fd7f14a2d7[/url]

I downloaded user Prismo's table, and found this for health in his CE table:

"Sam3.exe"+00BFDC58 ( +440, +14, +20, +0, +A8)

I played the game for awhile using his table, and it worked as it should. So now I'm wondering what happened and how I can do pointer scans better in the future.

When I find myself in the situation where my pointer doesn't work, is the answer to bump up Max Level / Max Offset?

What does this notation mean, exactly? Is it:

1. Start at address "Sam3.exe"+00BFDC58
2. Look at the 4 byte value held by addr1 = "Sam3.exe"+00BFDC58 + 440 and interpret it as an address
3. Look at the 4 byte value held by addr2 = x1 + 14 and interpret it as an address
4. Look at the 4 byte value held by addr3 = x2 + 20 and interpret it as an address.
5. Look at the 4 byte value held by addr4 = x3 + 0 and interpret it as an address.
6. Look at the 4 byte value held by addr5 = x4 + A8 and interpret it as an address.
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 222

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Sun Dec 04, 2016 6:24 pm    Post subject: Reply with quote

Just to let you know, pointer added to addresslist has:
- base address at the bottom
- first offset is above base address
- last offset at the top (below "pointer" checkbox)



Quote:
I downloaded user Prismo's table, and found this for health in his CE table:

"Sam3.exe"+00BFDC58 ( +440, +14, +20, +0, +A8)

You should wrote:
"Sam3.exe"+00BFDC58 (+a8, +0, +20, +14, +440)

or like this:
[[[[[Sam3.exe+00BFDC58]+a8]+0]+20]+14]+440

The second format is better because CE understands this notation too:
e.g. local currentHP = readInteger("[[[[[Sam3.exe+00BFDC58]+a8]+0]+20]+14]+440")


About pointer stability. Are you doing proper rescans?
I meant:
- second rescan is made on files from first rescan,
- third rescan is made on files from second rescan,
...
- 7th rescan is made on files from 6th rescan,
...


A good practice is to save each rescan inside a seperate folder, use a nice name for those folders, e.g. "SAM3HP res 01", "SAM3HP res 02", "SAM3HP res 03", ....., "SAM3HP res 05". That way you won't make a mistake.
After a rescan, remove all older rescans expect last three or four. (you can skip this if you have many HDD space)


- many rescans, and I really meant: many!
- game restarts are OK, but even better are OS restarts. After few rescans, make another rescan after OS reboot
- run the game on other game profile (if game allows it), make at least one rescan
- even better, launch the same game version on another PC. Install CE on that PC and copy folder with PTR files from recent rescan from your "first" PC, at least one rescan.




If you don't have another PC. There's a nice feature which can help you a lot. Ask a friend, which has the same game version, to find HP address and add it to the list (it would be better if HP is the only entry in the list), right click it and select "generate pointermap", save it as "SAM3HP pointermap1 friendname". Then after OS reboot, do the same thing, but this time save it as "SAM3HP pointermap2 friendname". Compress those four files (pointermap is two files ".scandata" and ".scandata.addresslist" ) and send it to you. You can use it while doing another rescan.




Quote:
What does this notation mean, exactly? Is it

addr1 = read dword at "Sam3.exe+00BFDC58"
addr2 = read dword at "addr1 + a8"
addr3 = read dword at "addr2 + 0"
addr4 = read dword at "addr3 + 20"
addr5 = read dword at "addr4 + 14"
value = read integer value at "addr5 + 440"

_________________
Back to top
View user's profile Send private message MSN Messenger
coffeeAchiever
Newbie cheater
Reputation: 0

Joined: 27 Dec 2014
Posts: 22

PostPosted: Sun Dec 04, 2016 11:16 pm    Post subject: Reply with quote

mgr.inz.Player wrote:
Just to let you know, pointer added to addresslist has:
- base address at the bottom
- first offset is above base address
- last offset at the top (below "pointer" checkbox)

...

or like this:
[[[[[Sam3.exe+00BFDC58]+a8]+0]+20]+14]+440

The second format is better because CE understands this notation too:
e.g. local currentHP = readInteger("[[[[[Sam3.exe+00BFDC58]+a8]+0]+20]+14]+440")


Understood 100%. Good information to know. Thanks!

mgr.inz.Player wrote:

About pointer stability. Are you doing proper rescans?
I meant:
- second rescan is made on files from first rescan,
- third rescan is made on files from second rescan,
...
- 7th rescan is made on files from 6th rescan,


Yeah, the workflow is:

1. Find the (non-pointer) address.
2. Do a pointer scan on that address. I used max depth of 3 and max offset of 5000.
[process a]
3. Play the game a bit. Maybe start a different level. Start a few windows programs. Kill a few windows programs. In other words, shuffle system memory allocation around.
4. Rescan memory for the same address
5. If the number of returned pointers doesn't change much, go to step 6, otherwise, go to step 3.
[process b]
6. shut down the game. Shut down Steam. Maybe restart the OS. Restart the game.
7. Find the (non-pointer) address.
8. Rescan memory for the new address.

Basically, do processes a and b a few times till I narrow down the number of pointers as much as possible. For Serious Sam, I couldn't narrow it down below 4 pointers.

I know exactly what you mean by "7th rescan is made on files from 6th rescan". I name my files 01, 02, 03, 04, ... and for Serious Sam,it went down pretty quickly:

1: 188,887 pointers
2: 82,538 pointers
3: 66,524 pointers
4: 984 pointers
5: 954 pointers
6:589 pointers
...
12: 8 pointers
13: 4 pointers

mgr.inz.Player wrote:

A good practice is to save each rescan inside a seperate folder, use a nice name for those folders, e.g. "SAM3HP res 01", "SAM3HP res 02", "SAM3HP res 03", ....., "SAM3HP res 05". That way you won't make a mistake.
After a rescan, remove all older rescans expect last three or four. (you can skip this if you have many HDD space)


- many rescans, and I really meant: many!
- game restarts are OK, but even better are OS restarts. After few rescans, make another rescan after OS reboot
- run the game on other game profile (if game allows it), make at least one rescan
- even better, launch the same game version on another PC. Install CE on that PC and copy folder with PTR files from recent rescan from your "first" PC, at least one rescan.


Oohhh... I knew it was possible to use a 2nd PC but I didn't know how. OK, I understand now. Copy my scan files over. Duh. I should've been able to guess that.


mgr.inz.Player wrote:

If you don't have another PC. There's a nice feature which can help you a lot. Ask a friend, which has the same game version, to find HP address and add it to the list (it would be better if HP is the only entry in the list), right click it and select "generate pointermap", save it as "SAM3HP pointermap1 friendname". Then after OS reboot, do the same thing, but this time save it as "SAM3HP pointermap2 friendname". Compress those four files (pointermap is two files ".scandata" and ".scandata.addresslist" ) and send it to you. You can use it while doing another rescan.


Damn, that's good info. I have my wife's computer, but this is a good thing to keep in mind.

Still, I'm curious why we got different results. When someone gets a pointer that appears to work but has "issues" like it eventually crashes the game, is increasing the depth / level standard procedure?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 222

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Mon Dec 05, 2016 12:14 am    Post subject: Reply with quote

Probably Prismo made more rescans. And narrowed it to ZERO.

And then used max level 5.

_________________
Back to top
View user's profile Send private message MSN Messenger
coffeeAchiever
Newbie cheater
Reputation: 0

Joined: 27 Dec 2014
Posts: 22

PostPosted: Mon Dec 05, 2016 8:50 am    Post subject: Reply with quote

mgr.inz.Player wrote:
Probably Prismo made more rescans. And narrowed it to ZERO.

And then used max level 5.


I'm still new to pointer scans.

When one approaches a game for the first time, what depth level do you use "by default"? 5?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 222

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Mon Dec 05, 2016 12:59 pm    Post subject: Reply with quote

I usually do few pointermaps.





Then OS reset. Create second pointermap, Then OS reset, third pointermap, ...

All those pointermaps can be used for "rescan while scanning".
I recommend using "first element of ......" feature.





If you do not want to run game process anymore, you can just use only pointermaps. All needed information is inside pointermap, whatever pointermap you choose. Other pointermaps can be used for "rescan while scanning".
But "first element of ......" feature is not available.




You should get less "garbage". Then you can continue doing rescans the usual way or by using other pointermaps.


About the best "max level" and "max offset". We have to guess. Try it. Then guess again. Try it. Guess, try, ...

_________________
Back to top
View user's profile Send private message MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites