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 


Need help finding movement speed of Obscure main characters

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> General Gamehacking
View previous topic :: View next topic  
Author Message
Koblasco
How do I cheat?
Reputation: 0

Joined: 04 Oct 2020
Posts: 6

PostPosted: Sun Oct 04, 2020 11:30 am    Post subject: Need help finding movement speed of Obscure main characters Reply with quote

Hi everyone, I'm super new with Cheat Engine so I hope someone can help me out here.

Recently I fell in love with Obscure, a ps2 survival horror game that homages early Resident Evil and Silent Hill titles.
The unique twist is that it's not singleplayer but 2 player local coop!
There's 5 different characters each with their unique attributes and, most importantly, different movement speeds.
As you can expect I got curious and wanted to find out how fast exactly each character was so I downloaded Cheat Engine for the first time and here I am.
Unfortunately, it seems what I'm looking for is a bit more complicated than expected.

While I've been able to scan other simple values (like player and enemy health, weapons/attacks damage etc.), I couldn't scan any values for speed at all.

I managed to find the playable characters structures or whatsitcalled but I couldn't find anything related to speed or coordinates specifically, there were some 4-byte addresses that kept count of what animation you were currently in (idle, walking, running etc.) or what direction you were moving in (up, down, left, right) but that's about it.
One of the characters (Kenny) can even sprint so I thought that could narrow things down but alas, no such luck. Sad

Now to be honest, since I'm new to this forum, I don't know if my post was too long or if I should keep going instead.
For now I'll just stop here and wait instructions so we can hopefully figure this out.
Back to top
View user's profile Send private message
sgsgwv$6263
Advanced Cheater
Reputation: 0

Joined: 05 Aug 2020
Posts: 75

PostPosted: Sun Oct 04, 2020 12:00 pm    Post subject: Reply with quote

make your character stand still.
do unknow value search in float.
now make the character jump.
just when the character is in the air and still going up,pause the game and go to cheat engine ,refine your search values with increased value and go back in the game and when the character is going down but is still in air pause the game and go to CE and do a decreased value.You get the idea.Now go on like this till you have a handful of addresses in float.The addresses should not have values with exponential(to take care of that check the simple values option on the top right side of CE).
So basically you are trying to find the Z vector of your character.
Now with the refined addresses that you got just take them down to your cheat table and experiment with them like lock them up and then try to jump,if the game shows that the character's jump is not smooth that is if its not like a regular jump,find that address in the cheat table that is causing that irregular jump when locked and that should be your z vector or upward speed.
The other speeds like x,y speeds should be on consecutive locations,in some games the order is first x,then y and then z.In some other games it could be x,z,y.
Coming to coords,if you have got the speed values,you will have more freedom in finding the coords values.
Although one approach for finding coords values is find a line in your game's plane and then try to go forward in that line and search for increased value and go back and search for decreased values,if this approach didnt get you the coord addresses then reverse the assumption i.e go forward and search for decreased values and go backward and search for increased values....you get the idea.
After doing all these searches ,its important to experiment with them with utmost care coz 1 messed up value can crash your game and you will have to start again.


Last edited by sgsgwv$6263 on Sun Oct 04, 2020 12:24 pm; edited 1 time in total
Back to top
View user's profile Send private message
Koblasco
How do I cheat?
Reputation: 0

Joined: 04 Oct 2020
Posts: 6

PostPosted: Sun Oct 04, 2020 12:23 pm    Post subject: Reply with quote

Oxywile wrote:
make your character stand still.
do unknow value search in float.
now make the character jump.
just when the character is in the air and still going up,pause the game and go to cheat engine ,refine your search values with increased value and go back in the game and when the character is going down but is still in air pause the game and go to CE and do a decreased value.You get the idea.Now go on like this till you have a handful of addresses in float.The addresses should not have values with exponential(to take care of that check the simple values option on the top right side of CE).
So basically you are trying to find the Z vector of your character.
Now with the refined addresses that you got just take them down to your cheat table and experiment with them like lock them up and then try to jump,if the game shows that the character's jump is not smooth that is if its not like a regular jump,find that address in the cheat table that is causing that irregular jump when locked and that should be your z vector or upward speed.
The other speeds like x,y speeds should be on consecutive locations,in some games the order is first x,then y and then z.In some other games it could be x,z,y.
Coming to coords,if you have got the speed values,you will have more freedom in finding the coords values.
Although one approach for finding coords values is find a line in your game's plane and then try to go forward in that line and search for increased value and go back and search for decreased values,if this approach didnt get you the coord addresses then reverse the assumption i.e go forward and search for decreased values and go backward and search for increased values....you get the idea.
After doing all these searches ,its important to experiment with them with utmost care coz 1 fucked up value can crash your game and you will have to start again.


