[COMPLETED] Mastema: Out of Hell

Apr 28, 2017
31
0
6
#1
Game: Mastema: Out of Hell
Genre: Platformer (retro style)
Steam link: http://store.steampowered.com/app/595550/

Very nice looking platformer in retro style. Looks a lot like Amiga, or SNES games. OST is also nice. The problem is - it has awful jump detection and you'll die a lot. Thanks to that, I wanted to cheat and just see the ending (there's also a story in the game). Like in good old Game Genie times. But guess what? I can't find a single value. And that's why I'm kinda shocked here. It's a pretty much basic platformer, but... I can't find anything. I can't find lives, I can't find health, I can't even find crystals. Usually I'm not that noobish (I can't make scripts, but I can at least find current values), but this time... It's like a real challenge to me. The whole game is a like a single .exe file. And I can't find ANY values. What I need:

1.Health
2.Lives
3.The ability to keep the sword after dying (if possible).

If there's any Cheat Engine gurus here, can you, guys, please, help me with this surprisingly hard to hack title? :) Thank you.
 

WarCOzes

Expert Cheater
Mar 28, 2017
121
2
18
#2
Hi,
The game uses the most basic encryption. For find values use this script.


1-Open Cheat Engine
2-Right click on the "value type" drop box->define new custom type
(auto assembler) ->paste this:

Code:
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)

TypeName:
db 'Multimedia Fusion crypted int',0

ByteSize:
dd 4

UsesFloat:
db 0 //Change to 1 if this custom type should be treated as a float

//The convert routine should hold a routine that converts the data to an integer (in eax)
//Note: Keep in mind that this routine can be called by multiple threads at the same time.

//stdcall int ConvertRoutine(unsigned char *input);
ConvertRoutine:
[64-bit]
//rcx=address of input (per Cheat Eagine design)
mov eax,[rcx] //eax=CryptedValue
not eax         //eax is decrypted
ret
[/64-bit]

[32-bit]
mov eax,[esp+4] //eax=&CryptedValue
mov eax,[eax]   //eax=CryptedValue
not eax         //eax is decrypted
ret 4
[/32-bit]

//The convert back routine should hold a routine that converts the given integer back to a row of bytes (e.g when the user wats to write a new value)
//stdcall void ConvertBackRoutine(int i, unsigned char *output);
ConvertBackRoutine:
[64-bit]
//per (per Cheat Eagine design)
//ecx=input
//rdx=address of output
not ecx       //encrypt ecx
mov [rdx],ecx //place the integer the 4 bytes pointed to by rdx
ret
[/64-bit]

[32-bit]
push edx              //save edx,eax
push eax
mov edx, dword [esp+10] //edx=output
mov eax,[esp+c]        //eax=i
not eax                //encrypt eax
mov [edx],eax          //*output=!i
pop eax                //restore eax,edx
pop edx
ret 8
[/32-bit]
3-Disable Fast scan and use value type : Multimedia Fusion crypted int
4-Do your scans as usual

My help, only for Inf. lives. The rest is to hard for me.
 

Attachments

Top Bottom