Ah, of course! Now I feel dumb for not thinking about such a simple solution.
I booted the game up and walked down (since the game is fixed camera) doing decreased values scans and immediately found the y coordinate.
Thanks a lot for the help! I think everything should go smoothly from here. Very Happy

Edit: The X coordinate address is literally above it too, awesome!

Edit 2: Nevermind, still no speed value Sad
The only value related to speed that I found was one that only reaches 1 (or -1 in the opposite direction) when you are moving in a straight line.
So for example, for the x speed, if I move up and right the value is 0.7 but I just move to the right it's 1, it doesn't matter if I'm walking, running or sprinting.

If I modify the value (I tried 2), when I move it pushes me in a specific direction (right in this case) regardless of where I'm headed and speed is double the original speed.

I'm not sure why it's so complicated to find the speed value, maybe it is not a float in this game?
Back to top
View user's profile Send private message
DanyDollaro
Master Cheater
Reputation: 3

Joined: 01 Aug 2019
Posts: 334

PostPosted: Mon Oct 05, 2020 6:42 am    Post subject: Reply with quote

By analyzing the assembly code that acts on the coordinates you should find an inrent value to the player's speed, but this method could be complex.

You could generate dumps of the players' data structures starting from their base address, if you find the player's life and discover any code that uses that variable be sure to remove the offset, after obtaining the dumps compare them and see what you discover, the speed values can be stored as: floats, doubles or more rarely int.
In addition, be sure to check if there are any pointers in their data structures, if the program is 32-Bit put a (hardware) breakpoint every 4 bytes, and from the type of code that accesses it you can know if it is used as a pointer, for example this:
Code:
...
lea eax, [0x00400000]
mov [eax], ecx
...

Obviously if the program is 64-bit put one every 8-Byte (the pointers may be inherent to other structures or values regarding some player characteristics).
In addition I tell you that the first value of the data structure could be a pointer to a VTABLE, you could exclude it (but it could be interesting).
Back to top
View user's profile Send private message
Koblasco
How do I cheat?
Reputation: 0

Joined: 04 Oct 2020
Posts: 6

PostPosted: Mon Oct 05, 2020 4:13 pm    Post subject: Reply with quote

DanyDollaro wrote:
By analyzing the assembly code that acts on the coordinates you should find an inrent value to the player's speed, but this method could be complex.

You could generate dumps of the players' data structures starting from their base address, if you find the player's life and discover any code that uses that variable be sure to remove the offset, after obtaining the dumps compare them and see what you discover, the speed values can be stored as: floats, doubles or more rarely int.
In addition, be sure to check if there are any pointers in their data structures, if the program is 32-Bit put a (hardware) breakpoint every 4 bytes, and from the type of code that accesses it you can know if it is used as a pointer, for example this:
Code:
...
lea eax, [0x00400000]
mov [eax], ecx
...

Obviously if the program is 64-bit put one every 8-Byte (the pointers may be inherent to other structures or values regarding some player characteristics).
In addition I tell you that the first value of the data structure could be a pointer to a VTABLE, you could exclude it (but it could be interesting).


Oh man I hoped it wouldn't get this complicated since I'm still trying to learn the ropes with Cheat Engine.
Tbh I'm not even fully sure I comprehend what you're saying.

I'm really stuck rn.
I've compared the characters structure and examined every value.
I found literally everything (coordinates, direction, health, animation and model modifiers, ability cooldowns, damage values) except speed.

It really works in a weird and inconsistent way in this game.
It seems that each single animation has it's own unique and arbitrary speed assigned to it.
For example the character with the slowest running speed has the fastest walking speed.
The second fastest character is the slowest while aiming a gun.

When characters get below 40% of their max HP, they run slower so I expected something simple like a fixed 20% speed penalty or something but NOPE it's completely inconsistent.
The second fastest character now becomes again the slowest of the group when running while injured.

I'm starting to think this is unfortunately way above my league atm.
I guess I'll stick to damage values for this game unless I figure something out.
Back to top
View user's profile Send private message
Koblasco
How do I cheat?
Reputation: 0

Joined: 04 Oct 2020
Posts: 6

PostPosted: Mon May 31, 2021 5:43 am    Post subject: Reply with quote

SOLVED!

After finding the character X coordinate address, I did a memory scan and changed "display type" to float.
After moving around, it became evident there was one address related to movement and that's how I finally found the speed address.

The reason it was tricky to find is that animations don't have a static speed value but it changes throughout the various keyframes of walk/run cycles so I always overlooked it.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> General Gamehacking 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